Выполнение команды, хранящейся в переменной из PowerShell
У меня есть команда, которую я собрал и сохранил в переменной в PowerShell. Эта команда работает, если я делаю Write-Host и копирую и вставляю в стандарт cmd.exe
окно.
Как мне выполнить эту команду из моего скрипта?
Я попытался несколько комбинаций Invoke-Command или Invoke-Expression без удачи.
Вот как я построил переменную:
$cmd1 = $arcprg + $arcdir + "\" + $site1 + "-" + $hst + "-" + $yesterday + ".zip " + $logpath1 + "u_ex" + $yesterday + ".log"
Вот как выглядит переменная, если она выводится на экран:
7z.exe a -tzip c:\arc_logs\site-host-at-web1-100827.zip c:\inetpub\logs\logfiles\w3svc1\u_ex100827.log
2 ответа
Вот еще один способ без Invoke-Expression
но с двумя переменными (команда: строка и параметры: массив). Он отлично работает для меня. Предполагать7z.exe
находится в системном пути.
$cmd = '7z.exe'
$prm = 'a', '-tzip', 'c:\temp\with space\test1.zip', 'C:\TEMP\with space\changelog'
& $cmd $prm
Если команда известна (7z.exe) и только параметры являются переменными, это будет делать
$prm = 'a', '-tzip', 'c:\temp\with space\test1.zip', 'C:\TEMP\with space\changelog'
& 7z.exe $prm
КСТАТИ, Invoke-Expression
у меня тоже с одним параметром работает, например это работает
$cmd = '& 7z.exe a -tzip "c:\temp\with space\test2.zip" "C:\TEMP\with space\changelog"'
Invoke-Expression $cmd
PS Я обычно предпочитаю способ с массивом параметров, потому что это проще составить программно, чем создать выражение для Invoke-Expression
,
Попробуйте вызвать вашу команду с Invoke-Expression
:
Invoke-Expression $cmd1
Вот рабочий пример на моей машине:
$cmd = "& 'C:\Program Files\7-zip\7z.exe' a -tzip c:\temp\test.zip c:\temp\test.txt"
Invoke-Expression $cmd