Invoke-Expression,也别名为iex。以下将适用于您的示例#2和#3:
iex $command
一些字符串不会按原样运行,例如您的示例#1,因为exe在引号中。这将按原样工作,因为字符串的内容是如何直接从Powershell命令提示符运行:
$command = 'C:\somepath\someexe.exe somearg'
iex $command
但是,如果exe是引号,你需要&以使其运行,如在此示例中,从命令行运行:
>> &"C:\Program Files\Some Product\SomeExe.exe" "C:\some other path\file.ext"
然后在脚本中:
$command = '"C:\Program Files\Some Product\SomeExe.exe" "C:\some other path\file.ext"'
iex "& $command"
可能的,你可以处理几乎所有的情况,通过检测命令字符串的第一个字符是否是“,就像在这个朴素的实现:
function myeval($command) {
if ($command[0] -eq '"') { iex "& $command" }
else { iex $command }
}
但你可能会发现一些其他情况下,必须以不同的方式调用。在这种情况下,您将需要使用try {} catch {},也许用于特定的异常类型/消息,或检查命令字符串。
如果你总是收到绝对路径,而不是相对路径,你不应该有许多特殊情况,如果有的话,在上面的2之外。