You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确编写PowerShell IF条件判断SharePoint列表中是否存在指定URL

问题分析与修复方案

原脚本中判断站点URL是否已存在于列表的逻辑失效,原因是直接对列表项集合$ListItems访问FieldValuesAsText.SiteUrl无法正确提取所有已有的SiteUrl值数组,PowerShell无法自动将集合中每个项的属性展开为单一数组。

修复步骤

  1. 提前提取所有已存在的SiteUrl
    在进入循环之前,先从列表项中提取所有已有的SiteUrl并存储到数组中:
# 获取列表后,提取所有已存在的SiteUrl到数组
$ListItems = Get-PnPListItem -List $List
$existingSiteUrls = $ListItems | ForEach-Object { $_.FieldValuesAsText.SiteUrl }
  1. 修改判断条件
    将原来失效的判断行替换为:
if ($Site.Url -notin $existingSiteUrls) {
    Add-PnPListItem -List $List -Values @{"Hub" = $Hub.SiteUrl; "SiteUrl" = $Site.Url}
}

完整修复后的脚本

Connect-PnPOnline -Url "https://myCompany-admin.sharepoint.com" -Interactive
$Report = @()
Write-Host "获取所有中心网站列表..."
$HubSites = Get-PnPHubSite
Write-Host "获取所有关联了中心网站的站点列表..."
$Sites = Get-PnPTenantSite | ? {$_.HubSiteId.Guid -ne "00000000-0000-0000-0000-000000000000"}
Write-Host "连接到目标SharePoint站点..."
$connection = Connect-PnPOnline -Url "https://myCompany.sharepoint.com/sites/HubSiteMap" -Interactive
$List = Get-PnPList "Sites" -Connection $connection
$ListItems = Get-PnPListItem -List $List

# 提取所有已存在的SiteUrl到数组
$existingSiteUrls = $ListItems | ForEach-Object { $_.FieldValuesAsText.SiteUrl }

ForEach($Hub in $HubSites)
{
    # 获取中心网站ID
    $HubSiteId = $Hub.ID.GUID
    # 遍历每个站点集合
    ForEach($Site in $Sites)
    {
        # 获取当前站点关联的中心网站ID
        $AssociatedHubSiteID = $Site.HubSiteId.Guid
        If ( ($AssociatedHubSiteID -eq $HubSiteId) -and ($Hub.SiteUrl -ne $Site.Url) )
        {
            $ReportEntry = "" | Select-Object Hub,SiteUrl 
            $ReportEntry.Hub = $Hub.SiteUrl 
            $ReportEntry.SiteUrl = $Site.Url
            $Report += $ReportEntry        
            if ($Site.Url -notin $existingSiteUrls) {
                Add-PnPListItem -List $List -Values @{"Hub" = $Hub.SiteUrl; "SiteUrl" = $Site.Url}
                # 添加后更新数组,避免重复判断(可选)
                $existingSiteUrls += $Site.Url
            }
        }
    }
}

额外优化(可选)

在添加新列表项后,将新的SiteUrl追加到$existingSiteUrls数组中,避免后续循环重复检查已添加的项,提升脚本执行效率。

内容的提问来源于stack exchange,提问作者NightTom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 01:52:10