[英]Get-ChildItem recurse as a parameter in PowerShell
我期待創建一個函數,可以切換cmdlet Get-ChildItem中遞歸的能力。
作為一個非常基本的例子:
...
param
(
[string] $sourceDirectory = ".",
[string] $fileTypeFilter = "*.log",
[boolean] $recurse = $true
)
Get-ChildItem $sourceDirectory -recurse -filter $fileTypeFilter |
...
如何有條件地將-recurse
標志添加到Get-ChildItem而不必求助於某些if / else語句?
我想也許有可能只是替代-recurse
在Get-ChildItem聲明以$recurseText
參數(設置為“-recurse”如果$遞歸是真實的),但似乎並沒有工作。
這里有幾件事。 首先,您不希望將[boolean]用於recurse參數的類型。 這要求您在腳本上傳遞Recurse參數的參數,例如-Recurse $true
。 你想要的是[switch]參數,如下所示。 此外,當您將開關值轉發到Get-ChildItem上的-Recurse參數時,請使用:
如下所示:
param (
[string] $sourceDirectory = ".",
[string] $fileTypeFilter = "*.log",
[switch] $recurse
)
get-childitem $sourceDirectory -recurse:$recurse -filter $fileTypeFilter | ...
PowerShell V1的方法是使用其他答案中描述的方法(-recurse:$ recurse),但在V2中有一種稱為splatting的新機制,可以更容易地將參數從一個函數傳遞到另一個函數。
Splatting允許您將字典或參數列表傳遞給PowerShell函數。 這是一個簡單的例子。
$Parameters = @{
Path=$home
Recurse=$true
}
Get-ChildItem @Parameters
在每個函數或腳本中,您可以使用$psBoundParameters
來獲取當前綁定的參數。 通過向$psBoundParameters
添加或刪除項目,可以輕松獲取當前函數並使用某些函數參數調用cmdlet。
我希望這有幫助。
之前我問了一個類似的問題 ...我接受的答案基本上是在PowerShell的v1中,只是將命名參數傳遞給:
get-childitem $sourceDirectory -recurse:$recurse -filter ...
以下是您可以使用的參數類型的良好列表:
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)
)
從這里開始
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.