Powershell копирует вики-страницу sharepoint из другого вики-списка - sharepoint-pnp - PullRequest
0 голосов
/ 23 октября 2018

Я использую модуль 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.

Может кто-нибудь указать мне правильное направление на это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...