Get-ChildItem -Filter数组

时间:2012-10-12 12:17:59

标签: powershell filter

情况:

  1. Get-ChildItem $Path -Filter *.dll适合我

  2. 这有效:

    $Path = "$env:windir\system32\*"
    $GuyArray = @("*.dll", "*.exe")
    
    Get-ChildItem $Path -Include $GuyArray
    
  3. 但我无法做到这一点:

    $Path = "$env:windir\system32\*"
    $GuyArray = @("*.dll", "*.exe")
    
    Get-ChildItem $Path -Filter $GuyArray
    
  4. 错误讯息:

      

    无法将'System.Object []'转换为参数'Filter'所需的'System.String'类型。不支持指定的方法。

    问题:

    1. 这是否意味着-Include支持多个值,但-Filter只允许一个值?
    2. 如果上述解释是正确的,有没有办法从Get-Help gci发现这个?

3 个答案:

答案 0 :(得分:3)

  

这是否意味着-Include支持多个值,但-Filter只允许一个值?

  

如果上述解释是正确的,有没有办法从Get-Help gci发现这个?

是的,但是Get-Help gci -Parameter Filter没有获得太多信息。但你仍然可以看到它是一个字符串,而不是一个数组。至于细节,Filter是特定于提供者的过滤器。 Get-Help gci无法告诉您有关特定提供程序中的实现的任何信息。理论上,Get-Help FileSystem(关于此提供者的帮助)应该已经解释了这一点。

P.S。另请注意,此过滤器使用的是CMD通配符规则,而不是PowerShell威尔卡规则。

答案 1 :(得分:1)

使用Get-Help

> get-help Get-ChildItem

NAME
    Get-ChildItem

SYNTAX
    Get-ChildItem [[-Path] <string[]>] [[-Filter] <string>] [-Exclude <string[]>] [-Force] [-Include <string[]>] [-Name] [-Recurse] [-UseTransaction] [<CommonParameters>]

SYNTAX部分包含参数类型,您可以从中看到Filter是一个字符串,Path是一个数组。

答案 2 :(得分:1)

问题1:

是。 -Filter仅接受[string]作为输入。 -Include接受[String[]]

问题2:

Get-help get-childitem -parameter filter给出了

-Filter <string>
...explanation...

Get-help get-childitem -parameter include给出了

-Include <string[]>
...explanation...