收集系统进程IO详细信息

时间:2020-06-09 00:39:54

标签: powershell system taskmanager

我正在尝试准备一份报告,其中我需要收集系统上运行的所有进程的I / O读,写和其他字节。下面是我当前使用的脚本。

Get-Process|select name,cpu,@{name="WorkingSet";Expression={$_.WorkingSet/1kb}},BasePriority,path|where {$_.Name -in 'dllhost','firefox','dsapi'}

下面是经过一些处理和测量对象后获得的输出。

enter image description here

我面临的问题是,对于大多数系统进程或用户名为 system 的用户,这些值的返回值大多采用的形式。请就如何解决此问题以及获得系统过程的实际价值提供一些指导。

<> 从我阅读的I / O值中,不会从get-process cmdlet中提取值,这就是为什么我使用下面的cmdlet的原因,它对于用户创建的进程运行正常,但是对于系统创建的进程,脚本返回零值显示在上图中。

$gc = get-counter '\Process(dllhost)\IO Read Bytes/sec'
$gc.countersamples | sort cookedvalue

1 个答案:

答案 0 :(得分:0)

确保您以管理员身份运行Powershell。

据我所见,没有ReadByteSec或WriteBytpeSec。 您还将使用不包含这些属性的select语句。

键入此命令以查看dllhost的所有可用属性:

$processes = Get-Process | where {$_.Name -in 'dllhost'}
Get-Member -InputObject $processes[0]

然后将它们添加到您的语句中:

Get-Process |选择名称,cpu,@ {name =“ WorkingSet”;表达式= {$$ em..WorkingSet / 1kb}},BasePriority,路径, * BytesField1,BytesField2等* |其中{$ .Name -in'dllhost','firefox','dsapi'}