Question Temps d'exécution de Get-WmiObject

Plus d'informations
il y a 17 ans 1 mois #3828 par Jacques Barathon
Je confirme que le timeout configurable pour WMI ne concerne que la phase de connexion. La requête elle-même ne peut pas être interrompue au bout d'un temps défini par l'utilisateur.

On pourrait s'en sortir éventuellement en remplaçant la méthode WMI par un accès à l'event log où on peut rechercher le dernier évènement enregistré concernant le démarrage du système (chaque démarrage est enregistré dans le journal System, de mémoire c'est l'évènement 615 ou 616).

Sinon, à propos du script donné en exemple, on peut s'épargner la tâche laborieuse de conversion de la date retournée par l'objet $os en utilisant la classe .NET appropriée:

[code:1]
PS> $os = gwmi win32_operatingsystem
PS> $lastbootuptime = [System.Management.ManagementDateTimeConverter]::ToDateTime($os.lastbootuptime)
PS> $lastbootuptime

samedi 17 janvier 2009 23:30:30
[/code:1]
Le gros avantage, en plus de la simplicité, est de permettre des calculs sur un vrai objet date, comme par exemple calculer le nombre d'heures écoulées depuis le dernier démarrage du système:

[code:1]
PS> ([datetime]::now - $lastbootuptime).totalhours
209,715060670556
[/code:1]
Janel

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

Plus d'informations
il y a 17 ans 1 mois #3829 par Jacques Barathon
Erratum: l'event ID correspondant à un démarrage système est 6005, pas 615. On devrait pouvoir retrouver la date du dernier démarrage en tapant:

[code:1]
PS> $laststartupevent = get-eventlog -computername serveur -logname System -instanceID 6005 -newest 1
PS> $laststartuptime = $laststartupevent.TimeGenerated
[/code:1]
A tester, mais à priori ça devrait le faire. :)

Janel

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

Plus d'informations
il y a 17 ans 1 mois #3830 par Bredin Samuel
J'ai trouvé ce que je voulais.

Merci Laurent, c'était une bonne piste.

Déjà je me suis fait une autre fonction WMI avec timeout:
[code:1]Function Get-Wmi ([string]$WQL, [string]$Scope = \"root\cimv2\"«») {
#Requete
$query = New-Object System.Management.WqlObjectQuery $WQL

#Scope defaut:'root\cimv2' à distance:'\\machine\root\cimv2'
$objScope = New-Object System.Management.ManagementScope $Scope

#Objet de recherche
$searcher = New-Object System.Management.ManagementObjectSearcher $objScope,$query
$searcher.Options.Timeout = New-Object timespan([Int32]0, [Int32]1, [Int32]0)

Return $searcher.Get()
}[/code:1]

Donc la fonction uptime initial :
[code:1]Function Get-UptimeServer ([string]$serveur) {
$uptime = (Get-Wmi \"select LastBootUpTime from Win32_OperatingSystem\" \"\\$serveur\root\cimv2\"«»).LastBootUpTime
Return [System.Management.ManagementDateTimeConverter]::ToDateTime($uptime)

trap {break}
}[/code:1]

Merci pour votre aide.

PS: Désolé Jamel pour cette convertion laborieuse, je pensais avoir poster dans Entraide pour les débutants<br><br>Message édité par: Mephisto, à: 26/01/09 19:52

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

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

Déjà je me suis fait une autre fonction WMI avec timeout

Joli !

ps:
C'est Janel ;)

Tutoriels PowerShell

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

Plus d'informations
il y a 17 ans 1 mois #3832 par Jacques Barathon
Bah, Janel, Jamel, pourquoi pas. C'est joli aussi, Jamel. :)

Canel - euh, Camel.. mince, je veux dire Janel.

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

Plus d'informations
il y a 17 ans 1 mois #3841 par Arnaud Petitjean
Excellent !!!

Mais n'est-ce pas un peu trop long 1 minute ?

D'autre part, as-tu trouvé pourquoi ce serveur est récalcitrant aux requêtes WMI ?

Arnaud

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.

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