1

以下のPowerShellスクリプトでは、3つの文字列パラメーターを渡しています。$ComputerNameパラメーター行は期待どおりに機能します。指定したマシンにリモート接続できます。

問題1
$latestbuildfolder行で$builddefinitionパラメーターを使用してビルド定義を指定しています。builddefinitionの名前を追加しますが、そのフォルダー内のフォルダーはリストしません。$ BuildDefinitionパラメーターをビルド定義名の「TeamBuild」に置き換えると、すべてのフォルダーが一覧表示され、最新のフォルダーが取得されます。結合が機能していないと私が感じる方法がいくつかあります。私もJoin-Pathを使用しようとしましたが、まだ機能しません。

問題2
その文字列に$Configurationを指定しようとすると、$deploycmdlocationの行で機能しません。そのパスの間にブランクを出力します。Write-Hostを使用してチェックすると、パラメーターがスクリプトに渡されます。

param(
[System.String] $ComputerName,
[System.String] $Configuration,
[System.String] $BuildDefinition
)
$session = New-PSSession -ComputerName $ComputerName 
Invoke-Command -Session $session -ScriptBlock {
$latestbuildfolder = Get-ChildItem "C:\procmon\procmonBuilds\$BuildDefinition" | Sort-Object LastWriteTime -Descending | SELECT-Object -First 1
$deploycmdlocation = "\procmon\procmonWebProject\$Configuration\_PublishedWebsites\procmonWebProject_Package\procmonWebProject.zip"
$finalstring = $latestbuildfolder.FullName + $deploycmdlocation
$finalstring
}
Remove-PSSession $session

私はたくさんのオプションを試しましたが、今のところ運がありません。

4

3 に答える 3

0

次のように変更してみてください。

Invoke-Command -Session $session -ScriptBlock { param($a, $b)
$latestbuildfolder = Get-ChildItem "C:\procmon\procmonBuilds\$b" | Sort-Object LastWriteTime -Descending | SELECT-Object -First 1 
$deploycmdlocation = "\procmon\procmonWebProject\$a\_PublishedWebsites\procmonWebProject_Package\procmonWebProject.zip"
$finalstring = $latestbuildfolder.FullName + $deploycmdlocation 
$finalstring
} -argumentlist $Configuration, $BuildDefinition
于 2012-06-20T14:02:45.180 に答える
0

先日、これと同じような問題があったと思います...次の行を試してください...

$latestbuildfolder = Get-ChildItem "C:\procmon\procmonBuilds\$($b)" | ...

[文字列の$b変数の周りに$()を追加して、それが役立つかどうかを確認してください。]

于 2012-06-20T15:09:39.720 に答える
0

私のために働いた解決策はちょうどインセプション映画のように感じました。2か所でparamを宣言する必要があることがわかりました。このソリューションを提供してくれた同僚の友人に感謝します。

これが私のために働く最後のスクリプトです。これは、ビルドマシンで実行され、リモートコンピューターでnew-pssessionを実行して、最新のビルドドロップフォルダーからWebパッケージを取得するスクリプトです。これらのパラメーターは、プロセステンプレートアクティビティInvoke-PowerShellスクリプトを呼び出すために使用されるプロセスを介して渡されます。

param(
[System.String] $ComputerName,
[System.String] $Config,
[System.String] $BuildDef
)
$session = New-PSSession -ComputerName $ComputerName 
Invoke-Command -Session $session -ScriptBlock {
param(
[string] $ComputerName,
[string] $Configuration,
[string] $BuildDefinition
$latestbuildfolder = Get-ChildItem "C:\procmon\procmonBuilds\$BuildDefinition" | Sort-Object LastWriteTime -Descending | SELECT-Object -First 1
$deploycmdlocation = "\procmon\procmonWebProject\$Configuration\_PublishedWebsites\procmonWebProject_Package\procmonWebProject.zip"
$finalstring = $latestbuildfolder.FullName + $deploycmdlocation
$finalstring
} -args $ComputerName, $Config, $BuildDef
Remove-PSSession $session
于 2012-06-21T15:45:20.910 に答える