Удаленное архивирование файлов с помощью PowerShell start-process и invoke-command

StackOverflow https://stackoverflow.com/questions/7329118

Вопрос

Я хочу иметь возможность удаленно входить в систему, архивировать или распаковывать там файлы и получать сигнал процесса, когда он будет завершен.Запускающий процесс работает с параметром -wait для запуска 7z.exe синхронно из PowerShell.Когда я пытаюсь объединить это с invoke-command для удаленного запуска той же команды, она не учитывает параметр wait, и я считаю, что это останавливает процесс, поскольку он быстро возвращается и никогда не создает 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

Первоначально я попробовал PSCX write-zip & expand-archive, но последний несовместим с 64-разрядной конфигурацией .NET 4.0.Итак, теперь я пытаюсь вызвать 64-разрядную версию 7z.exe через командную строку.Я не получаю никаких ошибок.PowerShell сообщает о задании как о состоянии выполнения, а затем завершенном, и никакой zip-файл не создается.

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

Буду признателен за любую помощь или указания.

Спасибо, Грегори

Это было полезно?

Решение

Поскольку Start-Process здесь будет использоваться синхронно, я бы рекомендовал избегать этого и просто использовать 7z.exe исполняемый файл:

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

Это, естественно, заблокирует ваш скрипт до тех пор, пока 7zip не завершит свою работу.

Другие советы

Использование 7z.exe напрямую сделало бы свое дело.Если вы обнаружите, что вам нужно распаковать молнию защищенный паролем файл, который вы могли бы использовать:

$sevenZip = "C:\Program Files\7-zip\7z.exe"
&$sevenZip e -y  "-o$dirToUnZip" -psomepassword $dirToUnZip\$zipFileName 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top