Доберитесь-ChildItem рекурсивно вызывают в качестве параметра в PowerShell

Я нахожу, что использование команда define_method динамично генерирует методы, чтобы быть довольно интересным и не также известный. Например:

((0..9).each do |n|
    define_method "press_#{n}" do
      @number = @number.to_i * 10 + n
    end
  end

вышеупомянутый код использует команду 'define_method' для динамичного создания методов "press1" через "press9". Скорее затем вводя все 10 методов, которые по существу содержат тот же код, определить команда метода используется для генерации этих методов на лету по мере необходимости.

8
задан Peter Mortensen 10 December 2014 в 18:48
поделиться

4 ответа

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

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

get-childitem $sourceDirectory -recurse:$recurse -filter $fileTypeFilter | ...
13
ответ дан 5 December 2019 в 08:52
поделиться

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

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

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

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

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

но в V2 есть новый механизм, называемый splatting , который может упростить передачу аргументов от одной функции к другой.

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

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

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

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

но в версии 2 есть новый механизм, называемый splatting , который может упростить передачу аргументов от одной функции к другой.

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

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

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

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

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

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

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

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

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

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

4
ответ дан 5 December 2019 в 08:52
поделиться

Вот хороший список типов параметров, которые вы можете использовать:

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

Из здесь

0
ответ дан 5 December 2019 в 08:52
поделиться

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

get-childitem $sourceDirectory -recurse:$recurse -filter ...
2
ответ дан 5 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: