我试图理解为什么,当我调用上面的函数时,我正在读取输出的每第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,但我有一个神秘的(对我来说)0D0A换行符,每80个字符串标准输出我使用:
var Stdout = new List<string>;
...
Stdout.Add(process.StandardOutput.ReadToEnd());
一旦我将标准输出存储在字符串var中,这对我的XML工作造成了严重破坏。我期望得到我在ps1脚本中写入stdout的内容,而不是额外的换行符。
我错过了什么?我已经找到了这个问题的其他人,但我还没有找到答案。希望不是我受到搜索挑战。
答案 0 :(得分:1)
按照this P / Invoke方法,将dwXCountChars
设置为一个非常大的值。不要忘记在标志中加入STARTF_USECOUNTCHARS
。
答案 1 :(得分:1)
现在的最终和经过测试的解决方案(因为我需要提供一些东西),是PowerShell的输出来自Write-Host cmdlet而不是Write-Output。获得标准输出的过程与我原来的帖子一样。希望这有助于其他人。感谢所有的投入。