我想通过事件注册命令的命令行选项将脚本块发送到事件注册,如下所示:
$Block = {
Param($option)
Write-Host "The option was $option"
if ($option==ABC) {
Write-Host "ABC was specified"
}
}
但是当我通过附加进行测试
Invoke-Command -ScriptBlock $Block -option ABC
我得到了错误
Invoke-Command:找不到与参数名称“ option”匹配的参数。
答案 0 :(得分:1)
如有疑问,请阅读documentation:
-ArgumentList
在命令中提供局部变量的值。在远程计算机上运行命令之前,命令中的变量将被这些值替换。在以逗号分隔的列表中输入值。值按列出的顺序与变量关联。 ArgumentList的别名为“ Args”。
ArgumentList中的值可以是实际值,例如“ 1024”,也可以是对局部变量的引用,例如“ $ max”。
要在命令中使用局部变量,请使用以下命令格式:
{param($<name1>[, $<name2>]...) <command-with-local-variables>} -ArgumentList <value> -or- <local-variable>
“ param”关键字列出了命令中使用的局部变量。 ArgumentList参数按列出的顺序提供变量的值。
-ArgumentList
数组中的第一个元素成为脚本块中第一个命名参数的值,第二个数组元素成为第二个命名参数的值,依此类推。
基本上,您的声明应如下所示:
Invoke-Command -ScriptBlock $Block -ArgumentList 'ABC'
此外,脚本块中比较操作的语法错误。 PowerShell中的相等比较运算符为-eq
,而不是==
。
答案 1 :(得分:1)
请记住,您可以随时查看文档:{{3}}
$Block = {Param($option)
Write-Host "The option was $option"
if ($option -eq "ABC") // -eq instead of ==, string in quotations
{Write-Host "ABC was specified"}
}
Invoke-Command -ScriptBlock $Block -ArgumentList "ABC"
如果有更多参数,则可以按顺序列出它们。使用脚本块并不是您经常要做的事情。最好创建一个函数(https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/invoke-command?view=powershell-6)
答案 2 :(得分:1)
您也可以在脚本块上使用call运算符,只需在空格或-option之后提供参数即可。
& $block abc
The option was abc
ABC was specified
然后您可以稍后将脚本块分配给功能。这就是函数 的意思。
$function:myfunc = $block