我试图将哈希表传递给像这样的脚本块,其中$arg3
是我的哈希表。然而,它失败了。我该如何以正确的方式做到这一点?
它似乎没有将任何内容传递给脚本块。
$commandParameters.ComputerName = $ComputerName
$commandParameters.ScriptBlock = {
param(
[Parameter()]
[switch]$arg1 = $false,
[Parameter()]
[array]$arg2,
[Parameter()]
[hashtable]$arg3
)
enter code here
Doing something here
}
Invoke-Command @commandParameters -ArgumentList $arg1, @($arg2), $arg3
=============================================== ==================
我自己找到了答案,这对我有用。这是我构建关联数组然后将其传递给脚本块的方法。
我不知道为什么,但我使用点符号($ hash.a.b)来引用函数中的哈希表并且它可以工作,但它不适用于脚本块。看起来我需要在脚本块中使用[](例如$ hash [a] [b])。
$compADGroups = @{}
foreach ( $adGroup in $adGroups ) {
if ( $compADGroups.$computerNameGroup -eq $null ) {
$compADGroups[$computerName] = @{}
$compADGroups[$computerName]["Group"] = @{}
$compADGroups[$computerName]["Group"] = $hashString
}
}
$session = New-PSSession -ComputerName 'Computer1'
Invoke-Command -Session $session -ArgumentList $compADGroups -ScriptBlock { param($compADGroups) $compADGroups[$env:computername]["Group"]}
Get-PSSession | Remove-PSSession
答案 0 :(得分:0)
确保您正确使用Invoke-Command
。
$ScriptBlock = {
param(
[Parameter(Mandatory=$True, Position=1)]
[hashtable]$myHashTable
)
# Code here
}
Invoke-Command -ScriptBlock $ScriptBlock -ArgumentList ([hashtable]$hashtable)
如果为脚本块指定了某些参数,请确保您还描述了位置值,并且通常是否是必需的。如果您尝试将哈希表作为隐式定义的参数数组中的第二个参数传递,请编写脚本块,使其在该特定位置获取哈希表。
例如,
$ScriptBlock= {
param(
[Parameter(Position=2)] # Take note of the position you set here
[hashtable]$myHashTable,
[Parameter(Position=1)]
[string]$myString,
[Parameter(Position=3)]
[int]$myInteger
)
# Do stuff
}
Invoke-Command -ScriptBlock $ScriptBlock -ArgumentList ($myString, $myHashTable, $myInteger);
# ^ variable is in second position