ken*_*orb 5 powershell invoke-command
我想传递给脚本的所有参数并执行。
例如,给定execute.ps1脚本:
Invoke-Expression $($args[0])
Run Code Online (Sandbox Code Playgroud)
我可以跑:
.\execute.ps1 hostname
myhostname
Run Code Online (Sandbox Code Playgroud)
与此脚本的两个参数相同:
Invoke-Expression "$($args[0]) $($args[1])"
Run Code Online (Sandbox Code Playgroud)
并通过以下方式执行它:
.\execute.ps1 echo foo
foo
Run Code Online (Sandbox Code Playgroud)
如何使脚本通用以支持未知数量的参数?
例如:
.\execute.ps1 echo foo bar buzz ...
Run Code Online (Sandbox Code Playgroud)
我尝试了以下失败的组合:
Invoke-Expression $args
Run Code Online (Sandbox Code Playgroud)
调用表达式:无法将“System.Object[]”转换为参数“Command”所需的类型“System.String”。不支持指定的方法。
Invoke-Expression [system.String]::Join(" ", $args)
Run Code Online (Sandbox Code Playgroud)
调用表达式:找不到接受参数“System.Object[]”的位置参数。
Invoke-Expression $args.split(" ")
Run Code Online (Sandbox Code Playgroud)
调用表达式:无法将“System.Object[]”转换为参数“Command”所需的类型“System.String”。不支持指定的方法。
Invoke-Expression [String] $args
Run Code Online (Sandbox Code Playgroud)
调用表达式:找不到接受参数“System.Object[]”的位置参数。
我推荐Bill_Stewart 的答案,以避免命令本身(第一个参数)有空格的问题。但即使有了这个答案,您也必须小心对待个别引用参数,但需要注意的是,这本身就是一件复杂的事情。
你可以这样做:
Invoke-Expression "$args"
Run Code Online (Sandbox Code Playgroud)
默认情况下,以这种方式转换为字符串将用空格连接它(从技术上讲,用默认输出字段分隔符连接它,这是 的值$OFS,默认为空格)。
您也可以按照 Wayne 的回答进行手动连接。
| 归档时间: |
|
| 查看次数: |
3995 次 |
| 最近记录: |