我目前正在尝试通过调用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
缓冲区中。
答案 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
文件。