11
votes

Comment faire un appel à la fonction PowerShell

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 xxx


0 commentaires

3 Réponses :


25
votes

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
}


4 commentaires

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 .



4
votes

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)


0 commentaires

0
votes

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 xxx


0 commentaires