0

SP 2010 Foundation で NewWebPage xml コマンドを使用すると、奇妙な問題が発生します。以下のコードは動作しません

cls
Write-Host "Production Manager v8.0 Deployment Utility" -ForegroundColor red
Write-Host ""

#Starting the script. Lets see if we can find the configuration and map files first.
Write-Host -NoNewline "Checking for the Configuration.xml, PageMap.xml and  PageTemplate.xml files: " -ForegroundColor white
if((Test-Path "Configuration.xml") -and (Test-Path "PageMap.xml") -and (Test-Path "PageTemplate.xml"))
{
     Write-Host "FOUND" -ForegroundColor green
}
else
{
    Write-Host "NOT FOUND" -ForegroundColor red
    Write-Host "Check for the necessary files and try again."
    Write-Host ""
    Write-Host ""
    exit
}

Write-Host "Reading Configuration.xml"
[xml]$Configuration = Get-Content Configuration.xml
Write-Host "Reading PageMap.xml"
[xml]$PageMap = Get-Content PageMap.xml

Write-Host "Reading from Production Manager Site:    "$Configuration.Configuration.SiteConfiguration.SiteURL



#Some variables necessary for the loop
$pageCreationLoopIterations = 0
$pageLayout = ""
$pageTitle = ""
$createPageCommand = '<?xml version="1.0" encoding="UTF-8"?><Method ID="0,NewWebPage"><SetList Scope="Request">' + $productionManagerLibrary.ID + '</SetList><SetVar Name="Cmd">NewWebPage</SetVar><SetVar Name="ID">New</SetVar><SetVar Name="Type">WebPartPage</SetVar><SetVar Name="WebPartPageTemplate">' + $pageLayout + '</SetVar><SetVar Name="Overwrite">true</SetVar><SetVar Name="Title">MyPage</SetVar></Method>';

#Beginning the loop
Write-Host "Running through the PageMap file"

foreach($Page in $PageMap.Pages.Page)
{
     $web = Get-SPWeb $Configuration.Configuration.SiteConfiguration.SiteURL
     $productionManagerLibrary = $web.Lists | Where { $_.Title -eq "Production Manager" }
     $pageName = if($Page.SelectSingleNode("PageName")) { $Page.PageName } else {      $Configuration.Configuration.PageConfiguration.DefaultPageName }
     $pageLayout = if($Page.SelectSingleNode("PageLayout")) { $Page.PageLayout } else { $Configuration.Configuration.PageConfiguration.DefaultPageLayout }

     Write-Host 'Creating Page ' $pageName
     $web.ProcessBatchData($createPageCommand)

}

しかし、これは実行するたびに問題なく動作します:

$url = "http://mpm8/mpm";
$listname = "Production Manager"
$web = Get-SPWeb $url
$pagesLibrary = $web.Lists | Where { $_.Title -eq "Production Manager" }
$pageLayout = 8
$cmd = '<?xml version="1.0" encoding="UTF-8"?><Method ID="0,NewWebPage"><SetList Scope="Request">' + $pagesLibrary.ID + '</SetList><SetVar Name="Cmd">NewWebPage</SetVar><SetVar Name="ID">New</SetVar><SetVar Name="Type">WebPartPage</SetVar><SetVar Name="WebPartPageTemplate">' + $pageLayout + '</SetVar><SetVar Name="Overwrite">true</SetVar><SetVar Name="Title">MyPage</SetVar></Method>';
$web.ProcessBatchData($cmd)

2 つのスクリプトに違いは見当たりません。最初のエラーは次のとおりです。

<Result ID="0,NewWebPage" Code="-2130575350">
<ErrorText>Invalid URL Parameter.

The URL provided contains an invalid Command or Value. Please check the URL again.   </ErrorText></Result>

これについて私を助けてもらえますか?多分私はこれを foreach ループから実行することはできませんか? :(

ありがとう!

4

1 に答える 1

0

$createPageCommand を最初に (ループの前に) 設定し、2 番目に (ループで) 必要な変数を設定しました。

これを ISE で実行してステップ スルー (つまり、デバッグ) すると、変数とその値を確認できます。それ以外の場合は、ループを実行するときに変数の値を表示して、変数が正しく設定されていることを確認します。

したがって、あなたの例では、 $createPageCommand をループ内で $productionManagerLibrary が設定された後に配置します。次に、$web.ProcessBatchData($createPageCommand) の直前に $createPageCommand の値を発行して、問題がないことを確認する必要があります。

私はこれを実行せずに目をつぶっただけですが、これが理由かどうか教えてください!

于 2012-12-17T06:06:50.550 に答える