Por favor, modifique o iterador do usuário e experimente os itens 7 e 8:
(Get-WmiObject -class win32_process |
where{$_.ProcessName -eq 'explorer.exe'}).getowner() |
Foreach-Object {$_.user } | out-string
Estou tentando obter o proprietário de um processo usando este código:
(Get-WmiObject -class win32_process | where{$_.ProcessName -eq 'explorer.exe'}).getowner() | Foreach-Object user | out-string
Isso funciona muito bem no Windows 8, mas no Windows 7 recebo esta mensagem:
ForEach-Object : Cannot bind parameter 'Process'. Cannot convert the "user" value of type "System.String" to type "System.Management.Automation.ScriptBlock". At C:\Program Files (x86)\Advanced Monitoring Agent GP\scripts60.ps1:1 char: 108 + (Get-WmiObject -class win32_process | where{$_.ProcessName -eq 'explorer.exe' }).getowner() | Foreach-Object <<<< user | out-string + CategoryInfo : InvalidArgument: (:) [ForEach-Object], Parameter BindingException + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.ForEachObjectCommand
Por favor, modifique o iterador do usuário e experimente os itens 7 e 8:
(Get-WmiObject -class win32_process |
where{$_.ProcessName -eq 'explorer.exe'}).getowner() |
Foreach-Object {$_.user } | out-string
Você pode fazer isso com quebras de linha:
gwmi win32_process | where ProcessName -Match "explorer" | foreach {$_.GetOwner().User | Out-String}
Ou sem
gwmi win32_process | where ProcessName -Match "explorer" | foreach {$_.GetOwner().User}
Lembre-se de incluir seu script 'foreach' dentro de {}
's.
Por questão de integridade, eu digo que isso foi feito com o Powershell 3.0, portanto, não há {}
para o cmdlet where-object
e não $_
para a propriedade ProcessName.
Tags powershell