2

我试图理解为什么当我调用上述函数时,我正在阅读的输出中每第 80 列得到十六进制 0D0A。

为了简洁起见,我有一个 powershell 脚本,用于测试其中有两行:

$xmlSpew = "<IISAppPoolConfig><DefaultWebSite><ApplicationPoolName>DefaultAppPool</ApplicationPoolName></DefaultWebSite><AuthN>Basic</AuthN></IISAppPoolConfig>"
Write-Output $xmlSpew

我正在使用带有 ProcessStartInfo 的 Process 对象调用脚本,如下所示:

var psi = new ProcessStartInfo
{
    WorkingDirectory = Path.GetDirectoryName(FileToRun),
    FileName = FileToRun,
    Arguments = Arguments,
    UseShellExecute = false,
    CreateNoWindow = true,
    RedirectStandardError = true,
    RedirectStandardOutput = true,
};

var process = new Process
{
    StartInfo = psi,
    EnableRaisingEvents = true,
};

FileToRun 值为:

C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe

参数值为:

-File "C:\Program Files\MyTest\MyProgInputs\read.d\IISAppPoolConfig.ps1"

脚本运行良好,我返回退出代码 0,但我在标准输出中每隔 80 个字符就有一个神秘的(对我而言)0D0A 换行符,我使用以下方法捕获:

var Stdout = new List<string>;

...

Stdout.Add(process.StandardOutput.ReadToEnd());

一旦我将标准输出存储在字符串 var 中,这将对我的 XML 工作造成严重破坏。我希望得到我在 ps1 脚本中写入标准输出的确切内容,而不是额外的换行符。

我错过了什么?我已经寻找其他有这个问题的人,但我没有找到答案。希望不是我受到搜索挑战。

4

2 回答 2

1

目前最终和经过测试的解决方案(因为我需要发布一些东西)是让 powershell 的输出来自 Write-Host cmdlet 而不是 Write-Output。获取标准输出的过程和我原来的帖子一样。希望这对其他人有帮助。感谢所有输入。

于 2012-07-03T18:23:57.567 回答
1

遵循P/Invoke 方法并设置dwXCountChars为非常大的值。不要忘记也包括STARTF_USECOUNTCHARS在标志中。

于 2012-07-03T07:55:14.820 回答