Как читать PowerShell StdOut - PullRequest
       5

Как читать PowerShell StdOut

0 голосов
/ 24 апреля 2019

У меня есть код для вызова CreateProcess() и получения дескрипторов для StdIn & StdOut. Я использовал его с CMD, и он отлично работает. Тем не менее, я запустил PowerShell с ним и PowerShell не играл приятно. Это в основном эксплуатировал мою программу и взял на себя ответственность.

Это привело меня к отладке, и я обнаружил, что, как только ReadFile() Функция читает вывод PowerShells, все кончено. Интересно.

Итак, мой вопрос: в каком формате PowerShell отправляет вывод в StdOut?

Я слышал, что он говорит в «Объектах», но, похоже, выводит необработанный машинный код.

DWORD WINAPI threadRead(HANDLE *cmdStd_OUT_RD) {
    char *chBuff = malloc(READ_BUFFER_SM);
    int check = 0;
    for (;;) {
        dwRead = 0;  //Global Variable
        check = 0;
        memset(chBuff, 0, READ_BUFFER_SM);
        puts("Reading..\n");
        check = ReadFile(*cmdStd_OUT_RD, chBuff, READ_BUFFER_SM, &dwRead, NULL);
        if (check || dwRead > 0) {
            printf("Display: %s\n", chBuff);
        }
    }
    return 0;
}

Кроме того, существует ли другая функция Read, безопасная для PowerShell?

Редактировать: Я чувствую, что он посылает байты, поэтому может попробовать использовать void. Будет обновлять после.

Редактировать: Нет, это все еще вступает во владение. Думаю, ReadFile() не может прочитать его StdOut.

1 Ответ

1 голос
/ 24 апреля 2019

Попробуйте прочитать это: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_redirection?view=powershell-6?

И попробуйте это:

$OutputVariable = (Shell command) | Out-String

или

"$params = "/verify $pc /domain:hosp.uhhg.org"
start-process "netdom.exe" $params -WindowStyle Hidden -Wait"
...