5

システムにリモートでアクセスし、そこでファイルを圧縮または解凍して、完了時にプロセス信号を受信できるようにしたい。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ビットの.NET4.0構成と互換性がありません。そのため、コマンドラインから64ビットの7z.exeを呼び出そうとしています。エラーは発生していません。PowerShellは、ジョブを実行状態として報告してから完了し、zipファイルは生成されません。

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

ヘルプやポインタに感謝します。

ありがとう、グレゴリー

4

2 に答える 2

5

ここでは Start-Process が同期的に使用されるため、これを避けて7z.exe実行可能ファイルのみを使用することをお勧めします。

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

そうすることで、7zip がジョブを完了するまでスクリプトが自然にブロックされます。

于 2011-09-07T05:26:26.513 に答える
0

7z.exe を直接使用するとうまくいきます。パスワードで保護されたファイルを解凍する必要がある場合は、次を使用できます。

$sevenZip = "C:\Program Files\7-zip\7z.exe"
&$sevenZip e -y  "-o$dirToUnZip" -psomepassword $dirToUnZip\$zipFileName 
于 2016-03-29T17:14:57.660 に答える