作爲備份操作的一部分,我正在運行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"}
不知道如何將其轉換成我的問題可用的信息。
答案更新:(THX由@dugas輕移)
這將與那些需要它的一些反饋做...
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)
我看過Invoke-Command,但是在這一點上,利用winrm不是我在遠程系統上的一種選擇。希望在未來它會。我很抱歉,我沒有包含該信息... – c3uba9wfaq
已更新的答案。 – dugas
好吧我給你信用..你讓我走在正確的軌道上。再次..我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