I have a PowerShell script containing the following logging function:
function LogError([string] $message, $exception = $null) {…}
In a try-catch block, when an exception occurs, I call that logging function like this:
catch { LogError("…", $_.Exception) }
In the LogError
function, the second argument is always $null
. Why?
I couldn't find any documentation that would explain why I cannot use $_.Exception
in a function call or that I am supposed to use instead.
Powershell function arguments are not passed using the parenthesis / comma formatting.
That is bad
LogError("…", $_.Exception)
Powershell take that as a single array argument.
This is actually the same as LogError -Message ("...",$_.Exception)
That is ok
LogError '…' $_.Exception
That is best
LogError -message '...' -exception $_.Exception
Complete working example
function LogError([string] $message, $exception = $null) {
Write-Host $message
$exception | Out-String | Write-Host -ForegroundColor red
}
try {
throw 'Noooo !!!!'
}
catch {
LogError -message 'oops' -exception $_.Exception
}