Я пытаюсь получить владельца процесса с помощью этого кода:
(Get-WmiObject -class win32_process | where{$_.ProcessName -eq 'explorer.exe'}).getowner() | Foreach-Object user | out-string
Это отлично работает под Windows 8, но в Windows 7 я получаю следующее сообщение:
ForEach-Object: невозможно привязать параметр «Процесс». Невозможно преобразовать значение «пользовательское» типа «System.String» в тип «System.Management.Automation.ScriptBlock». В C: \ Program Files (x86) \ Advanced Monitoring Agent GP \ scripts \ 9660.ps1: 1 символ: 108 + (Get-WmiObject -class win32_process | где {$ _. ProcessName -eq 'explorer.exe'}). getowner () | Foreach-Object <<<< пользователь | out-string + CategoryInfo: InvalidArgument: (:) [ForEach-Object], Parameter BindingException + FullyQualifiedErrorId: CannotConvertArgumentNoMessage, Microsoft.PowerShell.Commands.ForEachObjectCommand
Измените пользовательский итератор и попробуйте как 7, так и 8:
(Get-WmiObject -class win32_process |
where{$_.ProcessName -eq 'explorer.exe'}).getowner() |
Foreach-Object {$_.user } | out-string
Вы можете сделать это с помощью разрывов строк:
gwmi win32_process | where ProcessName -Match "explorer" | foreach {$_.GetOwner().User | Out-String}
Или без
gwmi win32_process | where ProcessName -Match "explorer" | foreach {$_.GetOwner().User}
Не забудьте обернуть свой скрипт foreach внутрь {}
с.
Для полноты картины я скажу, что это было сделано с помощью Powershell 3.0, поэтому нет {}
для where-object
командлет, а нет $_
для свойства ProcessName.