我有一个简单的问题。我想为变量分配一个命令并使用额外的参数执行它,例如:
C:\test.exe /q /v
但是当我这样做时:
$path=C:\test.exe
$path /q /v
它不起作用..有什么想法吗?
答案 0 :(得分:3)
最常规的方法是在包含命令“name”的变量上使用call运算符,例如:
& $path /q /v
当命令的路径(即本机exe)包含空格时,实际上需要这样做。
答案 1 :(得分:2)
命令为字符串:
使用Invoke-Expression cmdlet,您可以执行任意字符串作为一段代码。它接受字符串,编译并执行它。
所以你这样做:
$path='C:\test.exe';
Invoke-Expression "$path /q /v";
作为旁注:当您$path=C:\test.exe
没有引号时,您实际上是将test.exe
的STDOUT分配给变量$path
。您必须向PowerShell明确表示它实际上是您希望稍后执行的字符串。
命令作为脚本对象:
如果您关注性能,还可以尝试将命令转换为已编译的脚本块,并使用&
调用运算符执行它。
$path='C:\test.exe';
$cmd = [scriptblock]::Create("$path /q /v");
& $cmd;