此 cmdlet 仅在 Windows 平台上可用。
cmdlet
Get-Counter
直接从 Windows 系列操作系统中的性能监视检测获取性能计数器数据。
Get-Counter
从本地计算机或远程计算机获取性能数据。
可以使用
Get-Counter
参数指定一台或多台计算机,列出性能计数器集及其包含的实例,设置采样间隔,并指定最大样本数。 如果没有参数,
Get-Counter
则获取一组系统计数器的性能计数器数据。
许多计数器集受访问控制列表 (ACL) 的保护。 若要查看所有计数器集,请使用“
以管理员身份运行”
选项打开 PowerShell。
此 cmdlet 在 PowerShell 7 中重新引入。
性能计数器名称已本地化。 此处显示的示例使用性能对象、计数器和实例的英文名称。 在使用另一种语言的系统上,名称将有所不同。
Get-Counter -ListSet
使用 命令查看本地化名称。
示例 1:获取计数器集列表
此示例获取本地计算机的计数器集列表。
Get-Counter -ListSet *
CounterSetName : Processor
MachineName : .
CounterSetType : MultiInstance
Description : The Processor performance object consists of counters that measure aspects ...
computer that performs arithmetic and logical computations, initiates ...
computer can have multiple processors. The processor object represents ...
Paths : {\Processor(*)\% Processor Time, \Processor(*)\% User Time, ...
PathsWithInstances : {\Processor(0)\% Processor Time, \Processor(1)\% Processor Time, ...
Counter : {\Processor(*)\% Processor Time, \Processor(*)\% User Time, ...
Get-Counter
使用带星号的
ListSet
参数 (
*
) 获取计数器集的列表。
MachineName
列中的点 (
.
) 表示本地计算机。
示例 2:指定 SampleInterval 和 MaxSamples
此示例获取本地计算机上所有处理器的计数器数据。 数据每隔两秒收集一次,直到有三个样本。
Get-Counter -Counter "\Processor(_Total)\% Processor Time" -SampleInterval 2 -MaxSamples 3
Timestamp CounterSamples
--------- --------------
6/18/2019 14:39:56 \\Computer01\processor(_total)\% processor time :
20.7144271584086
6/18/2019 14:39:58 \\Computer01\processor(_total)\% processor time :
10.4391790575511
6/18/2019 14:40:01 \\Computer01\processor(_total)\% processor time :
37.5968799396998
Get-Counter
使用
Counter
参数指定计数器路径
\Processor(_Total)\% Processor Time
。
SampleInterval
参数设置一个 2 秒间隔来检查计数器。
MaxSamples
确定三个是检查计数器的最大次数。
示例 3:获取计数器的连续样本
此示例每秒获取一个计数器的连续样本。 若要停止该命令,请按
CTRL
C
。 若要指定样本之间的较长间隔,请使用
SampleInterval
参数。
Get-Counter -Counter "\Processor(_Total)\% Processor Time" -Continuous
Timestamp CounterSamples
--------- --------------
6/19/2019 15:35:03 \\Computer01\processor(_total)\% processor time :
43.8522842937022
6/19/2019 15:35:04 \\Computer01\processor(_total)\% processor time :
29.7896844697383
6/19/2019 15:35:05 \\Computer01\processor(_total)\% processor time :
29.4962645638135
6/19/2019 15:35:06 \\Computer01\processor(_total)\% processor time :
25.5901500127408
Get-Counter
使用
Counter
参数指定
\Processor\% Processor Time
计数器。
Continuous
参数指定每秒获取一次样本,直到使用
CTRL
+
C
停止命令。
示例 4:按字母顺序排列的计数器集列表
此示例使用管道获取计数器列表集,然后按字母顺序对列表进行排序。
Get-Counter -ListSet * |
Sort-Object -Property CounterSetName |
Format-Table CounterSetName, CounterSetType -AutoSize
CounterSetName CounterSetType
-------------- --------------
.NET CLR Data SingleInstance
.NET Data Provider for SqlServer SingleInstance
AppV Client Streamed Data Percentage SingleInstance
Authorization Manager Applications SingleInstance
BitLocker MultiInstance
Bluetooth Device SingleInstance
Cache SingleInstance
Client Side Caching SingleInstance
Get-Counter
使用带星号的
ListSet
参数 (
*
) 获取计数器集的完整列表。
CounterSet
对象在管道中向下发送。
Sort-Object
使用
Property
参数指定对象按
CounterSetName
排序。 对象在管道中向下发送到
Format-Table
。
AutoSize
参数调整列宽以最大程度地减少截断。
MachineName
列中的点 (
.
) 表示本地计算机。
示例 5:运行后台作业以获取计数器数据
在此示例中,
Start-Job
在本地计算机上运行
Get-Counter
命令作为后台作业。
若要查看作业的性能计数器输出,请使用
Receive-Job
cmdlet。
Start-Job -ScriptBlock {Get-Counter -Counter "\LogicalDisk(_Total)\% Free Space" -MaxSamples 1000}
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Running True localhost Get-Counter -Counter
Start-Job
使用
ScriptBlock
参数运行
Get-Counter
命令。
Get-Counter
使用
Counter
参数指定计数器路径
\LogicalDisk(_Total)\% Free Space
。
MaxSamples
参数指定获取计数器的 1000 个样本。
示例 6:从多台计算机获取计数器数据
此示例使用 变量从两台计算机获取性能计数器数据。
$DiskReads = "\LogicalDisk(C:)\Disk Reads/sec"
$DiskReads | Get-Counter -ComputerName Server01, Server02 -MaxSamples 10
Timestamp CounterSamples
--------- --------------
6/21/2019 10:51:04 \\Server01\logicaldisk(c:)\disk reads/sec :
\\Server02\logicaldisk(c:)\disk reads/sec :
0.983050344269146
变量
$DiskReads
存储
\LogicalDisk(C:)\Disk Reads/sec
计数器路径。 变量
$DiskReads
在管道中向下发送到
Get-Counter
。
计数器
是第一个位置参数,接受 存储在 中的
$DiskReads
路径。
ComputerName
指定两台计算机,
MaxSamples
指定从每台计算机获取 10 个样本。
示例 7:从多个随机计算机获取计数器的实例值
此示例获取企业中 50 台随机远程计算机上的性能计数器的值。
ComputerName
参数使用存储在变量中的随机计算机名称。 若要更新变量中的计算机名称,请重新创建变量。
ComputerName
参数中服务器名称的替代方法是使用文本文件。 例如:
-ComputerName (Get-Random (Get-Content -Path C:\Servers.txt) -Count 50)
计数器路径在实例名称中包含星号 (
*
) ,用于获取每个远程计算机处理器的数据。
$Servers = Get-Random (Get-Content -Path C:\Servers.txt) -Count 50
$Counter = "\Processor(*)\% Processor Time"
Get-Counter -Counter $Counter -ComputerName $Servers
Timestamp CounterSamples
--------- --------------
6/20/2019 12:20:35 \\Server01\processor(0)\% processor time :
6.52610319637854
\\Server01\processor(1)\% processor time :
3.41030663625782
\\Server01\processor(2)\% processor time :
9.64189975649925
\\Server01\processor(3)\% processor time :
1.85240835619747
\\Server01\processor(_total)\% processor time :
5.35768447160776
cmdlet
Get-Random
使用
Get-Content
从
Servers.txt
文件选择 50 个随机计算机名称。 远程计算机名称存储在 变量中
$Servers
。 计数器
\Processor(*)\% Processor Time
的路径存储在 变量中
$Counter
。
Get-Counter
使用
Counter
参数指定变量中的
$Counter
计数器。
ComputerName
参数指定变量中的
$Servers
计算机名称。
示例 8:使用 Path 属性获取格式化的路径名称
此示例使用计数器集的
Path
属性查找性能计数器的格式化路径名称。
管道与 cmdlet 一起使用,
Where-Object
以查找路径名称的子集。 若要查找计数器集计数器路径的完整列表,请删除管道 (
|
) 和
Where-Object
命令。
$_
是管道中当前对象的自动变量。
有关详细信息,请参阅
about_Automatic_Variables
。
(Get-Counter -ListSet Memory).Paths | Where-Object { $_ -like "*Cache*" }
\Memory\Cache Faults/sec
\Memory\Cache Bytes
\Memory\Cache Bytes Peak
\Memory\System Cache Resident Bytes
\Memory\Standby Cache Reserve Bytes
\Memory\Standby Cache Normal Priority Bytes
\Memory\Standby Cache Core Bytes
\Memory\Long-Term Average Standby Cache Lifetime (s)
Get-Counter
使用
ListSet
参数指定
内存
计数器集。 命令括在括号中,以便
Paths
属性以字符串的形式返回每个路径。 对象在管道中向下发送到
Where-Object
。
Where-Object
使用 变量
$_
处理每个 对象,并使用
-like
运算符查找字符串
*Cache*
的匹配项。 ) (
*
星号是任何字符的通配符。
示例 9:使用 PathsWithInstances 属性获取格式化的路径名称
此示例获取包含
PhysicalDisk
性能计数器实例的格式化路径名称。
(Get-Counter -ListSet PhysicalDisk).PathsWithInstances
\PhysicalDisk(0 C:)\Current Disk Queue Length
\PhysicalDisk(_Total)\Current Disk Queue Length
\PhysicalDisk(0 C:)\% Disk Time
\PhysicalDisk(_Total)\% Disk Time
\PhysicalDisk(0 C:)\Avg. Disk Queue Length
\PhysicalDisk(_Total)\Avg. Disk Queue Length
\PhysicalDisk(0 C:)\% Disk Read Time
\PhysicalDisk(_Total)\% Disk Read Time
Get-Counter
使用
ListSet
参数指定
PhysicalDisk
计数器集。 命令括在括号中,以便
PathsWithInstances
属性以字符串的形式返回每个路径实例。
示例 10:获取计数器集中每个计数器的单个值
在此示例中,为本地计算机的
内存
计数器集中的每个性能计数器返回一个值。
$MemCounters = (Get-Counter -ListSet Memory).Paths
Get-Counter -Counter $MemCounters
Timestamp CounterSamples
--------- --------------
6/19/2019 12:05:00 \\Computer01\memory\page faults/sec :
868.772077545597
\\Computer01\memory\available bytes :
9031176192
\\Computer01\memory\committed bytes :
8242982912
\\Computer01\memory\commit limit :
19603333120
Get-Counter
使用
ListSet
参数指定
内存
计数器集。 命令括在括号中,以便
Paths
属性以字符串的形式返回每个路径。 路径存储在 变量中
$MemCounters
。
Get-Counter
使用
Counter
参数指定变量中的
$MemCounters
计数器路径。
示例 11:显示对象的属性值
PerformanceCounterSample
对象中的属性值表示每个数据示例。 在此示例中,我们使用
CounterSamples
对象的属性来检查、选择、排序和分组数据。
$Counter = "\\Server01\Process(Idle)\% Processor Time"
$Data = Get-Counter $Counter
$Data.CounterSamples | Format-List -Property *
Path : \\Server01\process(idle)\% processor time
InstanceName : idle
CookedValue : 198.467899571389
RawValue : 14329160321003
SecondValue : 128606459528326201
MultipleCount : 1
CounterType : Timer100Ns
Timestamp : 6/19/2019 12:20:49
Timestamp100NSec : 128606207528320000
Status : 0
DefaultScale : 0
TimeBase : 10000000
计数器路径存储在 变量中
$Counter
。
Get-Counter
获取计数器值的一个样本,并将结果存储在 变量中
$Data
。 变量
$Data
使用
CounterSamples
属性获取对象的属性。 对象在管道中向下发送到
Format-List
。
Property
参数使用星号 (
*
) 通配符来选择所有属性。
示例 12:性能计数器数组值
在此示例中,变量存储每个性能计数器。
CounterSamples
属性是可以显示特定计数器值的数组。
若要显示每个计数器样本,请使用
$Counter.CounterSamples
。
$Counter = Get-Counter -Counter "\Processor(*)\% Processor Time"
$Counter.CounterSamples[0]
Path InstanceName CookedValue
---- ------------ -----------
\\Computer01\processor(0)\% processor time 0 1.33997091699662
Get-Counter
使用
Counter
参数指定计数器
\Processor(*)\% Processor Time
。 值存储在 变量中
$Counter
。
$Counter.CounterSamples[0]
显示第一个计数器值的数组值。
示例 13:比较性能计数器值
此示例查找本地计算机上每个处理器使用的处理器时间量。
CounterSamples
属性用于将计数器数据与指定值进行比较。
若要显示每个计数器示例,请使用
$Counter.CounterSamples
。
$Counter = Get-Counter -Counter "\Processor(*)\% Processor Time"
$Counter.CounterSamples | Where-Object { $_.CookedValue -lt "20" }
Path InstanceName CookedValue
---- ------------ -----------
\\Computer01\processor(0)\% processor time 0 12.6398025240208
\\Computer01\processor(1)\% processor time 1 15.7598095767344
Get-Counter
使用
Counter
参数指定计数器
\Processor(*)\% Processor Time
。 值存储在 变量中
$Counter
。 存储在 中的
$Counter.CounterSamples
对象会向下发送管道。
Where-Object
使用脚本块将每个对象值与指定的 值
20
进行比较。
$_.CookedValue
是管道中当前对象的变量。 将显示
CookedValue
小于 20 的计数器。
示例 14:对性能计数器数据进行排序
此示例演示如何对性能计数器数据进行排序。 该示例查找在示例中使用最多处理器时间的计算机上的进程。
$Procs = Get-Counter -Counter "\Process(*)\% Processor Time"
$Procs.CounterSamples | Sort-Object -Property CookedValue -Descending |
Format-Table -Property Path, InstanceName, CookedValue -AutoSize
Path InstanceName CookedValue
---- ------------ -----------
\\Computer01\process(_total)\% processor time _total 395.464129650573
\\Computer01\process(idle)\% processor time idle 389.356575524695
\\Computer01\process(mssense)\% processor time mssense 3.05377706293879
\\Computer01\process(csrss#1)\% processor time csrss 1.52688853146939
\\Computer01\process(microsoftedgecp#10)\% processor time microsoftedgecp 1.52688853146939
\\Computer01\process(runtimebroker#5)\% processor time runtimebroker 0
\\Computer01\process(settingsynchost)\% processor time settingsynchost 0
\\Computer01\process(microsoftedgecp#16)\% processor time microsoftedgecp 0
Get-Counter
使用
Counter
参数为本地计算机上的所有进程指定
\Process(*)\% Processor Time
计数器。 结果存储在
$Procs
变量中。
$Procs
具有
CounterSamples
属性的变量将
PerformanceCounterSample
对象发送到管道。
Sort-Object
使用
Property
参数按
CookedValue
按
降序
对对象进行排序。
Format-Table
使用
Property
参数为输出选择列。
AutoSize
参数调整列宽以最大程度地减少截断。
-ComputerName
指定一个计算机名称或以逗号分隔的
远程
计算机名称数组。 使用 NetBIOS 名称、IP 地址或计算机的完全限定域名。
若要从
本地
计算机获取性能计数器数据,请排除
ComputerName
参数。
对于包含
MachineName
列的
ListSet
等输出,点 (
.
) 指示本地计算机。
Get-Counter
不依赖于 PowerShell 远程处理。 即使计算机未配置为运行远程命令,也可以使用
ComputerName
参数。
Type:
String
[
]
Aliases:Cn
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
-Continuous
指定
连续
时,获取样本,
Get-Counter
直到按
Ctrl
+
C
。 每秒为每个指定的性能计数器获取一次样本。 使用
SampleInterval
参数可增加连续样本之间的间隔。
Type:
SwitchParameter
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
-Counter
指定一个或多个计数器路径的路径。 路径以逗号分隔的数组、变量或文本文件中的值的形式输入。 可以将计数器路径字符串沿着管道
Get-Counter
发送到 。
计数器路径使用以下语法:
\\ComputerName\CounterSet(Instance)\CounterName
\CounterSet(Instance)\CounterName
\\Server01\Processor(*)\% User Time
\Processor(*)\% User Time
\\ComputerName
在性能计数器路径中,是可选的。 如果计数器路径不包含计算机名称,
Get-Counter
请使用本地计算机。
实例中的星号 (
*
) 是用于获取计数器的所有实例的通配符。
Type:
String
[
]
Position:0
Default value:None
Accept pipeline input:True
Accept wildcard characters:True
-ListSet
列出计算机上的性能计数器集。 使用星号 (
*
) 指定所有计数器集。 输入一个名称或以逗号分隔的计数器集名称字符串。 可以在管道中向下发送计数器集名称。
若要获取计数器集格式化的计数器路径,请使用
ListSet
参数。 每个计数器集的
Paths
和
PathsWithInstances
属性包含格式化为字符串的单个计数器路径。
可以将计数器路径字符串保存在变量中,或使用管道将字符串发送到另一个
Get-Counter
命令。
例如,将每个
处理器
计数器路径发送到
Get-Counter
:
Get-Counter -ListSet Processor | Get-Counter
在 PowerShell 7 中,
Get-Counter
无法检索计数器集的
Description
属性。 “
说明”
设置为
$null
。
指定要从每个指定的性能计数器获取的样本数。 若要获取样本的恒定流,请使用
Continuous
参数。
如果未指定
MaxSamples
参数,
Get-Counter
则为每个指定的计数器仅获取一个样本。
若要收集大型数据集,请作为 PowerShell 后台作业运行
Get-Counter
。 有关详细信息,请参阅
about_Jobs
。
Type:
Int64
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
-SampleInterval
指定每个指定性能计数器的样本之间的秒数。 如果未指定
SampleInterval
参数,
Get-Counter
请使用一秒的间隔。
Type:
Int32
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
String
[
]
Get-Counter
接受计数器路径和计数器集名称的管道输入。
CounterSet
使用
ListSet
参数,此 cmdlet 返回
CounterSet
对象。
PerformanceCounterSampleSet
默认情况下,使用
Counter
参数,此 cmdlet 返回
PerformanceCounterSampleSet
对象。
如果未指定任何参数,
Get-Counter
则为每个指定的性能计数器获取一个示例。 使用
MaxSamples
和
Continuous
参数获取更多示例。
Get-Counter
在样本之间使用 1 秒间隔。 使用
SampleInterval
参数增加间隔。
MaxSamples
和
SampleInterval
值适用于命令中每台计算机上的所有计数器。 若要为不同的计数器设置不同的值,请输入单独的
Get-Counter
命令。
在 PowerShell 7 中,使用
ListSet
参数时,
Get-Counter
无法检索计数器集的
Description
属性。 “
说明”
设置为
$null
。
about_Automatic_Variables
about_Jobs
Format-List
Format-Table
Get-Member
Receive-Job
Start-Job
Where-Object