作为Powershell学习的一部分,我试图过滤所有工作区中所有名为“ Create”的方法。
我有一条似乎列出所有方法的命令,但是当我将下面的输出通过管道输送到-Filter
或where
时,我无法在'Create'上进行过滤。
我在这里做什么错了?
Get-WmiObject * -List | Where-Object {$_.methods} | select -ExpandProperty Methods
使用-Filter
PS C:\Windows\system32> Get-WmiObject * -List | Where-Object {$_.methods} | select -ExpandProperty Methods | -Filter
-Filter : The term '-Filter' is not recognized as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:86
+ ... Where-Object {$_.methods} | select -ExpandProperty Methods | -Filter
+ ~~~~~~~
+ CategoryInfo : ObjectNotFound: (-Filter:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
或select where
PS C:\Windows\system32> Get-WmiObject * -List | Where-Object {$_.methods} | select -ExpandProperty Methods | select name
-eq "Create"
Select-Object : A parameter cannot be found that matches parameter name 'eq'.
At line:1 char:98
+ ... _.methods} | select -ExpandProperty Methods | select name -eq "Create ...
+ ~~~
+ CategoryInfo : InvalidArgument: (:) [Select-Object], ParameterBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.SelectObjectCommand
答案 0 :(得分:2)
如果您要列出实际的Create
方法本身 :
Get-WmiObject -List |
Select-Object -ExpandProperty Methods |
Where-Object Name -eq Create
相比之下,如果要列出具有Create
方法的类:
Get-WmiObject -List | Where-Object { $_.Methods.Name -contains 'Create' }
关于您尝试过的事情:
-Filter
是一个参数,但是您尝试将其用作命令。鉴于没有论据,还不清楚您要过滤的什么。
select name -eq "Create"
错误地将Where-Object
语法应用于Select-Object
(select
)cmdlet。
两次尝试:
不需要使用Where-Object {$_.methods}
,因为
Select-Object -ExpandProperty Methods
调用将自动忽略无方法类。
-List
本身就足以列出所有类别。不需要通配符*
。