2012-06-20 75 views
1

在下面的powershell腳本中,我傳遞了三個字符串參數。 $ ComputerName參數行按預期工作。我能夠遠程進入我指定的機器。Powershell參數在預期路徑中不能正常工作

1期
上線$ latestbuildfolder我使用$ builddefinition參數指定構建定義。它附加了builddefinition的名稱,但沒有列出該文件夾內的文件夾。如果我通過「TeamBuild」構建定義名稱來替換$ BuildDefinition參數,那麼它可以列出所有文件夾並獲取最新的文件夾。一些我覺得加入不起作用。我嘗試過使用Join-Path,但仍然無法正常工作。

第2期
上線$ 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 

我已經嘗試了很多選擇,至今仍然沒有運氣。

回答

0

這個解決方案對我來說只是感覺就像入侵電影。事實證明,我必須在兩個地方宣佈參數。感謝我的同事朋友提供此解決方案。

這是最後的腳本,適合我。這是一個在構建機器上運行的腳本,然後在遠程計算機上執行新的pssession從最新的構建drop文件夾中獲取web包。這些參數通過用於調用PowerShell腳本的流程模板活動Invoke-Process傳遞。

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 
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 
+0

否更改結果相同。它追加了$ a,但沒有列出Get-Childitem,並且$ b始終爲空,即使它在腳本內部可訪問。 – Mitul

+0

@Mitul對不起,現在試試。我通過了worng變量。 –

+0

這沒關係我在嘗試之前糾正了,但同樣的事情。我認爲在Path中傳遞的參數有一些問題。 – Mitul

0

我想我也有類似的問題,這有一天...嘗試以下行...

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

[添加$( )圍繞你的$ b變量在字符串中,看看是否有幫助。]

+0

抱歉,不能使用相同的結果。 Get-childitem命令不起作用。 – Mitul

+0

好的,試試這個。在你的Invoke-Command行之前,試試這個: $ testLine =「-c:\ procmon \ procmonbuilds \ $ buildDefinition - 」; $ testLine 看看它是否會在最後的' - '之前顯示任何空格,一些你在變量中看不到的神器。 – Jonathan

+0

我也只是在測試環境中設置了這個參數,並使用了Christian的示例,它也適用於我使用-argumentlist參數將參數傳遞到scriptblock。 – Jonathan