在使用FilePath的同时向参数调用参数
我有一个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的部分失败(不返回)。
.\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
我已经尝试过与scriptblocks等的变化,但我失去了一些东西。
回答:
不幸的是,ArgumentList
参数需要一个(对象)数组,而不是散列表(或散列表,如你所说)。所以散列表被分配给第一个参数,而不是在所有参数上被划分。如果这能够工作,那将会很好。考虑提交http://connect.microsoft.com的建议。
回答:
我在脚本中添加了一个额外的参数(在位置0),如果该参数是一个HashTable,使用哈希表中找到的那些更新局部变量。它现在有效。谢谢大家。
param($paramMap, [string]$paramA, [string]$paramB, [bool]$remote = $false)
...
Function configureVariables() {
if($paramMap.GetType().FullName -eq "System.Collections.HashTable")
{
$variables = get-variable -Scope "Script"
foreach($param in $paramMap.GetEnumerator())
{
foreach($variable in $variables)
{
if($param.key -eq $variable.Name)
{
$variable.Value = $param.value
}
}
}
}
}
以上是 在使用FilePath的同时向参数调用参数 的全部内容, 来源链接: utcz.com/qa/261035.html