如何使用Invoke-Command传递命名参数?
我有一个脚本,我可以通过Invoke-Command远程运行
Invoke-Command -ComputerName (Get-Content C:ScriptsServers.txt) `
-FilePath C:ScriptsArchiveEventLogsver5ArchiveEventLogs.ps1
只要我使用默认参数,它就可以正常工作。但是,该脚本有2个名为[switch]的参数(-Debug和-Clear)
如何通过Invoke-Command传递切换参数?我已经尝试了-ArgumentList但是我遇到了错误所以我必须要有语法错误或者其他东西。任何帮助是极大的赞赏。
没有找到相关结果
已邀请:
4 个回复
丧泉缝锋
基于与scriptblock命令一起使用,例如:
当你用
调用它时,它仍然传递参数,如愚蠢的splatted数组。我已经提交了一个功能请求,要求将其添加到命令中(请将其投票)。 所以,你有两个选择: 如果你有一个看起来像这样的脚本,可以在远程机器上访问的网络位置(注意
是隐含的,因为当我使用
属性时,脚本会隐式获取CmdletBinding,因此,所有常见参数):
没有挂断
的含义......如果你想调用它,你可以使用以下任何一种
语法:
在那个,我复制了我在scriptblock中关注的所有参数,所以我可以传递值。如果我可以对它们进行硬编码(这实际上是我做的),就没有必要这样做并使用
,我可以通过我需要的那些。在下面的第二个例子中,我将传递$ Clear,只是为了演示如何传递switch参数:
另一种选择 如果脚本在您的本地计算机上,并且您不想将参数更改为位置,或者您想要指定作为公共参数的参数(因此您无法控制它们),您将需要获取该脚本并将其嵌入您的scriptblock中:
后记: 如果您确实需要传入脚本名称的变量,那么您要做的将取决于变量是本地定义还是远程定义。通常,如果您有一个变量
或一个带有脚本名称的环境变量
,您可以使用调用运算符(&)执行它:
或
如果它是已经在远程计算机上定义的环境变量,那就是它的全部内容。如果它是局部变量,那么您必须将它传递给远程脚本块:
焙恍挝厂熄
动态编写脚本块:
通过论证是非常令人沮丧的,尝试各种方法,例如,
,
等,这只是按照要求正常工作,没有任何问题。 由于我控制了以这种方式创建
(或脚本文件)的字符串的内容和变量扩展,因此“invoke-command”咒语没有真正的问题。 (应该不那么难。:))
玩翁文醚碱
这是我从另一个脚本调用此脚本的方法:
我在很多场景中都使用了它,它的效果非常好。 您偶尔需要做的一件事是在参数值赋值块周围加上引号。当值中有空格时,情况总是如此。 例如此param块用于调用脚本,该脚本将各种模块复制到PowerShell
使用的包含空格字符的标准位置。
希望这可以帮助!
耐扫鹤胶鞭