Я запускаю следующее, чтобы получить все представления для всех списков во всех дочерних узлах нашей установки Sharepoint.
$views = @()
foreach ($web in Get-PnPSubWebs) {
foreach ($list in Get-PnPList -Web $web.id) {
foreach ($view in Get-PnPView -list $list.id -web $web.id) {
$views += [pscustomobject]@{Id = $view.Id; StyleId = $view.StyleId}
}
}
}
Что работает нормально, я получаю все просмотры, как и ожидалось. Но мне не удалось установить новый стиль для представлений.
Я пытался использовать $view.ApplyStyle()
, как описано здесь: https://social.msdn.microsoft.com/forums/sharepoint/en-US/58068fb4-33ad-46cf-b866-bd86e1cbcafb/update-sharepoint-list-view-style-via-powershell и здесь: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spview.applystyle.aspx.
Однако я получаю следующую ошибку:
Method invocation failed because [Microsoft.SharePoint.Client.View] does not contain a method named 'ApplyStyle'.
Далее я попытался Set-PnPView -Web $web.id -List $list.id -Identity $view.Id -Values @{StyleId=17}
в соответствии с этими инструкциями:
https://docs.microsoft.com/en-us/powershell/module/sharepoint-pnp/set-pnpview?view=sharepoint-ps. Это только дало мне это сообщение:
WARNING: Setting property 'StyleId' to '17' failed with exception 'Property set method not found.'. Value will be ignored.
И в крайнем случае $view.StyleId = 17
тоже не работает. Тогда я получаю это: 'StyleId' is a ReadOnly property.
, как и ожидалось.
Мы хотим, чтобы все наши списки были в затененном стиле (id: 17). У нас есть сотни списков, и, потому что я надеюсь, что есть лучший способ, чем потратить целый день, вручную меняя их все. Мне еще не удалось найти способ изменить стиль представления списка по умолчанию, но все наши списки, похоже, настроены на представление "по умолчанию", хотя нет способа увидеть, что такое стиль по умолчанию, или изменить его.
Все предложения приветствуются.
Обновление:
Это полный сценарий, который я использовал для всех представлений во всех списках во всех веб-сайтах нашего основного сайта:
Connect-PnPOnline –Url http://sharepointsite –CurrentCredentials
foreach ($web in Get-PnPSubWebs) {
foreach ($list in Get-PnPList -Web $web.id) {
foreach ($view in Get-PnPView -list $list.id -web $web.id) {
[xml]$Doc = New-Object System.Xml.XmlDocument
$Doc.LoadXml($view.ListViewXml);
$element = $Doc.SelectSingleNode("//View//ViewStyle");
if ($element -eq $null)
{
$element = $Doc.CreateElement("ViewStyle");
$element.SetAttribute("ID", 17);
$Doc.DocumentElement.AppendChild($element);
}
else
{
$element.SetAttribute("ID", 17);
}
Set-PnPView -Web $web.id -List $list.id -Identity $view.Id -Values @{ListViewXml=$Doc.FirstChild.InnerXml}
}
}
}
И затем, чтобы получить все списки для основной сети, я запустил это:
Connect-PnPOnline –Url http://sharepointsite –CurrentCredentials
$web = Get-PnPWeb
foreach ($list in Get-PnPList -Web $web.id) {
foreach ($view in Get-PnPView -list $list.id -web $web.id) {
[xml]$Doc = New-Object System.Xml.XmlDocument
$Doc.LoadXml($view.ListViewXml);
$element = $Doc.SelectSingleNode("//View//ViewStyle");
if ($element -eq $null)
{
$element = $Doc.CreateElement("ViewStyle");
$element.SetAttribute("ID", 17);
$Doc.DocumentElement.AppendChild($element);
}
else
{
$element.SetAttribute("ID", 17);
}
Set-PnPView -Web $web.id -List $list.id -Identity $view.Id -Values @{ListViewXml=$Doc.FirstChild.InnerXml}
}
}