2009-12-07 51 views
7

參數我期待創建可以切換在cmdletGet-ChildItem遞歸的能力的功能。獲取-ChildItem遞歸在PowerShell中

作爲一個非常簡單的例子:

... 

param 
( 
    [string] $sourceDirectory = ".", 
    [string] $fileTypeFilter = "*.log", 
    [boolean] $recurse = $true 
) 

Get-ChildItem $sourceDirectory -recurse -filter $fileTypeFilter | 

... 

一個人如何有條件地添加-recurse標誌給Get-ChildItem,而不必訴諸於一些if/else語句?

我想也許人們可以剛剛替補在Get-ChildItem聲明-recurse$recurseText參數(設置爲「-recurse」如果$遞歸是真實的),但似乎並沒有工作。

回答

10

幾件事情在這裏。首先,你不想使用[boolean]作爲遞歸參數的類型。這要求您爲腳本的Recurse參數傳遞參數,例如-Recurse $true。你想要的是一個[開關]參數,如下所示。此外,當您切換值轉發到對-Recurse參數的Get-ChildItem使用:,如下圖所示:

param (
    [string] $sourceDirectory = ".", 
    [string] $fileTypeFilter = "*.log", 
    [switch] $recurse 
) 

get-childitem $sourceDirectory -recurse:$recurse -filter $fileTypeFilter | ... 
+0

太好了,謝謝!這似乎工作! – Sean 2009-12-07 20:40:23

+1

謝謝Keith,我在這裏學到了一些東西:) – 2009-12-07 20:40:47

2

我問前similar question ...我接受的答案基本上是在PowerShell中的V1,剛好路過命名參數通過像:

get-childitem $sourceDirectory -recurse:$recurse -filter ... 
+0

不幸的是,這似乎並沒有在第一版的工作,它似乎把它作爲一個參數。 得到-childitem -recurse $真 獲取-ChildItem:找不到路徑 'C:\ SRC \真',因爲它不存在。 – Sean 2009-12-07 20:28:50

+0

對不起;使用:將兩者結合在一起。 – 2009-12-07 20:30:03

0

這裏的類型參數的一個很好的列表,你可以使用:

param(
    [string] $optionalparam1, #an optional parameter with no default value 
    [string] $optionalparam2 = "default", #an optional parameter with a default value 
    [string] $requiredparam = $(throw ""requiredparam required."), #throw exception if no value provided 
    [string] $user = $(Read-Host -prompt "User"), #prompt user for value if none provided 
    [switch] $switchparam; #an optional "switch parameter" (ie, a flag) 
    ) 

here

3

PowerShell的V1方式來處理,這是使用在其他的答案中描述的方法(-recurse:$遞歸),但在V2有一個叫做splatting,可以使EAS新機制更傾向於將參數從一個函數傳遞給另一個函數。

潑灑將允許您通過一本字典或參數列表,一個PowerShell功能。這是一個簡單的例子。

$Parameters = @{ 
    Path=$home 
    Recurse=$true 
} 
Get-ChildItem @Parameters 

內的各功能或腳本,你可以用$psBoundParameters獲得當前綁定的參數。通過添加或刪除項目$psBoundParameters,很容易把你的當前功能並調用一些功能參數的cmdlet的。

我希望這會有所幫助。