Я использую модуль sharepoint-pnp, но в нем, похоже, отсутствует функция, которую я ранее построил, и мне интересно, что-то здесь не хватает.
Проблема в том, что яВверху есть несколько веб-частей и фильтр, чтобы упростить повторное развертывание моего вики.Я могу изменить шаблон, и он перестроит все страницы и автоматически обновит флаг фильтра.
Я использую код копирования:
function Get-SharepointContext
{
Param(
[Parameter(Mandatory=$true)]
$siteUrl,
[Parameter(Mandatory=$false)]
$cred)
If(!$cred){$cred = get-credential -UserName "$ENV:Username@$env:USERDNSDOMAIN" -Message "Login"}
[string]$username = $cred.UserName
$securePassword = $cred.Password
[Void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client")
$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($siteUrl)
$ctx.RequestTimeOut = 1000 * 60 * 10;
$ctx.AuthenticationMode =[Microsoft.SharePoint.Client.ClientAuthenticationMode]::Default
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $securePassword)
$ctx.Credentials = $credentials
Return $ctx
}
function Get-AuthenticationCookie($context)
{
$sharePointUri = New-Object System.Uri($context.site.Url)
$authCookie = $context.Credentials.GetAuthenticationCookie($sharePointUri)
if($? -eq $false) #https://ss64.com/ps/syntax-automatic-variables.html
{
return $null
}
$fedAuthString = $authCookie.TrimStart("SPOIDCRL=".ToCharArray())
$cookieContainer = New-Object System.Net.CookieContainer
$cookieContainer.Add($sharePointUri,(New-Object System.Net.Cookie("SPOIDCRL", $fedAuthString)))
return $cookieContainer
}
function Copy-SharepointPage
{
Param(
[Parameter(Mandatory=$true)]
$context,
[Parameter(Mandatory=$true)]
$sitename,
[Parameter(Mandatory=$true)]
$sourcePage,
[Parameter(Mandatory=$true)]
$destPage)
Write-Host "Copy page $sourcePage to $destPage on " $context.web.Url -foregroundcolor Yellow
$requestUrl = $context.web.Url + "/_vti_bin/_vti_aut/author.dll"
$request = $context.WebRequestExecutorFactory.CreateWebRequestExecutor($context, $requestUrl).WebRequest
$request.Method = "POST"
$request.Headers.Add("Content", "application/x-vermeer-urlencoded")
$request.Headers.Add("X-Vermeer-Content-Type","application/x-vermeer-urlencoded")
$request.UserAgent = "FrontPage"
$request.UseDefaultCredentials = $false
$cookiesContainer = Get-AuthenticationCookie -context $context
$request.CookieContainer = $cookiesContainer
$rpcCallString =
"method=move+document%3a15%2e0%2e0%2e4569&service%5fname=" +
"$([System.Web.HttpUtility]::UrlEncode($sitename))&oldUrl=" +
"$([System.Web.HttpUtility]::UrlEncode($sourcePage))&newUrl=" +
"$([System.Web.HttpUtility]::UrlEncode($destPage))&url%5flist=" +
"%5b%5d&rename%5foption=nochangeall&put%5foption=edit&docopy=true"
$requestStream = $request.GetRequestStream()
$rpcHeader = [System.Text.Encoding]::UTF8.GetBytes($rpcCallString)
$requestStream.Write($rpcHeader, 0, $rpcHeader.Length);
$requestStream.Close();
$response = $request.GetResponse()
$stream = $response.GetResponseStream()
$reader = New-Object System.IO.StreamReader($stream)
$content = $reader.ReadToEnd()
$reader.Close()
$reader.Dispose()
Write-Host "`tPage is successfully copied" -foregroundcolor green
}
Когда я пытаюсь использоватьМодуль модуля sharepoint-pnp для get-pnpwikipagecontent удаляет веб-части и просто удерживает заголовки из шаблона
Я дурачился и смог получить все веб-части из шаблона и содержимого(это просто заголовки):
Get-PnPWebPart -PageUrl '/sites/New%20Client%20Template/ClientTemplateFull.aspx'
Get-PnPWikiPageContent -ServerRelativePageUrl '/sites/New%20Client%20Template/ClientTemplateFull.aspx'
Но я не понимаю, как я могу передать их на Add-PNPWikiPage.
Может кто-нибудь указать мне правильное направление на это?