2011-09-07 29 views
5

Chcę móc zdalnie wprowadzić do systemu i rozpakować lub rozpakować pliki, a następnie mieć sygnał procesu, gdy jest kompletny. Start-proces działa z parametrem -wait, aby synchronicznie uruchamiać 7z.exe z PowerShell. Kiedy próbuję połączyć to z invoke-command, aby zdalnie uruchomić to samo polecenie, nie uwzględnia ono parametru wait i uważam, że zabija proces, ponieważ szybko zwraca i nigdy nie tworzy pliku zip.Zdalne archiwizowanie plików przy użyciu startowego procesu PowerShell i polecenia invoke

[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 

początkowo próbowałem PSCX write-zip & poszerzyć-archiwum, ale ten ostatni nie jest kompatybilny z 64-bitową .NET 4.0 konfiguracji. Teraz próbuję wywołać 64-bitowy plik 7z.exe za pośrednictwem wiersza poleceń. Nie otrzymuję żadnych błędów. PowerShell zgłasza zadanie jako działające, a następnie kompletne i nie jest tworzony żaden plik zip.

Invoke-Command -ComputerName localhost -FilePath 'C:\Scripts\ZipIt.ps1' -ArgumentList 'd:\TestFolder','d:\promote\TestFile.7z' -AsJob 

Doceń każdą pomoc lub wskazówki.

Dzięki, Gregory

Odpowiedz

5

Od Start-Process zostaną wykorzystane synchronicznie tutaj, polecam unikanie go i po prostu korzystać z 7z.exe wykonywalny:

$sevenZip = "C:\Program Files\7-zip\7z.exe" 
&$sevenZip a $zipFileName $dirToZip 

Spowoduje to naturalnie zablokować skrypt aż 7zip wykonuje swoją pracę.

+0

Dziękuję Efran. To się udało! Wpadłem na problem z pamięcią, ale naprawiłem go, zwiększając domyślną wartość 150 MB. winrm set winrm/config/winrs '@' {MaxMemoryPerShellMB = '" 255' "'} –

+0

Nie ma za co, @Co! –

0

Korzystanie z programu 7z.exe bezpośrednio rozwiązałoby problem. Jeśli okaże się, trzeba rozpakuj plik chroniony hasłem można użyć:

$sevenZip = "C:\Program Files\7-zip\7z.exe" 
&$sevenZip e -y "-o$dirToUnZip" -psomepassword $dirToUnZip\$zipFileName