Remotamente comprimir archivos con PowerShell iniciar el proceso y Invoke-Command
-
27-10-2019 - |
Pregunta
Quiero ser capaz de remoto en un sistema y comprimir o descomprimir archivos allí y tener la señal de proceso cuando se ha completado. las obras de puesta en proceso con el parámetro -wait se ejecuten de forma sincrónica 7z.exe de PowerShell. Cuando trato de combinar eso con invoke-comando para ejecutar el mismo comando a distancia, que no respeta el parámetro de espera y yo creo que está matando el proceso ya que devuelve rápidamente y nunca produce un archivo zip.
[string]$sevenZip = "C:\Program Files\7-zip\7z.exe"
[Array]$arguments = "a", $zipFilename, $dirToZip;
"Starting $sevenZip with $arguments"
Start-Process $sevenZip "$arguments" -Wait
#blocks and waits for zip file to complete
He intentado originalmente la escritura PSCX-zip y Expand-archivo, pero este último no es compatible con la configuración de .NET 4.0 de 64 bits. Así que ahora estoy tratando de llamar 7z.exe de 64 bits a través de la línea de comandos. No recibo ningún error. PowerShell reporta el trabajo como un estado de ejecución y luego completa, y ningún archivo zip se produce.
Invoke-Command -ComputerName localhost -FilePath 'C:\Scripts\ZipIt.ps1' -ArgumentList 'd:\TestFolder','d:\promote\TestFile.7z' -AsJob
agradecería cualquier ayuda o punteros.
Gracias, Gregory
Solución
Desde que se utilizará Start-Proceso de forma sincrónica aquí, yo recomendaría evitarlo y sólo tiene que utilizar el ejecutable 7z.exe
:
$sevenZip = "C:\Program Files\7-zip\7z.exe"
&$sevenZip a $zipFileName $dirToZip
Si lo hace, naturalmente, bloquear su guión hasta 7zip completa su trabajo.
Otros consejos
El uso de 7z.exe directamente haría el truco. Si usted encuentra que necesita a descomprimir un archivo protegido con contraseña puede usar:
$sevenZip = "C:\Program Files\7-zip\7z.exe"
&$sevenZip e -y "-o$dirToUnZip" -psomepassword $dirToUnZip\$zipFileName