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