• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

在使用FilePath的同时向参数调用参数

powershell 来源:Ben 6次浏览

我有一个PowerShell(v2)脚本,我希望能够调用它自己,但在远程计算机上运行第二次调用。我需要能够传递几个(〜10)命名参数到第二个调用。在使用FilePath的同时向参数调用参数

过去,在使用作业时,我使用“splatting”来创建值的散列表并将它们传递给作业。我尝试过一些与Invoke-Command类似的东西,但它不像预期的那样工作。我创建了一个简单的脚本来说明我的观点,保存为test.ps1。如果不是远程机器,则打印变量并调用远程调用,远程调用仅打印收到的内容。

param([string]$paramA, [string]$paramB, [bool]$remote = $false) 

if(!$remote) 
{ 
    Write-Host "LOCAL: paramA is $paramA" 
    Write-Host "LOCAL: paramB is $paramB" 
    Write-Host "LOCAL: remote is $remote" 
} 
else 
{ 
    Write-Host "REMOTE: paramA is $paramA" 
    Write-Host "REMOTE: paramB is $paramB" 
    Write-Host "REMOTE: remote is $remote" 
} 

if(!$remote) 
{ 
    $sess = New-PSSession -computername MACHINENAME -credential CREDENTIALS 
    #w/o hashmap 
    $responseObject = Invoke-Command -session $sess -FilePath .\test.ps1 -ArgumentList($paramA,$paramB,$true) -AsJob 

    #with hashmap (this doesn't work) 
    #$arguments = @{paramA = $paramA; paramB = $paramB; remote = $true} 
    #$responseObject = Invoke-Command -session $sess -FilePath .\test.ps1 -ArgumentList $arguments -AsJob 

    while($responseObject.State -ne "Completed") 
    { 
    } 

    $result = Receive-Job -Id $responseObject.Id 
    Write-Host $result 

    Remove-PSSession -Session $sess 
} 

运行脚本我会看到这一点,但在取消对HashMap的部分失败(不返回)。

<code class="prettyprint-override">.\test.ps1 -paramA "First" -paramB "Second" 
LOCAL: paramA is First 
LOCAL: paramB is Second 
LOCAL: remote is False 
REMOTE: paramA is First 
REMOTE: paramB is Second 
REMOTE: remote is True 
</code>

我已经尝试过与scriptblocks等的变化,但我失去了一些东西。

===========解决方案如下:

不幸的是,ArgumentList参数需要一个(对象)数组,而不是散列表(或散列表,如你所说)。所以散列表被分配给第一个参数,而不是在所有参数上被划分。如果这能够工作,那将会很好。考虑提交http://connect.microsoft.com的建议。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)