如何使用PowerShell Core编写调试流,使其'由SysInternal DBGVIEW.EXE捕获



我有很多脚本使用OutputDebugStringWindows API输出有意义的状态信息,这样当它们在生产中运行时,我可以调出SysInternal调试查看器,查看发生了什么。

当PowerShell Core 7发布时,我想转移我的脚本,这样我就可以利用新功能了。我原以为只要我在Windows上运行Pwsh.exe,这个特定于Windows的代码就可以工作,但我错了。

写调试根本没有帮助。

是否有一种跨平台支持的方式来输出在Windows上可以由调试查看器读取的消息?

FWIW,这是我使用了很长时间的代码:

$VB = @"
'http://www.pinvoke.net/default.asp
Public Class WinAPI
<System.Runtime.InteropServices.DllImport("kernel32.dll")> _
Public Shared Sub OutputDebugString(ByVal lpOutputString As String)
End Sub
End Class
"@
Add-Type $VB -Language Visualbasic
function Write-DebugMessage([string]$Message)
{
$Msg = "[$Script:ScriptHelperAppName] $Message"
[WinAPI]::OutputDebugString($Msg)
Write-Verbose $Msg
}

好吧,所以这非常简单。我从未想过pwsh.exe能够编译一种.Net语言,但不能编译另一种。

我刚刚将.Net代码转换为C#,它运行得很好。

$WinAPI = @"
public class WinAPI
{
[System.Runtime.InteropServices.DllImport("kernel32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern void OutputDebugString(string message);
}
"@
Add-Type $WinAPI -Language CSharp
[WinAPI]::OutputDebugString("C# Test")

内置方式:

[System.Diagnostics.Debug]::WriteLine('hello')

最新更新