1

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

问题 1
在 $latestbuildfolder 行上,我使用 $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

对我有用的解决方案就像是盗梦空间电影。事实证明,我必须在两个地方声明 param。感谢我的同事朋友提供此解决方案。

这是适合我的最终脚本。这是一个在构建机器上运行的脚本,然后在远程计算机上执行 new-pssession 从最新的构建放置文件夹中获取 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
于 2012-06-21T15:45:20.910 回答
0

我想前几天我遇到了类似的问题...尝试以下行...

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

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

于 2012-06-20T15:09:39.720 回答