Wykonywanie polecenia zapisanego w zmiennej z PowerShell

Mam polecenie, które zbudowałem i przechowałem w zmiennej w PowerShell. To polecenie działa, jeśli wykonam write-host i skopiuję i wkleję do standardowego okna cmd.exe.

Jak wykonać to polecenie z poziomu skryptu?

Próbowałem kilku kombinacji invoke-command lub invoke-expression bez powodzenia.

Tak zbudowałem zmienną:

$cmd1 = $arcprg + $arcdir + "\" + $site1 + "-" + $hst + "-" + $yesterday + ".zip " + $logpath1 + "u_ex" + $yesterday + ".log"

Tak wygląda zmienna wyświetlana na ekranie:

7z.exe a -tzip c:\arc_logs\site-host-at-web1-100827.zip c:\inetpub\logs\logfiles\w3svc1\u_ex100827.log
 116
Author: Peter Mortensen, 2010-08-29

2 answers

Oto kolejny sposób bez Invoke-Expression ale z dwiema zmiennymi (polecenie: string oraz parametry:array). Mi pasuje. Zakładać 7z.exe znajduje się w ścieżce systemowej.

$cmd = '7z.exe'
$prm = 'a', '-tzip', 'c:\temp\with space\test1.zip', 'C:\TEMP\with space\changelog'

& $cmd $prm

Jeśli komenda jest znana (7z.exe) i tylko parametry są zmienne wtedy to zrobi

$prm = 'a', '-tzip', 'c:\temp\with space\test1.zip', 'C:\TEMP\with space\changelog'

& 7z.exe $prm

BTW, Invoke-Expression z jednym parametrem też mi działa, np. to działa

$cmd = '& 7z.exe a -tzip "c:\temp\with space\test2.zip" "C:\TEMP\with space\changelog"'

Invoke-Expression $cmd

P. S. Zwykle wolę sposób z tablicą parametrów, ponieważ łatwiej jest komponować programowo niż budować wyrażenie dla Invoke-Expression.

 156
Author: Roman Kuzmin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-15 07:49:45

Spróbuj wywołać polecenie invoke-expression.

invoke-expression $cmd1

Oto przykład pracy na mojej maszynie:

$cmd = "& 'C:\Program Files\7-zip\7z.exe' a -tzip c:\temp\test.zip c:\temp\test.txt"
invoke-expression $cmd
 26
Author: kbrimington,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-29 01:04:24