Get-ChildItem作为PowerShell中的参数递归

Sea*_*ean 8 powershell powershell-1.0

我期待创建一个函数,可以切换cmdlet Get-ChildItem中递归的能力.

作为一个非常基本的例子:

...

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

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

...
Run Code Online (Sandbox Code Playgroud)

如何有条件地将-recurse标志添加到Get-ChildItem而不必求助于某些if/else语句?

我想也许可以用-recurseGet $recurseText参数替换Get-ChildItem语句(如果$ recurse为true则设置为"-recurse"),但这似乎不起作用.

Kei*_*ill 13

这里有几件事.首先,您不希望将[boolean]用于recurse参数的类型.这要求您在脚本上传递Recurse参数的参数,例如-Recurse $true.你想要的是[switch]参数,如下所示.此外,当您将开关值转发到Get-ChildItem上的-Recurse参数时,请使用:如下所示的a :

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

get-childitem $sourceDirectory -recurse:$recurse -filter $fileTypeFilter | ...
Run Code Online (Sandbox Code Playgroud)


Sta*_*ing 6

PowerShell V1 解决此问题的方法是使用其他答案中描述的方法 (-recurse:$recurse),但在 V2 中,有一种称为splatting的新机制,可以更轻松地将参数从一个函数传递到另一个函数。

Splatting 允许您将字典或参数列表传递给 PowerShell 函数。这是一个简单的例子。

$Parameters = @{
    Path=$home
    Recurse=$true
}
Get-ChildItem @Parameters
Run Code Online (Sandbox Code Playgroud)

在每个函数或脚本内部,您可以使用它$psBoundParameters来获取当前绑定的参数。通过向 中添加或删除项目$psBoundParameters,可以轻松获取当前函数并使用某些函数的参数调用 cmdlet。

我希望这有帮助。