By default, any named function that has the [CmdletBinding()] attribute accepts the -debug and -verbose (and a few others) parameters and has the predefined $debug and $verbose variables. I’m trying to figure out how to pass them on to other cmdlet’s that get called within the function.
Let’s say I have a cmdlet like this:
function DoStuff() {
[CmdletBinding()]
PROCESS {
new-item Test -type Directory
}
}
If -debug or -verbose was passed into my function, I want to pass that flag into the new-item cmdlet. What’s the right pattern for doing this?
Perhaps it sounds strange, but there isn’t any easy way for a cmdlet to know its verbose or debug mode. Take a look at the related question:
How does a cmdlet know when it really should call WriteVerbose()?
One not perfect, but practically reasonable, option is to introduce your own cmdlet parameters (for example,
$MyVerboseand$MyDebug) and use them in the code explicitly:UPDATE
When we need only a switch (not, say, a verbosity level value) then the approach with
$PSBoundParametersis perhaps better than proposed in the first part of this answer (with extra parameters):It’s all not perfect anyway. If there are better solutions then I would really like to know them myself.