获取流程和流程所有者

时间:2017-01-31 15:02:49

标签: powershell

我正在尝试对脚本进行排序,该脚本将检索进程的所有实例以及进程的各个所有者。

我有一个脚本来获取进程名称和开始时间:

get-process -name notepad | select-object starttime,name

我有一个脚本来获取进程所有者:

$process = (Get-CimInstance Win32_Process -Filter "name = 'notepad.exe'")
$owner = Invoke-CimMethod -InputObject $process -MethodName GetOwner | select user | ft -HideTableHeaders

然而,当我创建一个属性并将它们放在一起时,我得到一个我几乎肯定与格式相关的结果:

$process = (Get-CimInstance Win32_Process -Filter "name = 'notepad.exe'")
$owner = Invoke-CimMethod -InputObject $process -MethodName GetOwner | select user | ft -HideTableHeaders

get-process -name notepad | select-object starttime,name,@{n='Owner';e={$owner}}

结果:

StartTime                                                               Name                                                                   Owner                                                                 
---------                                                               ----                                                                   -----                                                                 
31/01/2017 14:44:57                                                     notepad                                                                {Microsoft.PowerShell.Commands.Internal.Format.FormatStartData, Mic...

从阅读开始,它似乎与$ owner的格式化,但我不能为我的生活弄明白。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

Format-Table将您的对象转换为格式化字符串,这对于显示和输出到文本文件非常有用,会弄乱您想要传递的任何对象。所以要小心任何格式命令。此外,您可能希望展开users属性。

$process = (Get-CimInstance Win32_Process -Filter "name = 'notepad.exe'")
$owner = Invoke-CimMethod -InputObject $process -MethodName GetOwner | select -ExpandProperty user
get-process -name notepad | select-object starttime,name,@{n='Owner';e={$owner}}

答案 1 :(得分:0)

试试这个:

tasklist /v /fi "imagename eq notepad.exe" /fo csv | convertfrom-csv | ogv