I have written a program with C#, that creates a logfile and fills this by using log4net. This program starts powershell-scripts. The scripts use log4net, too. It works:
> C#:
> ps.Runspace.SessionStateProxy.SetVariable("myMethod",(Action<Level,string>)myMethod);
> ps.AddCommand(System.IO.Path.Combine(pathScripts, testSkripte[i].ToString()));
> ps.Invoke();
> Powershell:
> $ScriptLog.Invoke([log4net.Core.Level]::Debug, "TestFile_Debug")
> $ScriptLog.Invoke([log4net.Core.Level]::Warn, "TestFile_Warn") $ScriptLog
> $ScriptLog.Invoke([log4net.Core.Level]::Error, "TestFile_Error")
Now I want add to use the standard Write-Error, Write-Debug, etc. CMDlets in my Script.
(looks like here - answer of Hinek).
Powershell:
Write-Warning "Write-Warning"
AND
Write-Error "Write-Error"
works, but the following doesn´t work:
Write-Debug "Write-Debug" (I don´t get an item in my logfile) OR
Write-Debug "Write-Debug" -debug (for this I get an item in my logfile, but ...)
... I get an error in my logfile, too. The error looks like this:
[2010-10-22 13:10:58,097] DEBUG : Write-Debug
[2010-10-22 13:10:58,113] ERROR : Cannot invoke this function because the current
host does not implement it
(I think to have all namespaces.)
What the error-message means and what can I do again this?
thanks
Here is a workaround solution: override the default command Write-Debug
(which is actually not implemented) with a function:
function global:Write-Debug
(
[string]
$Message,
[switch]
$Debug
)
{
# check both the $Debug switch and the $DebugPreference variable:
if ($Debug -or ($DebugPreference -ne 'SilentlyContinue')) {
# do job; in this demo just write to the console:
[Console]::WriteLine("DEBUG: $Message")
}
}
In C# put this code into a string and invoke it once in the same runspace where the main script will be invoked. This “profile” code installs the global function Write-Debug
which is semantically the same as the original cmdlet. Then, when the main code calls Write-Debug
that function is called, not the default cmdlet.
P.S. I have not tried this way, I prefer to use my own host (see my other answer). But this way should work fine in many cases (not all, perhaps).
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