【问题标题】:PNP powershell SharePoint Online set modern page bannerimageurlPNP powershell SharePoint Online 设置现代页面bannerimageurl
【发布时间】:2018-03-05 23:16:25
【问题描述】:

我的目标是使用 PNP 命令行开关来设置页面的 SharePoint online 现代bannerimageurl 属性。

首先我得到一个页面列表及其当前标题和bannerimageurl值

# Get alist of all pages and their banner URLs
$items = Get-PnPListItem -List "SitePages" -Fields ID,Title,BannerImageUrl
$items | %{new-object PSObject -Property @{Id=$_["ID"];Title=$_["Title"];BannerImageUrl=$_["BannerImageUrl"].Url}} | select ID,Title,BannerImageUrl

但即使我随后运行以下代码来设置一页的 BannerImage(比如 ID2)

Set-PnPListItem -List "SitePages" -Id 2 -Values @{"BannerImageUrl" = " https://contoso.sharepoint.com/sites/mycomsite3/bannerimages/bread-braid-tedster-sml.jpg";}

当我再次运行以下命令时,项目 2 显示为具有更改的 BannerImageUrl

$items = Get-PnPListItem -List "SitePages" -Fields ID,Title,BannerImageUrl
$items | %{new-object PSObject -Property @{Id=$_["ID"];Title=$_["Title"];BannerImageUrl=$_["BannerImageUrl"].Url}} | select ID,Title,BannerImageUrl

但是当我在浏览器中实际查看第 2 项的页面时,横幅图像没有变化??

请告诉我在设置 BannerImageUrl 时我做错了什么。

您的经验和知识被广泛接受。

【问题讨论】:

  • 我使用 SharePoint 设计器进行了检查,当我运行如下代码时 Set-PnPListItem -List "SitePages" -Id 29 -Values @{"BannerImageUrl" = "";} ASPX页面修改为 但是在浏览器中查看的页面没有显示没有bannerimage。

标签: powershell sharepoint sharepoint-online


【解决方案1】:

我已经根据 JS 解决方案 here 为完全相同的问题编写了一个 PS 函数,以防您仍然需要它:

function UpdateBannerImage {
param(
    [string]$listName,
    [int]$itemId,
    [string]$newBannerUrl
)
#get list item
$item = Get-PnPListItem -List $listName -Id $itemId -Fields LayoutWebpartsContent, BannerImageUrl
if($item["LayoutWebpartsContent"] -match 'data-sp-controldata="([^"]+)"'){
    # get substring w/ regex
    $temp = $item["LayoutWebpartsContent"] | Select-String -Pattern 'data-sp-controldata="([^"]+)"'
    $content = $temp.Matches.Groups[1].Value
    # replace [] bc sometimes it throws later
    $content = $content.replace("[","[").replace("]","]")
    # decode 
    $dec = [System.Web.HttpUtility]::HtmlDecode($content)
    # from JSON
    $jnContent = ConvertFrom-Json $dec

    #set values
    if (!$jnContent.serverProcessedContent) {
        $jnContent.serverProcessedContent = {};
    }
    if (!$jnContent.serverProcessedContent.imageSources) {
        $jnContent.serverProcessedContent.imageSources = New-Object PSObject;
        $jnContent.serverProcessedContent.imageSources | add-member Noteproperty imageSource $newBannerUrl
    }
    if(!$jnContent.serverProcessedContent.imageSources.imageSource){
        $jnContent.serverProcessedContent.imageSources | add-member Noteproperty imageSource $newBannerUrl
    }
    $jnContent.serverProcessedContent.imageSources.imageSource = $newBannerUrl

    # need to always create new properties, otherwise nothing changes
    $curTitle = "";
    if($jnContent.properties){
        $curTitle = $jnContent.properties.title;
    }
        $jnContent.properties = New-Object PSObject;
    $jnContent.properties | add-member Noteproperty title $curTitle
    $jnContent.properties | add-member Noteproperty imageSourceType 2

    # to JSON
    $newContent = $jnContent | ConvertTo-Json -Compress
    $enc = [System.Web.HttpUtility]::HtmlEncode($newContent)
    $enc = $enc.replace("{","{").replace(":",":").replace("}","}").replace("[","[").replace("]","]")

    # replace full item property
    $fullContent = $item["LayoutWebpartsContent"].replace("[","[").replace("]","]");
    $fullContent = $fullContent -replace $content, $enc
    $fullContent.replace("[","[").replace("]","]")

    # set & update
    $item["LayoutWebpartsContent"] = $fullContent
    $item.Update()

    # not really sure if needed, but also update bannerURL
    Set-PnPListItem -List $listName -Id $itemId -Values @{"BannerImageUrl" = $newBannerUrl; }
    }
}

如果我弄乱了格式,这里是新的抱歉,为了安全,也上传了here:P

【讨论】:

  • 好东西!谢谢!现在我需要弄清楚的是如何像在 UI 中那样移动图像! :)
  • 如果您在移动图像后查看 $item["LayoutWebpartsContent"] 的内容,它有 2 个新属性:"properties":"title":"StartPage","imageSourceType":2, "translateX":46.489859594383773,"translateY":21.052631578947366}}",也可以复制到代码中或者计算出来
  • 谢谢!会检查的!
  • 不知道为什么,但我第一次运行这个函数并为参数提供了所有正确的细节——它工作得很好。现在我根本无法让它工作。 PNP Powershell 有时有点痛苦! 2018 年 3 月的更新是否破坏了这个脚本?
猜你喜欢
  • 2017-09-25
  • 1970-01-01
  • 2016-06-15
  • 2021-12-13
  • 1970-01-01
  • 2017-12-08
  • 1970-01-01
  • 2021-03-18
  • 2019-01-31
相关资源
最近更新 更多