如何通过PnP PowerShell获取SharePoint Online的所有Site对象
你的问题出在Get-PnPSite需要先建立目标站点的连接上下文,直接调用Get-PnPSite -Url $site.url而没有先连接到该站点,会因为缺少上下文而失败。以下是修正后的实现方案:
步骤1:连接到租户管理站点
首先需要连接到你的SharePoint Online租户管理站点,获取全量站点列表:
# 替换为你的租户管理站点URL Connect-PnPOnline -Url "https://yourtenant-admin.sharepoint.com" -Interactive
步骤2:循环获取每个站点的Site对象
遍历所有租户站点,对每个站点单独建立连接后,再获取Site对象:
$sites = Get-PnPTenantSite $allSiteObjects = @() foreach ($site in $sites) { try { # 连接到当前站点,跳过租户管理检查以避免权限报错 Connect-PnPOnline -Url $site.Url -Interactive -SkipTenantAdminCheck # 获取当前站点的Site对象 $siteObject = Get-PnPSite # 将对象存入数组,方便后续批量处理 $allSiteObjects += $siteObject # 示例:输出站点核心信息 Write-Host "站点标题: $($siteObject.Title) | URL: $($siteObject.Url)" } catch { Write-Warning "无法访问站点 $($site.Url): $_" } }
关键说明
-SkipTenantAdminCheck:避免连接普通站点时触发不必要的租户权限检查,确保连接流程正常。- 异常处理:加入
try/catch可以跳过无权限或不可访问的站点,防止整个循环中断。 - 批量存储:将Site对象存入数组
$allSiteObjects后,可统一进行后续的属性读取、配置修改等操作。
内容的提问来源于stack exchange,提问作者Blue
相关产品推荐
相关产品推荐

