Question
Temps d'exécution de Get-WmiObject
- Jacques Barathon
- Hors Ligne
- Administrateur
-
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 17 ans 1 mois #3828
par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:Temps d'exécution de Get-WmiObject
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
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.
- Jacques Barathon
- Hors Ligne
- Administrateur
-
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 17 ans 1 mois #3829
par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:Temps d'exécution de Get-WmiObject
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
[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.
- Bredin Samuel
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 52
- Remerciements reçus 0
il y a 17 ans 1 mois #3830
par Bredin Samuel
Réponse de Bredin Samuel sur le sujet Re:Temps d'exécution de Get-WmiObject
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
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 17 ans 1 mois #3831
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Temps d'exécution de Get-WmiObject
Mephisto écrit:
ps:
C'est Janel
Joli !Déjà je me suis fait une autre fonction WMI avec timeout
ps:
C'est Janel
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Hors Ligne
- Administrateur
-
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 17 ans 1 mois #3832
par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:Temps d'exécution de Get-WmiObject
Bah, Janel, Jamel, pourquoi pas. C'est joli aussi, Jamel. 
Canel - euh, Camel.. mince, je veux dire Janel.
Canel - euh, Camel.. mince, je veux dire Janel.
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 17 ans 1 mois #3841
par Arnaud Petitjean
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 ?
Réponse de Arnaud Petitjean sur le sujet Re:Temps d'exécution de Get-WmiObject
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
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.091 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Temps d'exécution de Get-WmiObject