Как записать в поток отладки с помощью PowerShell Core, чтобы он перехватывался SysInternals DBGVIEW.EXE - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть множество сценариев, использующих API OutputDebugString Windows для вывода значимой информации о состоянии, так что, когда они работают в Production, я могу открыть средство просмотра отладки SysInternals и посмотреть, что все происходит.

Когда выйдет PowerShell Core 7, я бы хотел переместить свои сценарии, чтобы воспользоваться новыми функциями. Я ожидал, что этот код Windows -specifi c будет работать, пока я запускаю Pw sh .exe на Windows, но я ошибался.

Write-Debug не помогает вообще.

Существует ли кроссплатформенный поддерживаемый способ вывода сообщений, которые на Windows могут быть прочитаны Debug Viewer?

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
}

1 Ответ

0 голосов
/ 05 марта 2020

ОК, так что это было невероятно просто. Мне никогда не приходило в голову, что pw sh .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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...