Powershell参数在路径中未按预期工作

时间:2012-06-20 13:54:12

标签: powershell

在下面的powershell脚本中,我传递了三个字符串参数。 $ ComputerName参数行按预期工作。我能够远程进入我指定的机器。

第1期
在$ latestbuild文件夹中,我使用$ builddefinition参数来指定构建定义。它附加了builddefinition的名称,但没有列出该文件夹中的文件夹。如果我用“TeamBuild”替换$ BuildDefinition参数我们的构建定义名称,那么它就能列出所有文件夹并获取最新文件夹。有些我认为加入不起作用。我也尝试过使用Join-Path但仍然没有工作。

第2期
在$ deploycmdlocation行上,当我尝试在该字符串中指定$ Configuration时,它不起作用。它在该路径之间输出一个空白。我使用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

到目前为止,我尝试了很多选项但仍然没有运气。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我想我前几天有类似的问题......尝试下面这行...

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

[在字符串中的$ b变量周围添加一个$(),看看是否有帮助。]

答案 2 :(得分:0)

对我有用的解决方案感觉就像是Inception电影。事实证明,我必须在两个地方宣布参数。感谢我的同事朋友提供此解决方案。

这是适合我的最终脚本。这是一个在构建计算机上运行的脚本,然后在远程计算机上执行new-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