5

情况:

  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
    

错误信息:

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

问题:

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

3 回答 3

4

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

是的。

如果上述解释是正确的,有没有办法我可以从中发现这一点Get-Help gci

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

PS 另请注意,此过滤器使用 CMD 通配符规则而不是 PowerShell 通配符规则。

于 2012-10-12T12:29:08.610 回答
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一个数组。

于 2012-10-12T12:23:34.383 回答
1

问题一:

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

问题2:

Get-help get-childitem -parameter filter

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

Get-help get-childitem -parameter include

-Include <string[]>
...explanation...
于 2012-10-12T12:24:18.550 回答