SharePoint Online:PowerShell批量映射爬网属性至可细化字符串托管属性
方案一:使用PnP PowerShell(推荐)
PnP PowerShell已支持直接操作搜索架构,无需依赖UI,适合多站点批量场景。需确保安装最新版本的PnP.PowerShell模块。
步骤及示例代码
- 安装/更新PnP模块
Install-Module -Name PnP.PowerShell -Force -AllowClobber
- 连接到租户管理员中心
Connect-PnPOnline -Url https://<你的租户>-admin.sharepoint.com -Interactive
- 映射爬网属性到可细化托管属性
# 配置参数 $managedPropName = "RefinableString01" # 优先使用租户默认的可细化字符串属性(RefinableString01~100) $crawledPropName = "ows_CustomColumn" # 目标爬网属性名称(如自定义列表列的爬网属性) $crawledPropCategory = "SharePoint" # 爬网属性所属类别 # 获取托管属性 $managedProp = Get-PnPManagedProperty -Identity $managedPropName # 若托管属性不存在则创建(建议使用默认可细化属性,此步骤可选) if (-not $managedProp) { $managedProp = New-PnPManagedProperty -Name $managedPropName -Type String -Refinable $true -Queryable $true } # 获取目标爬网属性 $crawledProp = Get-PnPCrawledProperty -Name $crawledPropName -Category $crawledPropCategory # 添加映射 if ($crawledProp) { Add-PnPManagedPropertyMapping -ManagedProperty $managedProp -CrawledProperty $crawledProp Write-Host "已成功将爬网属性 $crawledPropName 映射到托管属性 $managedPropName" } else { Write-Host "未找到指定的爬网属性 $crawledPropName" }
方案二:使用CSOM封装PowerShell脚本
若PnP模块无法满足需求,可直接通过SharePoint CSOM操作搜索架构,实现映射逻辑。
示例代码
# 加载SharePoint CSOM程序集(需确保路径正确) Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll" Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Search.dll" # 配置参数 $tenantAdminUrl = "https://<你的租户>-admin.sharepoint.com" $username = "admin@<你的租户>.onmicrosoft.com" $password = ConvertTo-SecureString "<你的密码>" -AsPlainText -Force $managedPropName = "RefinableString01" $crawledPropName = "ows_CustomColumn" $crawledPropCategory = "SharePoint" # 创建客户端上下文 $context = New-Object Microsoft.SharePoint.Client.ClientContext($tenantAdminUrl) $context.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $password) # 获取搜索架构 $searchSchema = [Microsoft.SharePoint.Client.Search.Administration.SearchSchema]::GetSearchSchema($context) $context.Load($searchSchema) $context.ExecuteQuery() # 获取或创建托管属性 $managedProp = $searchSchema.GetManagedProperty($managedPropName) $context.Load($managedProp) $context.ExecuteQuery() if (-not $managedProp) { $propCreationInfo = New-Object Microsoft.SharePoint.Client.Search.Administration.ManagedPropertyCreationInformation $propCreationInfo.Name = $managedPropName $propCreationInfo.Type = [Microsoft.SharePoint.Client.Search.Administration.ManagedPropertyType]::Text $propCreationInfo.Refinable = $true $propCreationInfo.Queryable = $true $managedProp = $searchSchema.CreateManagedProperty($propCreationInfo) $context.Load($managedProp) $context.ExecuteQuery() } # 获取目标爬网属性 $crawledProps = $searchSchema.GetCrawledProperties($crawledPropCategory, $crawledPropName, $null) $context.Load($crawledProps) $context.ExecuteQuery() $crawledProp = $crawledProps | Where-Object { $_.Name -eq $crawledPropName } # 添加映射并更新 if ($crawledProp) { $mapping = New-Object Microsoft.SharePoint.Client.Search.Administration.CrawledPropertyMapping $mapping.CrawledPropertyName = $crawledProp.Name $mapping.CrawledPropertyCategory = $crawledProp.CategoryName $managedProp.AddMapping($mapping) $managedProp.Update() $context.ExecuteQuery() Write-Host "映射操作完成" } else { Write-Host "未找到指定的爬网属性" } # 释放上下文资源 $context.Dispose()
注意事项
- 优先使用租户默认的
RefinableStringXX系列属性,自定义托管属性可能需要额外配置才能正常参与搜索 - 映射完成后需等待全量爬网或手动触发爬网,属性映射才会生效
- 操作需具备SharePoint租户管理员权限
- PnP PowerShell需升级至最新版本,旧版本可能缺失搜索架构相关cmdlet
内容的提问来源于stack exchange,提问作者Surendra Mourya
相关产品推荐
相关产品推荐

