使用UTF-16编码从管道读取PowerShell输出

时间:2018-07-19 22:08:59

标签: c powershell encoding

我目前正在尝试通过调用CreateProcess()从管道读取PowerShell的输出。

startInfo.cb = sizeof(STARTUPINFOW);
startInfo.hStdError = pipes->hErrWrite;
startInfo.hStdOutput = pipes->hOutWrite;
startInfo.hStdInput = pipes->hInRead;
startInfo.dwFlags = STARTF_USESTDHANDLES

BOOL success = CreateProcessW(
    L"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
    NULL,
    NULL,
    NULL,
    TRUE,
    0,
    NULL,
    NULL,
    &startInfo,
    &procInfo
);

一切正常,但是PowerShell的输出具有不同的编码。
我已经对CMD执行了相同的过程。幸运的是,CMD可以选择使用/U参数启动它,该参数包含了UTF-16中的输出。

PowerShell有什么类似之处吗?最终,我想将powershell的输出存储在wchar_t缓冲区中。

1 个答案:

答案 0 :(得分:1)

不幸的是,PowerShell没有与cmd.exe的{​​{1}}等效。

控制我所知道的输出编码的唯一方法是在PowerShell进程的内部中更改/U,但我并不肯定这种方法在所有情况下都适用:< / p>

这是在生成任何输出之前需要 执行的PowerShell代码(您必须将其作为命令的一部分传递,以通过[console]::OutputEncoding参数执行) :

-Command

下面是[console]::outputencoding=[text.encoding]::unicode 命令行中的示例:

cmd.exe

这将产生一个包含字符串powershell -command "[console]::outputencoding=[text.encoding]::unicode; 'Motörhead'" > out.txt 的UTF16-LE编码的out.txt文件。