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

如何用PnP PowerShell获取SharePoint页面WebPart全量属性

获取SharePoint客户端侧页面WebPart全量配置的方法

问题根因

Get-PnPClientSidePage返回的PropertiesJson字段本身就不存储WebPart的全部配置:

  • 该字段仅返回WebPart静态声明的公开属性,按钮文本、跳转链接、快速链接条目、Hero卡片配置这类用户动态编辑的核心属性,默认不会直接写入这个字段
  • PowerShell控制台输出时会自动截断长文本,进一步让返回结果看起来缺漏更多

方案1:直接读取控件Properties动态对象(适配90%场景)

PnP PowerShell已经把WebPart全量解析后的属性存在了控件的Properties动态对象中,不要直接读PropertiesJson字符串即可拿到大部分缺失属性,参考代码:

# 获取目标页面
$page = Get-PnPClientSidePage "de/test2.aspx"

# 遍历所有WebPart控件导出全属性
$page.Controls | Where-Object Type -eq "PageWebPart" | ForEach-Object {
    Write-Host "=== 控件名称:$($_.Title) 控件ID:$($_.InstanceId) ==="
    # 注意必须指定Depth参数≥20,否则嵌套属性会被默认截断
    $_.Properties | ConvertTo-Json -Depth 20
}

如果需要留存结果,直接在命令末尾追加| Out-File .\all-webpart-config.json -Encoding UTF8导出到本地文件查看,避免控制台截断。


方案2:拉取页面原始存储数据(100%全属性无遗漏)

如果方案1仍有属性缺失(比如Link控件的预览缓存数据、图片控件的服务端处理地址、搜索驱动WebPart的查询配置),可以直接调用接口拉取页面在SharePoint后台存储的原始Canvas控件数据,这部分是页面加载时读取的最原始配置,没有任何裁剪:

$page = Get-PnPClientSidePage "de/test2.aspx"
# 拉取页面原始数据
$rawPageContent = Invoke-PnPSPRestMethod -Url $page.PageUrl -Method Get

# 遍历所有控件导出全量配置
$rawPageContent.CanvasControls | ForEach-Object {
    Write-Host "=== 控件名称:$($_.ctrlProps.title) 控件ID:$($_.id) ==="
    [PSCustomObject]@{
        基础配置 = $_.ctrlProps
        服务端处理内容 = $_.serverProcessedContent
        自定义扩展属性 = $_.customSettings
    } | ConvertTo-Json -Depth 30
}

这个方案返回的内容包含所有配置项,不管是按钮的标签、跳转链接,还是Quick Links、Hero、Call to Action、图片库等复杂控件的嵌套配置,都会完整返回,没有遗漏。


注意事项

  • 执行命令前请将PnP PowerShell升级到1.12.0以上版本,旧版本对新版WebPart的属性解析存在已知bug,会导致属性丢失
  • 部分WebPart的链接、图片源地址等动态替换的内容,不会存在基础配置字段中,必须从serverProcessedContent节点下获取
  • ConvertTo-Json必须指定足够大的Depth参数,PowerShell默认转换深度仅为2,嵌套超过2层的属性会被直接转成空字符串,导致配置不全

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:45:33