我有一个由任务调度程序调用的powershell脚本。任务的定义还使用>>重定向输出。到日志文件。 PowerShell脚本调用C#控制台程序,该程序生成宽度超过80个字符的输出。但是,日志文件中的结果输出将C#程序的所有输出都包装为80个字符。请注意,只包含C#程序的输出。脚本的所有其他输出(由Write-Host生成)不会被包装。另请注意,此包装仅在任务计划程序运行脚本时发生。
这是脚本调用链:
任务定义调用.cmd脚本(RunWidthTest.cmd)
RunWidthTest.cmd: powershell -File。\ RunReports.ps1>> C:\ LOG \ output.log
RunReports.ps1(摘录):
写主持人“=========================================== =============为$ valueDate“
运行日期文件的报告。\ ReportRunner.exe --ValueDate $ valueDate |出默认
请注意,需要将outout传递给Out-Default以避免由于可执行文件的输出尝试写入与powershell脚本相同的流而没有PowerShell意识到它而发生的另一个PowerShell错误( > Write-Host:操作系统句柄的位置不是FileStream所期望的位置。不要同时使用句柄 在一个FileStream和Win32代码或另一个FileStream中。这可能会导致数据丢失。)
所以在这种情况下,Write-Host行输出的字符串不会被包装,但是,ReportRunner.exe生成的任何输出都被包装为80个字符,只有在使用任务调度程序运行时才会出现!如果更改重定向发生的点,则会发生相同的行为,即,如果您在定义中重定向任务(任务的命令行而不是脚本内部)
有关为何会发生这种情况以及如何覆盖此宽度限制的任何线索。
感谢。
答案 0 :(得分:1)
脚本专家拯救!
链接:How can I expand the width of the Windows PowerShell Console
这对我有用:
# Change the PS host parameters, so that log file width is wider than 80 characters
$PSHost = Get-Host
$PSWindow = $PSHost.UI.RawUI
$PSBuffer = $PSWindow.BufferSize
$PSBuffer.Height = 3000
$PSBuffer.Width = 150
$PSWindow.BufferSize = $PSBuffer
$PSBuffer = $PSWindow.WindowSize
$PSBuffer.Height = 50
$PSBuffer.Width = 150
$PSWindow.WindowSize = $PSBuffer
答案 1 :(得分:0)
我的处境非常相似,其他答案对我都没有用。我能够使其正常工作的唯一方法是使用mode
命令:
mode con cols=120
& C:\path\to\app.exe parameter1 parameter2 | Out-File 'C:\path\to\file.txt' -Encoding Utf8