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

Powershell参数在路径中未按预期工作,powershell,Powershell,在下面的powershell脚本中,我传递了三个字符串参数。$ComputerName参数行按预期工作。我可以远程访问我指定的机器 第1期 在$latestbuildfolder行中,我使用$builddefinition参数指定生成定义。它附加builddefinition的名称,但不列出该文件夹中的文件夹。如果我将$BuildDefinition参数替换为“TeamBuild”我们的构建定义名称,那么它就能够列出所有文件夹并获取最新的文件夹。有些人说我觉得加入不起作用。我也尝试过使用连接路径

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

第1期
在$latestbuildfolder行中,我使用$builddefinition参数指定生成定义。它附加builddefinition的名称,但不列出该文件夹中的文件夹。如果我将$BuildDefinition参数替换为“TeamBuild”我们的构建定义名称,那么它就能够列出所有文件夹并获取最新的文件夹。有些人说我觉得加入不起作用。我也尝试过使用连接路径,但仍然不起作用

第二期
在$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
我尝试了很多选择,但到目前为止仍然没有运气

尝试以下更改:

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

我想前几天我也遇到了类似的问题…试试下面这句话

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

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

对我有效的解决方案就像《盗梦空间》电影一样。结果是我必须在两个地方声明param。感谢我的同事朋友提供了这个解决方案

这是最后一个适合我的剧本。这是一个在生成计算机上运行的脚本,然后在远程计算机上执行新的pssession从最新的生成文件夹获取web包。这些参数通过用于调用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

同样的结果没有改变。它附加$a,但不列出Get Childitem,$b始终为空,即使在脚本中可以访问它。@Mitul抱歉,请立即尝试。我传递了worng变量。没关系,我在尝试之前纠正了它,但事情是一样的。我认为像这样在路径中传递的参数有一些问题。@Mitul我在本地模拟了您的invoke命令,而在为构建路径传递参数(变量)时没有问题。我不能在远程会话中进行测试,但我认为它可以工作。右第二行$b one在加入之前有效,但不列出下面的文件夹。如果我将$b替换为“TeamBuild”(硬编码),那么它将在下面列出我最新的构建文件夹。$Deploycmdlocation行中的$a为空。这就像procmonwebproject \\u publishedwebsites\。如果我写了主机$a,它会显示“Release”,所以在传递参数时不会出现问题。他们没有给我所需要的输出。同样,如果我硬编码“释放”它将工作。对不起,没有工作相同的结果。Get-childitem命令不起作用。请尝试此操作。在调用命令行之前,请尝试以下操作:$testLine=“-c:\procmon\procmonbuilds\$buildDefinition-”$testLine看看这是否显示了在最后的“-”之前的空格,因为在变量中可能有一些您看不到的工件。我也只是在测试环境中设置了它,并使用了Christian的示例,它还使用-argumentlist参数将参数传递到scriptblock中。当我运行$testLine时,它给了我以下输出-C:\procmon\procmonbuilds \-未输出任何$builddefinition参数。