PowerShell start-process と invoke-command を使用してファイルをリモートで圧縮する

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

質問

システムにリモート接続して、そこでファイルを圧縮または解凍し、プロセスが完了したときに通知できるようにしたいと考えています。Start-process は -wait パラメーターと連携して、PowerShell から 7z.exe を同期的に実行します。これを 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