Question Obtenir %CPU avec get-process

Plus d'informations
il y a 17 ans 3 mois #3409 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

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

Plus d'informations
il y a 17 ans 3 mois #3412 par Laurent Dardenne
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

Tutoriels PowerShell

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

Plus d'informations
il y a 17 ans 2 mois #3582 par Robin Lemesle
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 \&quot;Sleeping...\&quot;
sleep -Seconds 1

# Take an \&quot;after\&quot; snapshot of running processes
$procAfter=Get-Process

# enumerate each process object in the before process
# object set
foreach ($p in $ProcBefore) {

# pipe the \&quot;after\&quot; process object to Where-Object
# looking for the matching process in the \&quot;before\&quot;
# 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 \&quot;after\&quot; 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=\&quot;{0:«»P2}\&quot; -f (1-(($p.workingset)/($z[0].workingset)))

# defined a variable for later use with write-host
$color=\&quot;RED\&quot;
}
else
{
# there was no difference so set default variables
$usage=\&quot;0 %\&quot;
$color=\&quot;WHITE\&quot;
}
# 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.

Plus d'informations
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

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

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