Рекурсия Get-ChildItem в качестве параметра в PowerShell

Я ищу, чтобы создать функцию, которая может включать возможность рекурсии в

4 ответов


пара вещей здесь. Во-первых, вы не хотите использовать [boolean] для типа параметра recurse. Это требует, чтобы вы передали аргумент для параметра Recurse в своем скрипте, например -Recurse $true. То, что вы хотите, - это параметр [switch], как показано ниже. Кроме того, при пересылке значения переключателя в параметр-Recurse в Get-ChildItem используйте : как показано ниже:

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

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

способ PowerShell V1 приблизиться к этому-использовать метод, описанный в других ответах (- recurse:$recurse), но в V2 есть новый механизм под названием сплаттинг это может облегчить передачу аргументов из одной функции в другую.

Splatting позволит вам передать словарь или список аргументов функции PowerShell. Вот краткий пример.

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

внутри каждой функции или скрипта вы можете использовать $psBoundParameters получить в настоящее время привязаны параметры. Путем добавления или удаления элементов $psBoundParameters, легко взять текущую функцию и вызвать командлет с аргументами некоторых функций.

надеюсь, это поможет.


попросил аналогичный вопрос раньше... Мой принятый ответ был в основном тем, что в v1 PowerShell, просто передавая именованный параметр через like:

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

С здесь