2013-08-20 8 views
5

バックアップ操作の一部として、7zipコマンドを実行して、フォルダを単一の.7zファイルに圧縮します。 InVoke-WMIMethodを使用しているので問題はありません。Powershell - 完了したらリモートプロセスを確認する

例:私のスクリプトが続くよう

$zip = "cmd /c $irFolder\7za.exe a $somedirectory.7z $somedirectory" 
"InVoke-WmiMethod -class Win32_process -name Create -ArgumentList $zip -ComputerName $remotehost" 

私の問題がでてくる

、7za.exeプロセスが完了していません。私はその後、リモートシステムからアイテムをコピーしようとしていますが、不完全であるか失敗しています。

誰かが、7za.exeプロセスがまだ実行中であるかどうかを識別する方法を理解し、それが死ぬまで待ってから、スクリプトの残りの部分を続行する方法を指摘できますか?

私は...

get-wmiobject -class Win32_Process -ComputerName $remotehost | Where-Object $_.ProcessName -eq "7za.exe"} 

なく、私の問題のために使用可能な情報にこれをオンにする方法がわから経由してリモートシステムからプロセスを引っ張って把握することができます。

回答UPDATE:(@dugasによって微調整するTHX)

これは...それを必要とするもののためにいくつかのフィードバックでそれを行うだろう

do {(Write-Host "Waiting..."),(Start-Sleep -Seconds 5)} 
until ((Get-WMIobject -Class Win32_process -Filter "Name='7za.exe'" -ComputerName $target | where {$_.Name -eq "7za.exe"}).ProcessID -eq $null) 

答えて

3

Invoke-Commandコマンドレットを使用して、リモートコンピュータでWait-Processコマンドレットを呼び出すことができます。例:

Invoke-Commandを使用するとオプションではないと述べたので、別のオプションはポーリングです。 例:

$process = Invoke-WmiMethod -Class Win32_Process -Name create -ArgumentList notepad -ComputerName hgodasvccr01 
$processId = $process.ProcessId 

$runningCheck = { Get-WmiObject -Class Win32_Process -Filter "ProcessId='$processId'" -ComputerName hgodasvccr01 -ErrorAction SilentlyContinue | ? { ($_.ProcessName -eq 'notepad.exe') } } 

while ($null -ne (& $runningCheck)) 
{ 
Start-Sleep -m 250 
} 

Write-Host "Process: $processId is not longer running" 
+0

私はInvoke-Commandを見ましたが、この時点でwinrmはリモートシステム上の私にとってはオプションではありません。将来的にはそれが期待されます。私はその情報を含めなかったことを謝ります... – c3uba9wfaq

+0

答えを更新しました。 – dugas

+0

申し訳ありません私はあなたに功績を与えています。もう一度.I Get-Processはこのケースでは動作しませんが、Get-WMIObjectを使ってうまく動作しました。 ((Get-WMIobject -Class Win32_process -ComputerName $ target | where {$ _。Name -eq "7za.exe)}を実行すると、{{Write-Host" Waitng ... "}、{Start-Sleep -Seconds 5}} "})。ProcessID -eq $ null) – c3uba9wfaq

0
あなたはそれを行うことができるはず

do ... whileループはプロセスが終了するまでスリープします。

do { 
    "waiting" 
    start-sleep 10 
    } while (gwmi -class win32_process -ComputerName $remotehost | Where ProcessName -eq "7za.exe") 
+1

これは、開始しなかったプロセスを待っている可能性があることに注意してください。もう1つの問題は効率性で、返されるすべてのオブジェクトを反復する必要があるwhile条件をチェックすることができます。また、上記の構文は正しくなく、実行されません。 – dugas

関連する問題