簡體   English   中英

Get-ChildItem作為PowerShell中的參數遞歸

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM