gpt4 book ai didi

PowerShell 在 Invoke-Command 上生成参数列表

转载 作者:行者123 更新时间:2023-12-04 18:40:02 25 4
gpt4 key购买 nike

如何将散列表中收集的参数用于 ArgumentListInvoke-Command ?

$CopyParams = @{
Source = 'E:\DEPARTMENTS\CBR\SHARE\Target'
Destination = 'E:\DEPARTMENTS\CBR\SHARE\Target 2'
Structure = 'yyyy-MM-dd'
}
Invoke-Command -Credential $Cred -ComputerName 'SERVER' -ScriptBlock ${Function:Copy-FilesHC} -ArgumentList @CopyParams

无论我尝试什么,它总是提示“来源”:
Cannot validate argument on parameter 'Source'. The "Test-Path $_" validation script for the argument with
value "System.Collections.Hashtable" did not return true. Determine why the validation script failed

blog谈到了类似的问题,但我无法让它发挥作用。

简单的 Copy-Item 也是如此内 Invoke-Command , 例子:
Invoke-Command -Credential $Cred -ComputerName 'SERVER' -ScriptBlock {Copy-Item} -ArgumentList @CopyParams

Invoke-Command : Missing an argument for parameter 'ArgumentList'. Specify a parameter of type 'System.Obj
ect[]' and try again.
At line:11 char:89
+ ... ck {Copy-Item} -ArgumentList @CopyParams

感谢您的帮助。

最佳答案

单行,将远程脚本转换为接受来自散列的命名参数。

给定一个您希望像这样调用的脚本块:

$Options = @{
Parameter1 = "foo"
Parameter2 = "bar"
}

Invoke-Command -ComputerName REMOTESERVER -ArgumentList $Options -ScriptBlock {
param(
$Parameter1,
$Parameter2
)
#Script goes here, this is just a sample
"ComputerName: $ENV:COMPUTERNAME"
"Parameter1: $Parameter1"
"Parameter2: $Parameter2"
}

你可以像这样转换它
Invoke-Command -Computername REMOTESERVER -ArgumentList $Options -ScriptBlock {param($Options)&{
param(
$Parameter1,
$Parameter2
)
#Script goes here, this is just a sample
"ComputerName: $ENV:COMPUTERNAME"
"Parameter1: $Parameter1"
"Parameter2: $Parameter2"
} @Options}

这是怎么回事?本质上,我们已经像这样包装了原始脚本块:
{param($Options)& <# Original script block (including {} braces)#> @options }

这使原始脚本块成为匿名函数,并创建具有参数 $Options 的外部脚本块。 ,它只调用内部脚本块,传递 @options散列散列。

关于PowerShell 在 Invoke-Command 上生成参数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28234509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com