Назад | Перейти на главную страницу

Powershell ForEach-Object: невозможно привязать параметр

Я пытаюсь получить владельца процесса с помощью этого кода:

(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.