Выполнение команды, хранящейся в переменной из 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

141
задан Peter Mortensen 18 January 2019 в 05:59
поделиться

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

P.S. Я обычно предпочитаю способ с массивом параметров, потому что его проще составлять программно, чем строить выражение для Invoke-Expression.

187
ответ дан 23 November 2019 в 23:11
поделиться

Попробуйте вызвать вашу команду с помощью 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

iex является псевдонимом для Invoke-Expression, чтобы вы могли сделать:

iex $cmd1

Для полного списка: Посетите https://ss64.com/ps/, чтобы узнать больше о Powershell.

Удачи...

36
ответ дан 23 November 2019 в 23:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: