Powershell ForEach-Object:无法绑定参数

时间:2014-03-25 14:23:47

标签: powershell

我正在尝试获取流程的所有者,代码:

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

这在win8下工作得很好但在win7中我得到了这个消息:

ForEach-Object : Cannot bind parameter 'Process'. Cannot convert the "user" val
ue of type "System.String" to type "System.Management.Automation.ScriptBlock".
At 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], Parameter 
   BindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerSh 
   ell.Commands.ForEachObjectCommand

请帮忙!谢谢你的时间。

4 个答案:

答案 0 :(得分:1)

而不是foreach-object user,请使用select -expand user。这相当于做foreach-object { $_.user },这可能是你的意思。语法灵活性的改进允许您首次尝试更高版本的PowerShell。

答案 1 :(得分:0)

旧版Powershell无法使用简化语法。这应该适用于任何一个:

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我遇到了类似的问题但在我的情况下,我的脚本中有一个不可打印的字符出现在其中一个之后。 ASCII码03.我发现通过在二进制编辑器(Textpad8)中打开脚本。我删除了这个字符,它解决了我的问题。