Számlálók kiolvasása (Get-Counter)

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



Word To HTML Converter