Question
Obtenir %CPU avec get-process
- Burgun
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 40
- Remerciements reçus 0
il y a 17 ans 3 mois #3409
par Burgun
Obtenir %CPU avec get-process a été créé par Burgun
Bonjour à tous.
Je connais l'existence de power-shell que depuis quelques jours et je n'ai aucune connaissance de scripting.
Je cherche donc à combler ce manque.
Pour le moment, je cherche simplement à éxécuter des commandes simples.
Pour commencer, je cherche à obtenir l'occupation CPU des principales processus en mémoire.
J'en suis arrivé à cette commande :
[code:1]Get-Process | sort-object -property CPU -descending | select-object -first 5 | ft -property proces
sname, CPU -autosize[/code:1]
[code:1]ProcessName CPU
---
MeGUI 3816,59375
RKLauncher 1371,640625
svchost 1149,8125
ekrn 1135,5
vmware-authd 1098,890625[/code:1]
Mais, le temps d'occupation CPU est en s, hors je voudrais l'obtenir en %, comme dans le gestionnaire de tache de windows. Pouvez vous m'aider ?
Merci<br><br>Message édité par: Arnaud, à: 9/12/08 23:13
Je connais l'existence de power-shell que depuis quelques jours et je n'ai aucune connaissance de scripting.
Je cherche donc à combler ce manque.
Pour le moment, je cherche simplement à éxécuter des commandes simples.
Pour commencer, je cherche à obtenir l'occupation CPU des principales processus en mémoire.
J'en suis arrivé à cette commande :
[code:1]Get-Process | sort-object -property CPU -descending | select-object -first 5 | ft -property proces
sname, CPU -autosize[/code:1]
[code:1]ProcessName CPU
---
MeGUI 3816,59375
RKLauncher 1371,640625
svchost 1149,8125
ekrn 1135,5
vmware-authd 1098,890625[/code:1]
Mais, le temps d'occupation CPU est en s, hors je voudrais l'obtenir en %, comme dans le gestionnaire de tache de windows. Pouvez vous m'aider ?
Merci<br><br>Message édité par: Arnaud, à: 9/12/08 23:13
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 3 mois #3412
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Obtenir %CPU avec get-process
Consulte cette article
www.codeproject.com/KB/system/processescpuusage.aspx
Désolé mais là je n'ai le temps de l'adapter, le code est en C# assez proche du langage PowerShell.
Ensuite j'ai trouvé d'autre pistes
Compteur de performance
www.leeholmes.com/blog/AccessingPerforma...ersInPowerShell.aspx
WMI
social.msdn.microsoft.com/Forums/en-US/O...0-9fbc-71a4bf0df761/
msdn.microsoft.com/en-us/library/aa394373.aspx
www.codeproject.com/KB/system/processescpuusage.aspx
Désolé mais là je n'ai le temps de l'adapter, le code est en C# assez proche du langage PowerShell.
Ensuite j'ai trouvé d'autre pistes
Compteur de performance
www.leeholmes.com/blog/AccessingPerforma...ersInPowerShell.aspx
WMI
social.msdn.microsoft.com/Forums/en-US/O...0-9fbc-71a4bf0df761/
msdn.microsoft.com/en-us/library/aa394373.aspx
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Robin Lemesle
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 260
- Remerciements reçus 0
il y a 17 ans 2 mois #3582
par Robin Lemesle
Robin MVP PowerShell
Réponse de Robin Lemesle sur le sujet Re:Obtenir %CPU avec get-process
En fait, ce que tu veux c'est obtenir à un temps T la consommation CPU en pourcentage ?
Après investigation, cela n'est pas possible avec powershell. Mais (il y a toujours un mais) il existe plusieurs techniques pour contourner le problème. Si tu doit absolument le réaliser en powershell voici comment calculer l'occupation CPU en poucentage :
La technique consiste à faire deux mesure et calculer la moyenne de temps occupée par le CPU. La formule est la suivante :
MoyCpu = [TempsTotalCPU (processus, time2) - TempsTotalCPU (processus, time1)] / [time2-time1]
En toute logique, le gestionnaire de tâches de windows doit faire la même chose, mais avec un intervalle de 1 sec (tu remarquera que le pourcentage change toute les secondes).
Et comme on fait les choses bien ici, voici un script fait par sapien que j'ai récuperé sur powershellcomunity.org :
[code:1]
# Take a snapshot of running processes
$ProcBefore=Get-Process
#sleep for some specified number of seconds
Write-Host \"Sleeping...\"
sleep -Seconds 1
# Take an \"after\" snapshot of running processes
$procAfter=Get-Process
# enumerate each process object in the before process
# object set
foreach ($p in $ProcBefore) {
# pipe the \"after\" process object to Where-Object
# looking for the matching process in the \"before\"
# set. I'm matching on the ID property. The matching
# process will be saved to variable $z
# The expression is piped to out-null so the result
# isn't displayed to the screen
$procAfter | where {$_.id -eq $p.id} -OutVariable z | Out-Null
# $z is technically an array with one element, so I use
# [0] to get the first element. I'm looking at the
# workingset property of this object. Remember, this
# is the matching process in the \"after\" snapshot.
# If the value of of the after process's workingset
# minus the before process workingset is greater than 0
# then I know there was an increase in workingset size
if (($z[0].workingset)-($p.workingset) -gt 0 ) {
# $usage is a variable showing the result
# of the before process workingset/after process workingset
# and formatted using the .NET format operator, -f
# as a percentage.
#if you see a smiley it should be replaced with
#{ 0 : P2} Just take out the spaces
$usage=\"{0:«»P2}\" -f (1-(($p.workingset)/($z[0].workingset)))
# defined a variable for later use with write-host
$color=\"RED\"
}
else
{
# there was no difference so set default variables
$usage=\"0 %\"
$color=\"WHITE\"
}
# write the results to the screen
Write-Host -ForegroundColor $color ($p.id) ($p.name)
Write-Host -ForegroundColor $color BEFORE: ($p.workingset) AFTER: ($z[0].workingset)
Write-Host -ForegroundColor $color Usage: $usage
}[/code:1]
Bonnes fêtes.
Après investigation, cela n'est pas possible avec powershell. Mais (il y a toujours un mais) il existe plusieurs techniques pour contourner le problème. Si tu doit absolument le réaliser en powershell voici comment calculer l'occupation CPU en poucentage :
La technique consiste à faire deux mesure et calculer la moyenne de temps occupée par le CPU. La formule est la suivante :
MoyCpu = [TempsTotalCPU (processus, time2) - TempsTotalCPU (processus, time1)] / [time2-time1]
En toute logique, le gestionnaire de tâches de windows doit faire la même chose, mais avec un intervalle de 1 sec (tu remarquera que le pourcentage change toute les secondes).
Et comme on fait les choses bien ici, voici un script fait par sapien que j'ai récuperé sur powershellcomunity.org :
[code:1]
# Take a snapshot of running processes
$ProcBefore=Get-Process
#sleep for some specified number of seconds
Write-Host \"Sleeping...\"
sleep -Seconds 1
# Take an \"after\" snapshot of running processes
$procAfter=Get-Process
# enumerate each process object in the before process
# object set
foreach ($p in $ProcBefore) {
# pipe the \"after\" process object to Where-Object
# looking for the matching process in the \"before\"
# set. I'm matching on the ID property. The matching
# process will be saved to variable $z
# The expression is piped to out-null so the result
# isn't displayed to the screen
$procAfter | where {$_.id -eq $p.id} -OutVariable z | Out-Null
# $z is technically an array with one element, so I use
# [0] to get the first element. I'm looking at the
# workingset property of this object. Remember, this
# is the matching process in the \"after\" snapshot.
# If the value of of the after process's workingset
# minus the before process workingset is greater than 0
# then I know there was an increase in workingset size
if (($z[0].workingset)-($p.workingset) -gt 0 ) {
# $usage is a variable showing the result
# of the before process workingset/after process workingset
# and formatted using the .NET format operator, -f
# as a percentage.
#if you see a smiley it should be replaced with
#{ 0 : P2} Just take out the spaces
$usage=\"{0:«»P2}\" -f (1-(($p.workingset)/($z[0].workingset)))
# defined a variable for later use with write-host
$color=\"RED\"
}
else
{
# there was no difference so set default variables
$usage=\"0 %\"
$color=\"WHITE\"
}
# write the results to the screen
Write-Host -ForegroundColor $color ($p.id) ($p.name)
Write-Host -ForegroundColor $color BEFORE: ($p.workingset) AFTER: ($z[0].workingset)
Write-Host -ForegroundColor $color Usage: $usage
}[/code:1]
Bonnes fêtes.
Robin MVP PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Burgun
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 40
- Remerciements reçus 0
il y a 17 ans 2 mois #3586
par Burgun
Réponse de Burgun sur le sujet Re:Obtenir %CPU avec get-process
Merci beaucoup
J'ai compris la méthode mais j'avoue ne pas comprendre tout le script. Je vais me pencher sur le sujet.
Merci encore de vous être penché sur le problème
J'ai compris la méthode mais j'avoue ne pas comprendre tout le script. Je vais me pencher sur le sujet.
Merci encore de vous être penché sur le problème
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.088 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Obtenir %CPU avec get-process