Question Temps d'exécution de Get-WmiObject

Plus d'informations
il y a 17 ans 1 mois #3818 par Bredin Samuel
Bonjour,

Je voudrais faire une fonction permettant de savoir la dernière date de reboot d'un serveur distant.

[code:1]Function Get-UptimeServer ([string]$serveur) {
$ErrorActionPreference = 'stop'
$os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $serveur -Property LastBootUpTime | Select-Object LastBootUpTime

$uptime = $os.LastBootUpTime
$uptime = New-Object System.DateTime($($uptime.substring(0,4)),$($uptime.substring(4,2)),$($uptime.substring(6,2)),$($uptime.substring(8,2)),$($uptime.substring(10,2)),$($uptime.substring(12,2)))

Return $uptime
}[/code:1]

Mon problème est dans le temps de traitement qui n'est pas limité. J'ai un parc de 1500 serveurs a collecter. J'ai déjà eu le cas de 2 jours pour collecter l'information pour une seule machine.

Auriez-vous une méthode pour limiter le traitement de cette fonction ?

Créer un tread asynchrone ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 1 mois #3821 par Laurent Dardenne
Peux-tu reformuler le pb ?

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 1 mois #3822 par Arnaud Petitjean
Salut Mephisto,

L'execution d'un thread asynchrone n'améliorera pas à mon sens les performances de ton script. Ceci étant, je sais pas comment le faire en v1. Avec PowerShell v2 tu devrais pouvoir envoyer un job distant asynchrone. Mais tu le sais la v2 est encore en CTP...

2 jours pour obtenir la réponse d'un serveur ça me paraît anormalement long. Peut-être devrais-tu essayer de pinguer le serveur avant de lui envoyer la requete.

Peut-être s'agit-il aussi d'un problème de timeout ?

Arnaud
PS : Merci pour ton script. Je vais le mettre dans la bibliothèque ;)

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 1 mois #3823 par Bredin Samuel
La commande Get-WmiObject ne génère pas d'erreur en cas de Timeout.
Je voudrais que lorsque j'appelle cette fonction :
- soit qu'elle génère une erreur
- soit qu'elle ne retourne rien pour redonner la main

Merci par avance pour vos suggestions.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 1 mois #3824 par Bredin Samuel
Bonjour Arnaud,

Merci pour l'info.
Pour l'idée de ping avant l'appel, non réalisable.
La machine répond très bien au ping et avec des temps normaux.
Il n'y a que les requetes wmi qui sont anormalement longue.

Petite precision je ne veux pas utiliser la version 2 de Powershell en production (tant qu'elle sera en CTP).

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 1 mois #3827 par Laurent Dardenne
Mephisto écrit:

La commande Get-WmiObject ne génère pas d'erreur en cas de Timeout.

Je comprend mieux.
Il faudrait vérifier sur les serveurs posant pb si la connection est possible.
Comme la classe ConnectionOptions propose un timeout c'est peut être une piste. Ensuite la connexion peut être acceptée rapidement mais pas ta requête, mais cela t'oblige à coder en .NET.
A vérifier donc. Sinon connais-tu la cause d'un tel temps de traitement ?

Wmi permet les appels asynchrones mais il faut passer via des interfaces et avoir une gestion des événements , malheureusement c'est pas encore possible sous PowerShell :lol:

En V1 tu peux créer des jobs en tâche de fond,, recherche sur le forum, mais ton code sera plus complexe.

Voir aussi google avec \"PowerShell WMI timeout\".

[edit]
Voir aussi waitfornextevent <br><br>Message édité par: Laurent Dardenne, à: 26/01/09 16:40

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.081 secondes
Propulsé par Kunena