Mike-Crowley/Public-Scripts

GitHub: Mike-Crowley/Public-Scripts

一套面向微软生态企业基础设施的 PowerShell 运维与自动化脚本集合,覆盖身份管理、云服务运维、OSINT 侦察和 AD 安全审计等场景。

Stars: 31 | Forks: 5

作者:Mike Crowley —— 联合创始人,Baseline Technologies

Mike's Blog Baseline Technologies Microsoft MVP Public PGP Key linkedin.com/in/MikeCrowley


Buy Me A Coffee

# 公共脚本仓库

GitHub License GitHub top language GitHub commit activity GitHub code size in bytes

用于身份安全、Microsoft 365 和 Windows 基础设施的 PowerShell 工具。专注于 Entra ID、OSINT 以及企业环境中的实用自动化。 其中许多脚本最初发布在 [TechNet Gallery](https://learn.microsoft.com/en-us/teamblog/technet-gallery-retirement) 和 [Microsoft 论坛](https://social.msdn.microsoft.com/Profile/mike%20crowley)。Mike 曾是那里的顶级贡献者之一,并连续八年(2010–2018)荣获 [Microsoft MVP](https://mvp.microsoft.com/en-US/faq) 称号。 大多数脚本都有相关的博客文章,并在 [mikecrowley.us](https://mikecrowley.us/tag/powershell) 上提供了更深入的背景信息。 ## 目录 | 板块 | 描述 | |---|---| | [OSINT](#osint) | Entra 凭据枚举、联合证书检查、AutoDiscover 侦察、Shodan | | [Microsoft Graph](#microsoft-graph) | OATH token 导入、登录报告、Teams 聊天导出、Graph 邮件 | | [Okta](#okta) | 用于 MFA 迁移的 SMS 因素审计 | | [Exchange](#exchange) | 应用访问策略审计、AutoDiscover 代理、收件人导出 | | [Azure](#azure) | 文件共享重复项检测 | | [SharePoint Online](#sharepoint-online) | 重复文件检测、存储分析、回收站恢复 | | [Active Directory](#active-directory) | GUID 转换、ACE 解析、站点链接复制、RC4/AES Kerberos 审计、密码测试 | | [Windows](#windows) | RDP 连接解析 | | [实用工具](#utilities) | TOTP 生成、对象比较、DLP 模式匹配、字体提取 | | [Gists](#gists) | 较小的独立脚本 | | [其他仓库](#other-repos) | PSNamecheap 模块 | ## OSINT + ~~[Get-EntraCredentialType.ps1](./OSINT/Get-EntraCredentialType.ps1)~~ — *已弃用。请改用 Get-EntraCredentialInfo。* + [Get-EntraCredentialInfo.ps1](./OSINT/Get-EntraCredentialInfo.ps1) + 查询 Entra 获取用户的 CredentialType 和 openid-configuration,并合并输出结果。 + [Request-FederationCerts.ps1](./OSINT/Request-FederationCerts.ps1) + 远程查询 ADFS 或 Entra ID 联合元数据,查看所使用证书的相关信息。对于 ADFS 服务器支持 `-FarmFqdn`,对于 Entra ID 联合元数据 endpoint 支持 `-MetadataUrl`。 + [Get-AutoDetect.ps1](./OSINT/AutoDetect-AutoDiscover-v2) + 查询 AutoDiscover v2 / 以及 AutoDetect 服务(两个文件)。 + [Get-ExODomains.ps1](./OSINT/Get-ExODomains.ps1) + 通过 Exchange AutoDiscover 服务查询租户中的域。 + [Get-ShodanIpLookup.ps1](./OSINT/Get-ShodanIpLookup.ps1) + 使用免费的 InternetDB 服务或付费的 API 查询 Shodan 数据库,获取有关 IP 地址的信息。 ## Microsoft Graph + [Import-EntraHardwareOathToken.ps1](./MicrosoftGraph/Import-EntraHardwareOathToken.ps1) + 通过 Graph beta API 将硬件 OATH token 批量导入 Microsoft Entra ID。通过从种子计算 TOTP 验证码,自动执行完整的创建、分配和激活工作流,从而在无需最终用户参与的情况下实现无缝的 MFA 提供商迁移。依赖于 [Get-TOTP.ps1](./Utilities/Get-TOTP.ps1)。 + [Graph_SignInActivity_Report.ps1](./MicrosoftGraph/Graph_SignInActivity_Report.ps1) + 通过 Microsoft Graph 的 Invoke-RestMethod 报告用户的 SignInActivity 和许可证详细信息。 + [MailUser-MgUser-Activity-Report.ps1](./MicrosoftGraph/MailUser-MgUser-Activity-Report.ps1) + 通过 Microsoft Graph 导出邮件用户的登录信息。 + [MgUserMail.ps1](./MicrosoftGraph/MgUserMail.ps1) + 通过 Microsoft Graph 发送电子邮件。 + [Get-TeamsChatMessages.ps1](./MicrosoftGraph/Get-TeamsChatMessages.ps1) + 通过 Microsoft Graph 检索和导出 Microsoft Teams 聊天消息。支持委派身份验证(您自己的聊天)和应用身份验证(任何用户的聊天)。包括日期过滤(相对时间、特定范围或滑动窗口)、分页、Out-GridView 聊天选择器以及 JSON/CSV/剪贴板导出。还提供 `-RegisterApp` 用于创建所需的 Entra ID 应用注册。 ## Okta + [Get-OktaSmsFactors.ps1](./Okta/Get-OktaSmsFactors.ps1) + 查询 Okta Factors API 以报告具有基于 SMS 的 MFA 因素的用户。适用于 SMS 弃用规划和 MFA 迁移审计。支持直接的 Okta 用户枚举和针对大型租户的预过滤 CSV 输入。自动处理 API 频率限制。 ## Exchange + [Audit-ExoAppAccessPolicies.ps1](./Exchange/Audit-ExoAppAccessPolicies.ps1) + 审计所有 Exchange Online 应用访问策略,并生成 HTML 迁移报告,其中包含随时可运行的 PowerShell 命令,用于将每个策略转换为 RBAC for Applications。可识别孤立的应用、缺失的目标、权限缺口和单邮箱阻止程序。 + [Get-AlternateMailboxes.ps1](./Exchange/Get-AlternateMailboxes.ps1) + 查询 Exchange Online AutoDiscover,以使用新式身份验证枚举邮箱代理。 + [Get-AlternateMailboxes_BasicAuth.ps1](./Exchange/Get-AlternateMailboxes_BasicAuth.ps1) + 查询 Exchange Online AutoDiscover 以枚举邮箱代理。旧的基本身份验证版本。 + [RecipientReportv5.ps1](./Exchange/RecipientReportv5.ps1) + 将所有收件人及其电子邮件地址(代理地址)导出为 CSV。 + [LowerCaseUPNs.ps1](./Exchange/LowerCaseUPNs.ps1) + 将 Exchange 用户的电子邮件地址更改为小写。 ## Azure + [Find-AzFileShareDuplicates.ps1](./Azure/Find-AzFileShareDuplicates.ps1) + 通过比较 MD5 哈希值查找 Azure 文件共享中的重复文件。生成包含潜在浪费空间指标的 HTML、CSV 和 JSON 报告。需要 Az.Accounts、Az.Storage、Az.Resources 模块。 ## SharePoint Online + [Find-DriveItemDuplicates.ps1](./SharePointOnline/Find-DriveItemDuplicates.ps1) + 通过 Microsoft Graph 识别 OneDrive 和 SharePoint Online 文档库中的重复文件。采用双重置信度检测:高置信度(quickXorHash 匹配)和低置信度(针对没有哈希的文件名匹配)。包括带有 Out-GridView 的交互式 `-SitePicker` 模式,用于浏览 SharePoint 网站和 OneDrive 用户;提供通过 Graph Reports API 的可选 `-IncludeStorageMetrics`,并在桌面上带有时间戳的文件夹中生成包含 CSV/JSON 导出的 HTML 仪表板。 + [Get-SPOStorageInsights.ps1](./SharePointOnline/Get-SPOStorageInsights.ps1) + 通过 Microsoft Graph 分析 SharePoint Online 和 OneDrive 存储中的重复文件、版本历史记录膨胀以及保留策略库。支持具有交互式网站选择器的多站点扫描、双重置信度重复检测,并生成包含 CSV/JSON 导出的 HTML 仪表板。 + [Restore-FromRecycleBin.ps1](./SharePointOnline/Restore-FromRecycleBin.ps1) + 批量从 SPO 回收站还原文件,并提供日志记录和进度跟踪。 ## Active Directory + [Convert-GuidFormat.ps1](./AD_DS/Convert-GuidFormat.ps1) + 在标准 GUID、ImmutableId (Base64) 和十六进制字节表示形式之间进行转换。自动检测输入格式并返回所有三种编码——在跨 Entra Connect、Entra ID 和 Active Directory 交叉引用对象时非常有用。 + [Resolve-AdAceGuid.ps1](./AD_DS/Resolve-AdAceGuid.ps1) + 将 Active Directory ACE 上的 GUID 解析为友好的属性、类或扩展权限名称。仅需两次 LDAP 查询,即可从 schema 和 Extended-Rights 容器构建查找哈希表,然后在本地解析单个 GUID——无需为每个 ACE 进行往返。对于审计 OU 委派和了解谁可以写入哪些属性非常有用。 + [Update-UseNotifyReplication.ps1](./AD_DS/Update-UseNotifyReplication.ps1) + 评估并选择性地在 AD 站点链接和复制连接上启用 Use_Notify 选项,以减少复制延迟。生成一个包含健康评分、站点链接详细信息(成本、计划、站点)、复制连接和可行性建议的 HTML 仪表板。使用 `-GetRegistrySettings` 通过 WinRM 查询 DC 通知计时器和 AvoidPdcOnWan 设置。 + [Find-Rc4Impact.ps1](./AD_DS/Find-Rc4Impact.ps1) + 在 Microsoft 停用 RC4 之前,查找仍然缺少 AES Kerberos 密钥(因此依赖 RC4)的已启用账户。通过 DSInternals 复制将每个账户的密钥类型存在情况流式传输到磁盘——只读,不存储任何机密——过滤掉没有 AES 密钥的用户/服务账户,并通过最后登录时间、OU、SPN 计数和受支持的加密类型来丰富影响列表,以进行修复分类。需要 DSInternals 模块和“Replicating Directory Changes (All)”(DCSync) 权限。 + [Get-ADSiteByIp.ps1](./AD_DS/Get-ADSiteByIp.ps1) + 通过 LDAP 查询 AD 子网,确定 IP 地址属于哪个 Active Directory 站点。需要 PowerShell Gallery 中的 IP-Calc 脚本。 + [Test-AdPassword.ps1](./AD_DS/Test-AdPassword.ps1) + 针对本地计算机或 Active Directory 域验证 PSCredential 对象的凭据。 ## Windows + [RDPConnectionParser.ps1](./Windows/RDPConnectionParser.ps1) + 提取交互式(本地和远程桌面)登录信息并保存为 CSV。 ## 实用工具 + [Get-TOTP.ps1](./Utilities/Get-TOTP.ps1) + 生成基于时间的一次性密码(RFC 6238)并将十六进制字符串转换为 Base32(RFC 4648)。没有外部依赖的独立函数——适用于验证硬件 token 输出、自动化 OATH token 激活,或为身份验证器应用转换供应商提供的十六进制机密。 + [Compare-ObjectsInVSCode.ps1](./Utilities/Compare-ObjectsInVSCode.ps1) + 在 Visual Studio Code 中比较两个 PowerShell 对象。 + [Convert-CaesarCipher.ps1](./Utilities/Convert-CaesarCipher.ps1) + 使用 Caesar Cipher 编码或解码区分大小写的英文字符串。 + [Find-SensitiveInfo.ps1](./Utilities/Find-SensitiveInfo.ps1) + 根据 Microsoft Purview DLP 关键字和 regex 模式检查字符串,以识别潜在的敏感数据(IP 地址、账号、个人标识符)。使用与 Microsoft 365 DLP 相同的分类规则(从 Exchange Online 导出)。 + [Read-Fonts.ps1](./Utilities/Read-Fonts.ps1) + 通过解析嵌入的 Office Open XML,从 DOCX、XLSX 和 PPTX 文件中提取字体名称。报告本地系统上是否安装了每种字体。需要 PowerShell 7。 # Gists 一些较小的内容位于此处:https://gist.github.com/Mike-Crowley + [Get-Superscript.ps1](https://gist.github.com/Mike-Crowley/b2a63bfe6bd533452bca3125037594a1) + 将给定字母替换为上标字母。 + [Get-WordscapesResults.ps1](https://gist.github.com/Mike-Crowley/09a03b770ab94af01147d4c7f9a10460) + 为 wordscapes 游戏生成单词,好让我能比我妈妈回答得更快。 + [Verify-SmbSigning.ps1](https://gist.github.com/Mike-Crowley/4aa9d0913ef0518e79034e5cdc56daf4) + 与远程服务器建立 SMB 连接,使用 Wireshark (tshark) 捕获流量,然后解析捕获的内容以报告 SMB 签名情况。 ## 其他仓库 + [PSNamecheap](https://github.com/Mike-Crowley/PSNamecheap) — 配置驱动的 PowerShell 模块,用于通过 Namecheap API 管理 Namecheap 域和 DNS 记录。在按域划分的 JSON 文件中定义您期望的 DNS 状态,使用 `Test-NcDnsConfig` 预览更改,并使用 `Sync-NcDnsConfig` 进行同步。 访问 mikecrowley.us 阅读博客文章,了解有关许多此类脚本的更深入背景。
标签:AI合规, Awesome, Azure, ESC4, IPv6, Libemu, OSINT, PowerShell, Terraform 安全, 微软365, 系统管理, 脚本库, 运维自动化