Powershell - Vérifier sur le Processus à Distance, si le fait de continuer
Dans le cadre d'une opération de sauvegarde, je suis en cours d'exécution le 7zip commande pour compresser un dossier en une seule .Fichier 7z. Pas de problèmes là-bas comme je suis à l'aide de la InVoke-WMIMethod
.
Exemple:
$zip = "cmd /c $irFolderza.exe a $somedirectory.7z $somedirectory"
"InVoke-WmiMethod -class Win32_process -name Create -ArgumentList $zip -ComputerName $remotehost"
Mon problème vient de mon script continue, l'7za.exe le processus n'est pas terminé. Je suis ensuite tenter de copier l'élément hors du système à distance et il est incomplet ou échoue.
Quelqu'un peut-il m'indiquer la direction à comprendre comment identifier si l'7za.exe le processus est toujours en cours, attendez jusqu'à ce qu'il est mort, puis continuez avec le reste de mon script?
Je peux saisir tirant les processus du système à distance via...
get-wmiobject -class Win32_Process -ComputerName $remotehost | Where-Object $_.ProcessName -eq "7za.exe"}
Pas sûr de la façon de les transformer en utilisable pour info mon problème.
Réponse de mise à JOUR: (thx de coup de pouce par @dugas)
Cela fera avec quelques commentaires pour ceux qui en ont besoin...
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)
OriginalL'auteur c3uba9wfaq | 2013-08-20
Vous devez vous connecter pour publier un commentaire.
Vous pouvez appeler le d'Attente des Processus applet de commande sur l'ordinateur à distance avec la Commande Invoke-command applet de commande. Exemple:
Puisque vous avez mentionné à l'aide de Commande Invoke-command n'est pas une option, une autre option est d'interrogation.
Exemple:
Mise à jour de réponse.
Bien, je vais vous en donner crédit..tu m'a mis sur la bonne voie. Encore une fois..je Get-Process ne fonctionne pas dans ce cas, mais je l'ai trouvé à l'aide de Get-WMIObject travaillent bien. do {(Write-Host "Waitng..."),(Démarrer-Sommeil -5 Secondes)} tant que ((Get-WMIobject de la Classe Win32_process -ComputerName $cible | where {$_.Nom -eq "7za.exe"}).ProcessID -eq $null)
Désolé, my bad, j'ai oublié que les Processus a l'aide de quelque chose que vous ne pouvez pas - j'ai ajusté ma réponse à utiliser Get-WmiObject. Notez le paramètre de filtre sur la cmdlet Get-WmiObject, sans cela, vous retournez tous les résultats. J'ai aussi déplacé la logique qui vérifie si le processus est en cours d'exécution dans un scriptblock de sorte qu'il serait plus facile à lire.
Cool..ajouté le Filtre. Merci encore!
OriginalL'auteur dugas
Vous devriez être en mesure de le faire avec une boucle do... while qui vient dort jusqu'à ce que le processus est terminé.
OriginalL'auteur MasterOfTheHat