Invoke-Expression con exe in Programmi
-
20-09-2019 - |
Domanda
Sto cercando di eseguire un comando PowerShell per chiamare 7-Zip per comprimere una cartella utilizzando il seguente comando:
$command = $SevenZip + " a " + $targetDirForZip + $GetDateName + "_" + $dir.Name + ".7z " + $dir.FullName
Invoke-Expression $command
Le variabili vengono nutriti in comando $ sono già impostati e $ SevenZip è "C: \ Program Files \ 7-Zip \ 7z.exe"
Questo non funziona e sto cercando di capire il modo migliore per chiamare 7-Zip da PowerShell. Idee?
Soluzione
Ho avuto lo stesso problema prima. Questo è un codice (quasi) direttamente da uno script di backup che uso attualmente:
[string]$pathToZipExe = "C:\Program Files\7-zip\7z.exe";
[Array]$arguments = "a", "-tgzip", $outputFilePath, $inputFilePath;
& $pathToZipExe $arguments;
ho ottenuto l'abitudine di utilizzare un array discussione con l'operatore di chiamata, Sembra essere più robusta rispetto ad altri metodi.
Altri suggerimenti
Non è necessario utilizzare Invoke-Expression basta usare il &
invocazione (call) all'operatore di richiamare una stringa che nomina un comando da eseguire. Si noti che si desidera mantenere i parametri separano in questo caso vale a dire la stringa SevenZip dovrebbe essere solo il percorso per il file EXE per esempio:.
&$SevenZip a "$targetDirForZip$GetDateName_$($dir.Name).7z" $dir.FullName
In realtà non è necessario Invoke-Expression. Si può semplicemente richiamare il comando utilizzando la e commerciale come ad esempio:
&$Command
Ma c'è anche il cmdlet Start-Process che potrebbe essere più adatto per quello che stai cercando di fare. Eseguendo il comando come una stringa sopra, siete inclini a errori se il $ SevenZip contiene spazi e non è citato. Invece vorrei utilizzare:
Start-Process $SevenZip "...rest..."
Mi sono imbattuto in questo problema così, qui era la mia soluzione.
invoke-expression "& 'C:\Program Files\CIESetupClient\Staging\ffd4bc34-52c1-43e7-92d4-93d2f59d7f52\vstor_redist.exe' /q /norestart /log c:\Logs\VSTOR_Redist.log "
ho potuto lasciare i miei paramaters fuori dalle virgolette singole indicando il mio exe, credo che questo è probabilmente il modo più semplice per chiamare un exe con i parametri utilizzando richiamare-espressione.
Fammi indovinare, che sta cercando di richiamare "C: \ Programmi"?
Non sono sicuro della sintassi corretta per PS, ma avrete bisogno di fare qualcosa per quello spazio.
Lavora per me:
$command = "& ""$SevenZip""" + " a " + $targetDirForZip + $GetDateName + "_" + $dir.Name + ".7z " + $dir.FullName
Write-Host "Running: $command"
Invoke-Expression $command
È inoltre possibile utilizzare i comandi di MS-DOS all'interno di uno script di Windows PowerShell.
Ho sempre amato comando START di CMD.exe, che consente di avviare un comando in parallelo.
Quindi, per iniziare il vostro 7-zip, inserire il seguente comando nello script PowerShell:
cmd.exe /c start <your 7-zip command like in MS-DOS>