如何修改PowerShell脚本正确获取SharePoint Online站点隐私状态
问题根源
原脚本错误使用了$siteProperties.Status属性,这个属性代表的是站点的激活状态(Active/Inactive),而非站点的隐私权限设置(公开/私有),因此所有正常运行的站点都被错误标记为“公开”。
正确的脚本修改方案
我们需要读取Get-PnPTenantSite返回对象中的Privacy属性,该属性直接存储了站点的隐私状态,值为Public或Private。修改后的完整脚本如下:
# 连接到SharePoint Online管理员中心(建议使用管理员URL而非普通站点) Connect-PnPOnline -Url https://yourtenant-admin.sharepoint.com -UseWebLogin # 获取租户内所有站点(包含所有类型站点,可按需添加过滤参数) $sites = Get-PnPTenantSite -IncludeAll # 初始化存储报告的数组 $sitePrivacyReport = @() # 遍历每个站点 foreach ($site in $sites) { # 直接从已获取的站点对象中读取隐私状态,无需重复调用Get-PnPTenantSite $privacy = switch ($site.Privacy) { "Public" { "公开" } "Private" { "私有" } default { "未知状态" } } # 构造站点信息对象 $siteInfo = [PSCustomObject]@{ 站点标题 = $site.Title 站点URL = $site.Url 隐私状态 = $privacy } $sitePrivacyReport += $siteInfo } # 定义输出路径 $outputPath = "C:\Users\USERNAME\Downloads\SharePoint_Site_Privacy_Report.csv" # 导出为CSV文件(指定编码为UTF-8避免中文乱码) $sitePrivacyReport | Export-Csv -Path $outputPath -NoTypeInformation -Encoding UTF8 Write-Host "报告已保存至: $outputPath" # 断开连接 Disconnect-PnPOnline
关键修改说明
- 连接URL优化:使用租户管理员URL(
https://yourtenant-admin.sharepoint.com)而非普通站点,确保获取所有站点的完整权限。 - 直接读取隐私属性:无需重复调用
Get-PnPTenantSite,直接从$site对象中读取Privacy属性,提升脚本执行效率。 - 中文友好处理:将英文状态值转换为中文,同时指定CSV编码为UTF-8,避免导出后中文乱码。
- 添加
-IncludeAll参数:确保获取所有类型的站点(如团队站点、通信站点等)。
内容的提问来源于stack exchange,提问作者Kent Allard
相关产品推荐
相关产品推荐

