Powershell ForEach-Object:无法绑定参数

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:无法绑定参数“Process”。无法将“System.String”类型的“user”值转换为“System.Management.Automation.ScriptBlock”类型。在 C:\Program Files (x86)\Advanced Monitoring Agent GP\scripts\9660.ps1:1 char: 108 + (Get-WmiObject -class win32_process | where{$_.ProcessName -eq 'explorer.exe' }).getowner() | Foreach-Object <<<< user | out-string + CategoryInfo:InvalidArgument: (:) [ForEach-Object],参数 BindingException + FullyQualifiedErrorId:CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.ForEachObjectCommand

答案1

请修改用户迭代器并在 7 和 8 上尝试:

(Get-WmiObject -class win32_process | 
    where{$_.ProcessName -eq 'explorer.exe'}).getowner() | 
    Foreach-Object {$_.user } | out-string 

答案2

您可以使用换行符来做到这一点:

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 完成的,因此没有{}cmdlet where-object,也没有$_ProcessName 属性。

相关内容