尝试使用来自PowerShell.com PowerTip的此函数,它演示了Invoke-Expression
的用法。
function Call {
$command = $Args -join " "
$command += " 2>&1"
$result = Invoke-Expression($command)
$result |
%{$e=""}{ if( $_.WriteErrorStream ) {$e += $_ } else {$_} }{Write-Warning $e}
}
这会给出:
cd "${env:ProgramFiles(x86)}\Microsoft Visual Studio 10.0\Common7\IDE"
call .\devenv.exe /command "`"File.BatchNewTeamProject C:\stuff\Project51.xml`"
--- 编辑 ---
这里有许多需要说的事情。
首先,您可以通过“about”文件获得帮助,例如:
Get-help about-*
在您感兴趣的主题中,您可以找到:
Get-help about_Quoting_Rules
Get-Help about_Special_Characters
Get-Help about_Escape_Characters
Get-Help about_Parameters
第二点 CD,DIR,MD
可以使用,但它们只是采用不同参数的CmdLets的别名。
第三点 要获取环境变量,不再使用%systemroot%
,而是使用$env:systemroot
。
第四点 要从powershell启动可执行文件,只需键入exe文件的名称:
PS> notepad c:\temp\test.txt
命令行首先由PowerShell解释,因此现在如果您编写:
PS> "C:\Windows\System32\notepad.exe"
C:\Windows\System32\notepad.exe
它只是将其解释为字符串。因此,您可以使用&运算符并编写
PS> & "C:\Windows\System32\notepad.exe" c:\test.txt
它可以工作,但是:
PS> $a = "C:\Windows\System32\notepad.exe c:\test.txt"
PS> & $a
失败和
PS> $a = "C:\Windows\System32\notepad.exe c:\test.txt"
PS> Invoke-Expression $a
工作正常