Powershell:使用数组中项目的参数调用exe?

时间:2010-08-12 15:59:03

标签: arrays powershell parameters exe

我有一组我想要运行的命令,并对结果进行一些返回代码检查,所以我认为很容易将它们放入一个数组中执行。

我们以此为例:

C:\windows\system32\inetsrv\AppCmd.exe set config "Default Web Site/" /section system.webServer/webdav/authoring /enabled:true /commit:apphost

现在,当我把它放入没有任何引号的数组中时,会立即将其解释为命令,执行命令并将结果写入数组:

$commands = @()
$commands += C:\windows\system32\inetsrv\AppCmd.exe set config "Default Web Site/" /section system.webServer/webdav/authoring /enabled:true /commit:apphost

当我使用引号将其作为字符串放入数组时,尝试执行它不起作用。

PS> $commands = @()
PS> $commands += "C:\windows\system32\inetsrv\AppCmd.exe set config ""Default Web Site/"" /sectio n:system.webServer/webdav/authoring /enabled:true /commit:apphost"
PS> $commands[0]
C:\windows\system32\inetsrv\AppCmd.exe set config "Default Web Site/" /section:system.webServer/webdav/authoring /enabled:true /commit:apphost
PS> & $commands[0]
The term 'C:\windows\system32\inetsrv\AppCmd.exe set config "Default Web Site/" /section:system.webServer/webdav/authoring /enabled:true /commit:apphost' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
        At line:1 char:2
        + & <<<<  $commands[0]
            + CategoryInfo          : ObjectNotFound: (C:\windows\syst.../commit:apphost:String) [], CommandNotFoundException
            + FullyQualifiedErrorId : CommandNotFoundException

那么,我如何正确地将此命令放入数组,队列或其他最适合的命令中,以便在时机成熟时执行它?

3 个答案:

答案 0 :(得分:3)

当您使用调用操作符&时,后面的字符串必须只命名要执行的命令 - 而不是任何参数。使用您配置的内容,您可以使用Invoke-Expression,例如:

iex $command[0]

关于Invoke-Expression的一个警告,如果有任何输入来自用户,请小心使用此命令,因为它可用于注入不需要的命令,例如:

Read-Host "Enter commit value"
Enter commit value: apphost; remove-item c:\ -r -force -ea 0 -confirm:0 #

答案 1 :(得分:0)

好吧,我参加派对已经晚了一年,但你也可以这样做:

new-alias -name Monkey -value“$ env:windir \ system32 \ inetsrv \ APPCMD.exe”

答案 2 :(得分:0)

甚至更晚:我认为用户this answer this other answerRoman Kuzmin通过将可执行文件名存储在变量及其所有参数中来紧密解决此问题。