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
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
.
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
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