2012-10-12 172 views
4

現狀:獲取-ChildItem -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 
    

錯誤消息:

無法將 'System.Object的[]' 的類型 'System.String' 要求參數 '過濾器'。指定的方法不受支持。

問題:

  1. 這是否意味着-Include支持多個值,但-Filter只允許一個值?
  2. 如果上述解釋是正確的,有沒有一種方法我可以從Get-Help gci發現這個?
+3

項目#3應該是'Get-ChildItem $ Path -Filter $ GuyArray'嗎? –

+0

是的,我犯了一個錯誤,#3本來應該是 - 過濾器而不是 - 包括 –

回答

3

這是否意味着-Include支持多個值,但-Filter只允許一個值?

是的。

如果上述解釋是正確的,有沒有一種方法我可以從Get-Help gci發現這個?

是的,但是您沒有通過Get-Help gci -Parameter Filter得到很多信息。但你仍然可以看到它是一個字符串,而不是一個數組。至於細節,Filter是一個供應商特定的過濾器。Get-Help gci無法告訴你任何有關在特定提供商中實施的信息。理論上,Get-Help FileSystem(關於這個提供者的幫助)應該已經解釋了這一點。

P.S.另請注意,此過濾器相比使用CMD通配符規則而不是PowerShell wilcard規則。

+0

的意義接受數組的參數在字串之後是否有方括號? - 包括。而那些只接受字符串有 - 過濾器? –

+0

是的,這是真的。 –

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>] 

語法部分包括的參數類型,從中可以看到,Filter是一個字符串,以及Path陣列。

+0

謝謝,我現在看看要找什麼。 –

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... 
+0

我很欣賞你指出[方括號]在