J'ai écrit une petite fonction PowerShell qui exécute Get-EventLog contre des serveurs distants. Sur certains serveurs, cela semble simplement accrocher et jamais paraître. Puis-je faire appel à une fonction PowerShell? Je vois comment faire cela contre un Différents processus , mais je veux Pour ce faire pour une fonction d'alimentation.
merci p>
3 Réponses :
Vous pouvez mettre en œuvre des délais d'attente en utilisant un travail d'arrière-plan, comme:
function Get-Alert4($computer, $timeout = 30) { $time = (Get-Date).AddHours(-2) $job = Start-Job { param($c) Get-EventLog Application -CN $c -After $time | Select-String "Some err string" -inputobject{$_.message} | Select-Object List } -ArgumentList $computer Wait-Job $job -Timeout $timeout Stop-Job $job Receive-Job $job Remove-Job $job }
A-t-il besoin d'un arrêt après le travail d'attente? Si le délai d'expiration expire, le travail continue à courir ...
Sheesh, pointilleux, difficile. Je suppose que vous voulez un emploi en retrait pour nettoyer bien. :-)
Merci pour l'aide; très apprécié.
Essayez le code mis à jour. Vous pouvez transmettre des paramètres dans le script de démarrage-travail à l'aide du paramètre argumentList code>.
FYI - Votre liste d'argumentation n'est que bonne pour un paramètre. Si vous souhaitez passer plus d'un argument au travail, vous devez les transmettre en tant que tableau:
$job = Start-Job { param($c, $t) Get-EventLog Application -CN $c -After $t | Select-String "Some err string" -inputobject{$_.message} | Select-Object List } -ArgumentList @($computer, $time)
Il s'agit d'une doublure (en raison de semi-couches) qui affichera un compte baissé tout en parsemant (mais pas identique) que la commande Timeout CMD