Ответ 1
Попробуйте эту функцию, исходящую из 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%
it $env:systemroot
.
Четвертый, чтобы запустить исполняемый файл из powershell, вы можете просто ввести имя exe:
PS> notepad c:\temp\test.txt
Командная строка сначала интерпретируется powerShell, поэтому теперь, если вы пишете:
PS> "C:\Windows\System32\notepad.exe"
C:\Windows\System32\notepad.exe
Он просто интерпретирует его как строку. Таким образом, вы можете использовать оператор and и писать
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
Работа