I'm hoping to use the Write-Verbose
commandlet in scripts and functions. It works as expected in script (.ps1) files, but not in module (.psm1) files--the commandlet is ignored in modules.
Running the following script:
PS> .\scaffold.ps1 -verbose
Produces:
VERBOSE: starting foo
path: c:\bar.txt
[missing entry here - 'verbose path: c:\bar.txt']
VERBOSE: ending foo
scaffold.ps1:
[cmdletbinding()]
param()
import-module Common -force
write-verbose "starting foo"
foo "c:\bar.txt"
write-verbose "ending foo"
Common.psm1:
function foo {
[cmdletbinding()]
Param(
[string]$path
)
write-host "path: $path"
write-verbose "verbose path: $path"
}
I haven't associated a manifest (.psd1) with the module (.psm1) at this point.
Is there a module-specific syntax that I need to use?
** edit **
What I need is a way to determine if the -verbose
flag has been set on the .PS1 file so I can pass it to the .PSM1 file.
scaffold.ps1:
[cmdletbinding()]
param()
import-module Common -force
write-verbose "starting foo"
foo "c:\bar.txt" $verbose_flag # pass verbose setting to module based on what was set on the script itself
write-verbose "ending foo"
The Write-Verbose cmdlet writes text to the verbose message stream in PowerShell. Typically, the verbose message stream is used to deliver more in depth information about command processing.
By default, the verbose message stream is not displayed, but you can display it by changing the value of the $VerbosePreference variable or using the Verbose common parameter in any command. Also, Write-Verbose writes to the verbose output stream and you can capture it separately.
A verbose message is a multi-line message that contains additional lines of explanation.
Found the answer here: How to properly use the -verbose and -debug parameters in custom cmdlet
scaffold.ps1:
[cmdletbinding()]
param()
import-module Common -force
write-verbose "starting foo"
foo "c:\bar.txt" -Verbose:($PSBoundParameters['Verbose'] -eq $true)
write-verbose "ending foo"
To get Write-Verbose
output from a cmdlet in a module, you need to use the -verbose
common parameter. See http://technet.microsoft.com/en-us/magazine/ff677563.aspx
Using your code:
>import-module R:\Common.psm1
>foo "c:\users"
path: c:\users
>foo "c:\users" -verbose
path: c:\users
VERBOSE: verbose path: c:\users
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