{"id":51283,"date":"2010-02-16T00:01:00","date_gmt":"2010-02-16T00:01:00","guid":{"rendered":"https:\/\/blogs.technet.microsoft.com\/heyscriptingguy\/2010\/02\/16\/hey-scripting-guy-with-windows-powershell-how-can-i-get-the-same-information-i-get-via-perfmon\/"},"modified":"2010-02-16T00:01:00","modified_gmt":"2010-02-16T00:01:00","slug":"hey-scripting-guy-with-windows-powershell-how-can-i-get-the-same-information-i-get-via-perfmon","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/scripting\/hey-scripting-guy-with-windows-powershell-how-can-i-get-the-same-information-i-get-via-perfmon\/","title":{"rendered":"Hey, Scripting Guy! With Windows PowerShell, How Can I Get the Same Information I Get Via PerfMon?"},"content":{"rendered":"<p class=\"MsoNormal\"><a class=\"addthis_button\" href=\"http:\/\/www.addthis.com\/bookmark.php?v=250&amp;pub=scriptingguys\"><img decoding=\"async\" alt=\"Bookmark and Share\" src=\"http:\/\/s7.addthis.com\/static\/btn\/v2\/lg-share-en.gif\" width=\"125\" height=\"16\"><\/a>&nbsp;<\/p>\n<p class=\"MsoNormal\">&nbsp;<\/p>\n<p><img decoding=\"async\" title=\"Hey, Scripting Guy! Question\" border=\"0\" alt=\"Hey, Scripting Guy! Question\" align=\"left\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/q-for-powertip.jpg\" width=\"34\" height=\"34\"><\/p>\n<p class=\"MsoNormal\">Hey, Scripting Guy! Your article on accessing performance counters was pretty cool, but it did not really tell me anything. For example, I am interested in getting the same kind of information in Windows PowerShell that I can get in Performance Monitor (PerfMon). Is this possible?<\/p>\n<p class=\"MsoNormal\">&#8212; KB<\/p>\n<p class=\"MsoNormal\">\n<p>&nbsp;<\/p>\n<\/p>\n<p class=\"MsoNormal\"><img decoding=\"async\" title=\"Hey, Scripting Guy! Answer\" border=\"0\" alt=\"Hey, Scripting Guy! Answer\" align=\"left\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/a-for-powertip.jpg\" width=\"34\" height=\"34\">Hello KB, <\/p>\n<p class=\"MsoNormal\">Microsoft Scripting Guy Ed Wilson here. I am still convalescing in <a href=\"http:\/\/en.wikipedia.org\/wiki\/Murrells_Inlet,_South_Carolina\">Murrells Inlet<\/a>, South Carolina. The Scripting Wife is an absolute genius sometimes, and this was definitely one of her better ideas. The beach, the sand, the cool ocean breeze, and the marshlands are all soothing to the mind. This morning, I am up early with my Thermos of tea, my camera, and my laptop as I head out into the marshlands that form an important part of the Murrells Inlet ecosystem. From my vantage point, I can see a long-legged bird as he stands on a float of sea grass. His reflection on the water adds an abstract quality to the picture I snapped.<\/p>\n<p class=\"Fig-Graphic\"><img decoding=\"async\" title=\"Image of bird and its reflection\" alt=\"Image of bird and its reflection\" src=\"http:\/\/img.microsoft.com\/library\/media\/1033\/technet\/images\/scriptcenter\/qanda\/hsg\/2010\/february\/hey0218\/hsg-02-18-10-01.jpg\" width=\"600\" height=\"410\"><\/p>\n<p class=\"Fig-Graphic\">\n<p>&nbsp;<\/p>\n<\/p>\n<p class=\"MsoNormal\">Using the Windows PowerShell 2.0 <b>Get-Counter<\/b> cmdlet, you can retrieve the paths to each of the processor information performance counters, and retrieve three samples of the data. The command to do this is shown here:<\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">(Get-Counter -ListSet &#8216;processor information&#8217;).paths | Get-Counter -MaxSamples 3<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">The results of running the above command are shown in the following image. <\/p>\n<p class=\"Fig-Graphic\"><img decoding=\"async\" title=\"Image of results of running command\" alt=\"Image of results of running command\" src=\"http:\/\/img.microsoft.com\/library\/media\/1033\/technet\/images\/scriptcenter\/qanda\/hsg\/2010\/february\/hey0218\/hsg-02-18-10-02.jpg\" width=\"600\" height=\"416\"><\/p>\n<p class=\"Fig-Graphic\">If you wish to wait a certain interval between samples, you can specify the <b>-SampleInterval<\/b> in seconds:<\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">(Get-Counter -ListSet &#8216;processor information&#8217;).paths | Get-Counter -MaxSamples 5 -SampleInterval 2<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">Of course, displaying performance counter data on the Windows PowerShell console every two seconds is not much better than watching the performance monitor line scroll across the screen in PerfMon. To really begin to perform any kind of analysis of the data, you need to store the data. The easiest way to do this is to simply store the results in a variable. This is shown here:<\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">$a = (Get-Counter -ListSet &#8216;processor information&#8217;).paths | Get-Counter -MaxSamples 5 -SampleInterval 2<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">As seen in the following image, the <b>$a<\/b> variable contains all of the performance counter information that was previously scrolling across the screen. <\/p>\n<p class=\"Fig-Graphic\"><img decoding=\"async\" title=\"Image of $a variable containing all performance counter information\" alt=\"Image of $a variable containing all performance counter information\" src=\"http:\/\/img.microsoft.com\/library\/media\/1033\/technet\/images\/scriptcenter\/qanda\/hsg\/2010\/february\/hey0218\/hsg-02-18-10-03.jpg\" width=\"600\" height=\"413\"><a href=\"http:\/\/img.microsoft.com\/library\/media\/1033\/technet\/images\/scriptcenter\/qanda\/hsg\/2010\/february\/hey0218\/hsg-02-18-10-03.jpg\"><\/a><\/p>\n<p>&nbsp;<\/p>\n<\/p>\n<p class=\"MsoNormal\">If we use the <b>Get-Member<\/b> cmdlet (<b>gm<\/b> is the alias for the <b>Get-Member<\/b> cmdlet), we can see that the <b>$a<\/b> variable contains a <b>PerformanceCounterSampleSet<\/b> object. The members of the <b>PerformanceCounterSampleSet<\/b> object are seen here:<\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">PS C:&gt; $a | gm<\/p>\n<p><span>&nbsp;&nbsp; <\/span>TypeName: Microsoft.PowerShell.Commands.GetCounter.PerformanceCounterSampleSet<\/p>\n<p>Name<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>MemberType<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Definition<br \/>&#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8212;-<br \/>Equals<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>bool Equals(System.Object obj)<br \/>GetHashCode<span>&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>int GetHashCode()<br \/>GetType<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>type GetType()<br \/>ToString<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>string ToString()<br \/>CounterSamples Prope\nrty<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Microsoft.PowerShell.Commands.GetCounter.PerformanceCounterSample[] CounterSamples {ge&#8230;<br \/>Timestamp<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime Timestamp {get;set;}<br \/>Readings<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>ScriptProperty System.Object Readings {get=$strPaths = &#8220;&#8221;&#8230;<\/p>\n<p>PS C:&gt;<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">Because the <b>PerformanceCounterSampleSet<\/b> object is a collection, it is possible to index directly into a single instance of the readings. To do this, use the same technique you would use with an array, as shown in the following image.<\/p>\n<p class=\"Fig-Graphic\"><img decoding=\"async\" title=\"Image of indexing directly into single instance of readings\" alt=\"Image of indexing directly into single instance of readings\" src=\"http:\/\/img.microsoft.com\/library\/media\/1033\/technet\/images\/scriptcenter\/qanda\/hsg\/2010\/february\/hey0218\/hsg-02-18-10-04.jpg\" width=\"600\" height=\"413\"><\/p>\n<p>&nbsp;<\/p>\n<\/p>\n<p class=\"MsoNormal\">The <b>countersamples<\/b> property returns an instance of the <b>PerformanceCounterSample<\/b> object, as shown here:<\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">PS C:&gt; $a[0].countersamples | gm<\/p>\n<p><span>&nbsp;&nbsp; <\/span>TypeName: Microsoft.PowerShell.Commands.GetCounter.PerformanceCounterSample<\/p>\n<p>Name<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>MemberType Definition<br \/>&#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<br \/>Equals<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>bool Equals(System.Object obj)<br \/>GetHashCode<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>int GetHashCode()<br \/>GetType<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>type GetType()<br \/>ToString<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>string ToString()<br \/>CookedValue<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp; <\/span>System.Double CookedValue {get;set;}<br \/>CounterType<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp; <\/span>System.Diagnostics.PerformanceCounterType CounterType {get;set;}<br \/>DefaultScale<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp; <\/span>System.UInt32 DefaultScale {get;set;}<br \/>InstanceName<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp; <\/span>System.String InstanceName {get;set;}<br \/>MultipleCount<span>&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp; <\/span>System.UInt32 MultipleCount {get;set;}<br \/>Path<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp; <\/span>System.String Path {get;set;}<br \/>RawValue<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp; <\/span>System.UInt64 RawValue {get;set;}<br \/>SecondValue<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp; <\/span>System.UInt64 SecondValue {get;set;}<br \/>Status<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp; <\/span>System.UInt32 Status {get;set;}<br \/>TimeBase<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp; <\/span>System.UInt64 TimeBase {get;set;}<br \/>Timestamp<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp; <\/span>System.DateTime Timestamp {get;set;}<br \/>Timestamp100NSec Property<span>&nbsp;&nbsp; <\/span>System.UInt64 Timestamp100NSec {get;set;}<\/p>\n<p>PS C:&gt;<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">The more interesting properties are the <b>path<\/b> to the counter, the <b>instance<\/b> name, and the <b>CookedValue<\/b>. A table displaying this truncated information is shown here (<b>ft<\/b> is an alias for the <b>Format-Table<\/b> cmdlet, and wildcards characters are used to reduce the typing requirements for the property names): <\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">PS C:&gt; $a[0].countersamples | ft *path, *instance*, *cook* -AutoSize<\/p>\n<p>Path<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>InstanceName<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>CookedValue<br \/>&#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>&#8212;&#8212;&#8212;&#8212;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8212;&#8211;<br \/>\\mred1processor information(_total)processor state flags<span>&nbsp;&nbsp;&nbsp; <\/span>_total<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0<br \/>\\mred1processor information(0,_total)processor state flags<span>&nbsp; <\/span>0,_total<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;<\/span>0<br \/>\\mred1processor information(0,3)processor state flags<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0,3<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n <\/span>0<br \/>\\mred1processor information(0,2)processor state flags<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0,2<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0<br \/>\\mred1processor information(0,1)processor state flags<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0,1<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0<br \/>\\mred1processor information(0,0)processor state flags<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0,0<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0<br \/>\\mred1processor information(_total)% of maximum frequency<span>&nbsp;&nbsp; <\/span>_total<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0<br \/>\\mred1processor information(0,_total)% of maximum frequency 0,_total<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0<br \/>\\mred1processor information(0,3)% of maximum frequency<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0,3<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0<br \/>\\mred1processor information(0,2)% of maximum frequency<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0,2<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0<br \/>\\mred1processor information(0,1)% of maximum frequency<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0,1<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0<br \/>\\mred1processor information(0,0)% of maximum frequency<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0,0<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">You can also use the <b>Where-Object<\/b> cmdlet to filter out counter samples before displaying them in the table. The question mark (<b>?<\/b>) is an alias for the <b>Where-Object<\/b> cmdlet and <b>ft<\/b> is an alias for the <b>Format-Table<\/b> cmdlet:<\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">PS C:&gt; $a[0].countersamples | ? { $_.cookedvalue -gt 100 } | ft -AutoSize<\/p>\n<p>Path<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>InstanceName<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>CookedValue<br \/>&#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8212;&#8212;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8212;&#8211;<br \/>\\mred1processor information(_total)c1 transitions\/sec<span>&nbsp;&nbsp; <\/span>_total<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>7180.4703476188<br \/>\\mred1processor information(0,_total)c1 transitions\/sec 0,_total<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>7180.4703476188<br \/>\\mred1processor information(0,3)c1 transitions\/sec<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0,3<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>1922.74322394713<br \/>\\mred1processor information(0,2)c1 transitions\/sec<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0,2<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>2039.01604283622<br \/>\\mred1processor information(0,1)c1 transitions\/sec<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0,1<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>2147.80348711872<br \/>\\mred1processor information(0,0)c1 transitions\/sec<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0,0<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>1070.90759371672<br \/>\\mred1processor information(_total)dpcs queued\/sec<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>_total<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>176.155815741847<br \/>\\mred1processor information(0,_total)dpcs queued\/sec<span>&nbsp;&nbsp;&nbsp; <\/span>0,_total<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>176.155815741847<br \/>\\mred1processor information(_total)interrupts\/sec<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>_total<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>2074.94584094787<br \/>\\mred1processor information(0,_total)interrupts\/sec<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0,_total<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>2074.94584094787<br \/>\\mred1processor information(0,3)interrupts\/sec<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0,3<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>441.138076815277<br \/>\\mred1processor information(0,2)interrupts\/sec<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0,2<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>540.444046596091<br \/>\\mred1processor information(0,1)interrupts\/sec<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0,1<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>535.952821832135<br \/>\\mred1processor information(0,0)interrupts\/sec<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0,0<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>557.410895704371<\/p>\n<p>PS C:&gt;<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">Because the <b>$a<\/b> variable contains a collection of performance data, you might be interested in walking through the collection of sample data, and then looking for a <b>cookedvalue<\/b> that is greater than 3000. When you obtain the inf\normation, you might like to stick with the table output. The percentage sign (<b>%<\/b>) is an alias for the <b>ForEach-Object<\/b> Windows PowerShell cmdlet. The question mark (<b>?<\/b>) is an alias for the <b>Where-Object<\/b> cmdlet. The <b>&ndash;gt<\/b> is the operator that means greater than and the <b>$_<\/b> character is the symbol that refers to the current object on the pipeline. And <b>ft<\/b> is an alias for the <b>Format-Table<\/b> cmdlet. The complete one-line command is shown here along with the complete data that was retrieved from my computer:<\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">PS C:&gt; $a | % { $_.countersamples | ? {$_.cookedvalue -gt 3000} } | ft -auto<\/p>\n<p>Path<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>InstanceName<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>CookedValue<br \/>&#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>&#8212;&#8212;&#8212;&#8212;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8212;&#8211;<br \/>\\mred1processor information(_total)c1 transitions\/sec<span>&nbsp;&nbsp; <\/span>_total<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>7180.4703476188<br \/>\\mred1processor information(0,_total)c1 transitions\/sec 0,_total<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>7180.4703476188<br \/>\\mred1processor information(_total)c1 transitions\/sec<span>&nbsp;&nbsp; <\/span>_total<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>7135.11877036386<br \/>\\mred1processor information(0,_total)c1 transitions\/sec 0,_total<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>7135.11877036386<br \/>\\mred1processor information(_total)c1 transitions\/sec<span>&nbsp;&nbsp; <\/span>_total<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>7042.68233293539<br \/>\\mred1processor information(0,_total)c1 transitions\/sec 0,_total<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>7042.68233293539<br \/>\\mred1processor information(_total)c1 transitions\/sec<span>&nbsp;&nbsp; <\/span>_total<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>7256.44182560112<br \/>\\mred1processor information(0,_total)c1 transitions\/sec 0,_total<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>7256.44182560112<br \/>\\mred1processor information(_total)c1 transitions\/sec<span>&nbsp;&nbsp; <\/span>_total<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>7145.0786818399<br \/>\\mred1processor information(0,_total)c1 transitions\/sec 0,_total<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>7145.0786818399<\/p>\n<p>PS C:&gt;<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">Because we are using standard Windows PowerShell cmdlets to process the performance information, we can also use the Sort-Object cmdlet to sort the data for us into a more readable output. The revised command that produces sorted information is shown here (note that <b>sort<\/b> is an alias for the <b>Sort-Object<\/b> cmdlet): <\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">PS C:&gt; $a | % { $_.countersamples | ? {$_.cookedvalue -gt 3000} } | sort cookedvalue | ft -auto<\/p>\n<p>Path<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>InstanceName<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>CookedValue<br \/>&#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8212;&#8212;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8212;&#8211;<br \/>\\mred1processor information(0,_total)c1 transitions\/sec 0,_total<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>7042.68233293539<br \/>\\mred1processor information(_total)c1 transitions\/sec<span>&nbsp;&nbsp; <\/span>_total<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>7042.68233293539<br \/>\\mred1processor information(0,_total)c1 transitions\/sec 0,_total<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>7135.11877036386<br \/>\\mred1processor information(_total)c1 transitions\/sec<span>&nbsp;&nbsp; <\/span>_total<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>7135.11877036386<br \/>\\mred1processor information(_total)c1 transitions\/sec<span>&nbsp;&nbsp; <\/span>_total<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>7145.0786818399<br \/>\\mred1processor information(0,_total)c1 transitions\/sec 0,_total<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>7145.0786818399<br \/>\\mred1processor information(0,_total)c1 transitions\/sec 0,_total<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>7180.4703476188<br \/>\\mred1processor information(_total)c1 transitions\/sec<span>&nbsp;&nbsp; <\/span>_total<span style=\"mso-spacerun\"><\/span><\/font><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; &nbsp; Hey, Scripting Guy! Your article on accessing performance counters was pretty cool, but it did not really tell me anything. For example, I am interested in getting the same kind of information in Windows PowerShell that I can get in Performance Monitor (PerfMon). Is this possible? &#8212; KB &nbsp; Hello KB, Microsoft Scripting [&hellip;]<\/p>\n","protected":false},"author":595,"featured_media":87096,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[51,31,60,3,45],"class_list":["post-51283","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scripting","tag-getting-started","tag-operating-system","tag-performance","tag-scripting-guy","tag-windows-powershell"],"acf":[],"blog_post_summary":"<p>&nbsp; &nbsp; Hey, Scripting Guy! Your article on accessing performance counters was pretty cool, but it did not really tell me anything. For example, I am interested in getting the same kind of information in Windows PowerShell that I can get in Performance Monitor (PerfMon). Is this possible? &#8212; KB &nbsp; Hello KB, Microsoft Scripting [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/51283","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/users\/595"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/comments?post=51283"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/51283\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/media\/87096"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/media?parent=51283"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/categories?post=51283"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/tags?post=51283"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}