Ha csak magában, mindenféle paraméterezés nélkül használjuk a Get-Counter cmdletet, az alábbi kimenetet kapjuk:
[22] PS C:\> Get-Counter
Timestamp CounterSamples
--------- --------------
2010. 01. 24. 16:45:34 \\dc\network interface(intel[r] pro_1000 mt desktop
adapter)\bytes total/sec :
41,6342057540426
\\dc\network interface(isatap.{ff327d73-8ae0-4949-98
c2-bad7dabfc3cb})\bytes total/sec :
0
\\dc\network interface(teredo tunneling pseudo-inter
face)\bytes total/sec :
0
\\dc\processor(_total)\% processor time :
13,8461538461538
\\dc\memory\% committed bytes in use :
50,7137807497772
\\dc\memory\cache faults/sec :
0
\\dc\physicaldisk(_total)\% disk time :
0
\\dc\physicaldisk(_total)\current disk queue length
:
0
Látható, hogy már alapesetben is kapunk kimenetet a legfontosabbnak ítélt teljesítmény-számlálókból. Nézzük meg, hogy hogyan lehet tájékozódni a teljesítményszámláló kategóriák és maguk a számlálók között. Ehhez emlékeztetőül nézzük meg a grafikus Performance Monitor alkalmazás felületét, ahol ki lehet választani, hogy mely számlálókat kívánjuk megjeleníteni:
123 . ábra Performance Monitor adatai
A bal felső listában található kategóriákhoz a következő paranccsal jutunk el:
[21] PS C:\> Get-Counter -ListSet * | sort-object -property countersetname | Fo
rmat-Table -Property countersetname
CounterSetName
--------------
.NET CLR Data
.NET CLR Exceptions
.NET CLR Interop
.NET CLR Jit
.NET CLR Loading
.NET CLR LocksAndThreads
.NET CLR Memory
.NET CLR Networking
.NET CLR Remoting
.NET CLR Security
.NET Data Provider for Oracle
.NET Data Provider for SqlServer
ADWS
Authorization Manager Applications
BatteryStatus
…
Mielőtt ebbe belemennénk, nézzünk meg egy számláló-csoportot:
[29] PS C:\> Get-Counter -ListSet "Network Interface"
CounterSetName : Network Interface
MachineName : .
CounterSetType : MultiInstance
Description : The Network Interface performance object consists of coun
ters that measure the rates at which bytes and packets ar
e sent and received over a TCP/IP network connection. It
includes counters that monitor connection errors.
Paths : {\Network Interface(*)\Bytes Total/sec, \Network Interfac
e(*)\Packets/sec, \Network Interface(*)\Packets Received/
sec, \Network Interface(*)\Packets Sent/sec, \Network Int
erface(*)\Current Bandwidth, \Network Interface(*)\Bytes
Received/sec, \Network Interface(*)\Packets Received Unic
ast/sec, \Network Interface(*)\Packets Received Non-Unica
st/sec, \Network Interface(*)\Packets Received Discarded,
\Network Interface(*)\Packets Received Errors...}
PathsWithInstances : {\Network Interface(Intel[R] PRO_1000 MT Desktop Adapter)
\Bytes Total/sec, \Network Interface(isatap.{FF327D73-8AE
0-4949-98C2-BAD7DABFC3CB})\Bytes Total/sec, \Network Inte
rface(Teredo Tunneling Pseudo-Interface)\Bytes Total/sec,
\Network Interface(Intel[R] PRO_1000 MT Desktop Adapter)
\Packets/sec, \Network Interface(isatap.{FF327D73-8AE0-49
49-98C2-BAD7DABFC3CB})\Packets/sec, \Network Interface(Te
redo Tunneling Pseudo-Interface)\Packets/sec, \Network In
terface(Intel[R] PRO_1000 MT Desktop Adapter)\Packets Rec
eived/sec, \Network Interface(isatap.{FF327D73-8AE0-4949-
98C2-BAD7DABFC3CB})\Packets Received/sec, \Network Interf
ace(Teredo Tunneling Pseudo-Interface)\Packets Received/s
ec, \Network Interface(Intel[R] PRO_1000 MT Desktop Adapt
er)\Packets Sent/sec...}
Counter : {\Network Interface(*)\Bytes Total/sec, \Network Interfac
e(*)\Packets/sec, \Network Interface(*)\Packets Received/
sec, \Network Interface(*)\Packets Sent/sec, \Network Int
erface(*)\Current Bandwidth, \Network Interface(*)\Bytes
Received/sec, \Network Interface(*)\Packets Received Unic
ast/sec, \Network Interface(*)\Packets Received Non-Unica
st/sec, \Network Interface(*)\Packets Received Discarded,
\Network Interface(*)\Packets Received Errors...}
Látszik, hogy elég összetett tulajdonságokkal rendelkező objektum a kimenet. A Counter és a Paths tulajdonságok ugyanazt tartalmazzák, merthogy a Counter a Paths álnév-tulajdonsága. Ezekben az adott kategóriába tartozó számlálókat találjuk az összes példányra nézve. Itt konkrétan az összes hálózati interfész együttes Bytes Total/sec, Packets/sec, stb. számlálóit tudnánk megnézni.
Itt tehát még konkrét számlálóértékekről nincs szó, csak a kategóriák és azon belüli számlálók felderítéséről. Ha az egyes példányok számlálóit szeretnénk felderíteni, akkor a PathsWithInstances tulajdonságokat kell lekérdezni:
[38] PS C:\> (Get-Counter -ListSet "Network Interface").pathswithinstances
\Network Interface(Intel[R] PRO_1000 MT Desktop Adapter)\Bytes Total/sec
\Network Interface(isatap.{FF327D73-8AE0-4949-98C2-BAD7DABFC3CB})\Bytes Total/
sec
\Network Interface(Teredo Tunneling Pseudo-Interface)\Bytes Total/sec
\Network Interface(Intel[R] PRO_1000 MT Desktop Adapter)\Packets/sec
…
Ha így felderítettük a számlálókat, akkor a tényleges teljesítményadathoz a Get-Counter egy másik paraméterezésével jutunk el:
[41] PS C:\> Get-Counter -Counter "\Network Interface(Intel[R] PRO_1000 MT Desk
top Adapter)\Bytes Total/sec"
Timestamp CounterSamples
--------- --------------
2010. 01. 24. 17:23:54 \\dc\network interface(intel[r] pro_1000 mt desktop
adapter)\bytes total/sec :
129,285069405517
Itt is a számadat eléggé „belül” található, a CounterSamples tulajdonsággal jutunk hozzá egy kicsit közelebb:
[47] PS C:\> (Get-Counter -Counter "\Network Interface(Intel[R] PRO_1000 MT Des
ktop Adapter)\Bytes Total/sec").countersamples
Path InstanceName CookedValue
---- ------------ -----------
\\dc\network interface(... intel[r] pro_1000 mt d... 179,232170109183
De még itt sem a szám van, még mélyebbre kell ásnunk:
[48] PS C:\> (Get-Counter -Counter "\Network Interface(Intel[R] PRO_1000 MT Des
ktop Adapter)\Bytes Total/sec").countersamples[0].cookedvalue
132,790382777453
A CounterSamples általában lehet tömb is, ha egyszerre több számláló több mintavételezését kérjük:
[57] PS C:\> $minták = Get-Counter -Counter "\Network Interface(Intel[R] PRO_10
00 MT Desktop Adapter)\Bytes Total/sec", "\Network Interface(Intel[R] PRO_1000
MT Desktop Adapter)\Current Bandwidth" -SampleInterval 1 -MaxSamples 5
[58] PS C:\> $minták[0]
Timestamp CounterSamples
--------- --------------
2010. 01. 24. 17:37:39 \\dc\network interface(intel[r] pro_1000 mt desktop
adapter)\bytes total/sec :
153,4636610096
\\dc\network interface(intel[r] pro_1000 mt desktop
adapter)\current bandwidth :
1000000000
A fenti példában 5 mintavétet kértem 1 másodperces mintavételi idővel, egyszerre két számlálóról. Az így kapott tömb 0. eleme tartalmazza az első mintavét idején készült mindkét számlálót, így az első időpontban az első számláló értékét az alábbi kifejezéssel kapjuk meg:
[65] PS C:\> $minták[0].countersamples[0].cookedvalue
153,4636610096
Ha egy komplett táblázatot szeretnénk kapni az értékekből, akkor a következő kis szkriptet használhatjuk:
$minták = Get-Counter -Counter `
"\Network
Interface(Intel[R] PRO_1000 MT Desktop Adapter)\Bytes Total/sec",
"\Network
Interface(Intel[R] PRO_1000 MT Desktop Adapter)\Current Bandwidth" `
-SampleInterval
1 -MaxSamples 5
$tábla = @()
$minták | %{ $táblaelem = New-Object
psobject
$_.countersamples | %{$táblaelem |
add-member -name $_.path -membertype
NoteProperty `
-value $_.cookedvalue}
$táblaelem |
Add-Member -Name TimeStamp
-MemberType NoteProperty `
-Value $_.timestamp
$tábla += $táblaelem
}
$tábla
És ennek kimenete:
\\dc\network interface(int \\dc\network interface(in TimeStamp
el[r] pro_1000 mt desktop tel[r] pro_1000 mt deskto
adapter)\bytes total/sec p adapter)\current bandwi
dth
-------------------------- ------------------------- ---------
153,505227985749 1000000000 2010. 01. 24. 21:28:59
152,063724868109 1000000000 2010. 01. 24. 21:29:00
152,040846660975 1000000000 2010. 01. 24. 21:29:01
151,857656129348 1000000000 2010. 01. 24. 21:29:02
152,206731700545 1000000000 2010. 01. 24. 21:29:03
A következő kis példa egy „grafikus” megjelenítését adja a processzorterhelést mutató teljesítményszámlálónak a PowerShell „progressbar” megjelenítője segítségével:
124 . ábra Karakteres Performance Monitor