2013-08-20 7 views
5

devam yapılırsa, Uzaktan Süreci kontrol edin. InVoke-WMIMethod'u kullanırken sorun yok.PowerShell - yedek operasyonun parçası olarak, tek bir .7z dosya içine bir klasör sıkıştırmak için 7zip komutunu çalıştırıyorum

Örnek: benim senaryom devam ettikçe

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

Benim sorunum geliyor

, 7za.exe işlem tamamlamamıştır. Daha sonra, öğeyi uzak sistemden kopyalamaya çalışıyorum ve eksik ya da başarısız. o ölene kadar

birisi anlamaya 7za.exe süreç hala çalışıyorsa nasıl tespit etmek, beklemek yönde işaret edebilir, daha sonra Senaryomun kalanı ile devam? Ben üzerinden uzaktan sistemden süreci çekerek kavrayabilir

...

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

sorunumun kullanışlı bilgi dönüştürmeye nasıl emin değilim.

Cevap GÜNCELLEME: (@dugas tarafından dürtmek için thx)

Bu ... Gerekli olanlara bazı geribildirim ile yapacak

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) 

cevap

3

Sen ınvoke Komuta komut dizimi Uzak bilgisayarda bekleyin-Süreç cmdlet'ini çağırabilirsiniz. Örneğin: Invoke-Command komutunu kullanmaktan bahsetmediğinizden beri, başka bir seçenek yoklamadır. Örnek:

$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

Ben ancak winrm kullanan bu noktada ınvoke Komutanlığı'nda benziyordu uzak sistemlerde benim için bir seçenek değildir. Gelecekte umuyoruz. Özür dilerim bu bilgiyi eklemedim ... – c3uba9wfaq

+0

Güncelleme yanıtı. Sana veriyorum – dugas

+0

Tamam credit..you doğru yolda beni. Tekrar ... Bu durumda Get-Süreci çalışmıyor, ancak Get-WMIObject'i güzelce kullanarak buldum. do {(-Sunucuyu yazın "waitng ..."), (Start-Uyku -Seconds 5)} ((Get-WMIobject -Class Win32_Process -ComputerName $ hedefine kadar |. {$ _ Adı -eq "7za.exe "}) işlemkimliği -eq $ null) – c3uba9wfaq

0
Bunu yapmak mümkün olmalıdır

Bir ... ile sadece süreç bitene kadar uyur döngü.

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

Bunu yapmayla ilgili bir sorun, başlamadığınız bir işlemi bekliyor olabilirsiniz. Başka bir sorun, geri getirilen tüm nesneleri yinelemek zorunda olduğunuz süre koşulunu kontrol etmek için verimlilik olabilir. Ayrıca, yukarıdaki sözdizimi yanlıştır ve yürütülmez. – dugas

İlgili konular