I am looking to create a function that could toggle the ability to recurse in cmdlet Get-ChildItem.
As a very basic example:
...
param
(
[string] $sourceDirectory = ".",
[string] $fileTypeFilter = "*.log",
[boolean] $recurse = $true
)
Get-ChildItem $sourceDirectory -recurse -filter $fileTypeFilter |
...
How does one conditionally add the -recurse
flag to Get-ChildItem without having to resort to some if/else statement?
I thought perhaps one could just substitute the -recurse
in the Get-ChildItem statement with a $recurseText
parameter (set to "-recurse" if $recurse were true), but that does not seem to work.
A couple of things here. First, you don't want to use [boolean] for the type of the recurse parameter. That requires that you pass an argument for the Recurse parameter on your script e.g. -Recurse $true
. What you want is a [switch] parameter as shown below. Also, when you forward the switch value to the -Recurse parameter on Get-ChildItem use a :
as shown below:
param (
[string] $sourceDirectory = ".",
[string] $fileTypeFilter = "*.log",
[switch] $recurse
)
get-childitem $sourceDirectory -recurse:$recurse -filter $fileTypeFilter | ...
The PowerShell V1 way to approach this is to use the method described in the other answers (-recurse:$recurse), but in V2 there is a new mechanism called splatting that can make it easier to pass the arguments from one function to another.
Splatting will allow you to pass a dictionary or list of arguments to a PowerShell function. Here's a quick example.
$Parameters = @{
Path=$home
Recurse=$true
}
Get-ChildItem @Parameters
Inside of each function or script you can use $psBoundParameters
to get the currently bound parameters. By adding or removing items to $psBoundParameters
, it's easy to take your current function and call a cmdlet with some the functions' arguments.
I hope this helps.
I asked a similar question before... My accepted answer was basically that in v1 of PowerShell, just passing the named parameter through like:
get-childitem $sourceDirectory -recurse:$recurse -filter ...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With