如何从TaskScheduler运行的脚本重定向Powershell输出,并覆盖默认宽度为80个字符

时间:2010-12-21 12:22:35

标签: logging powershell scheduled-tasks redirect

我有一个由任务调度程序调用的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个字符,只有在使用任务调度程序运行时才会出现!如果更改重定向发生的点,则会发生相同的行为,即,如果您在定义中重定向任务(任务的命令行而不是脚本内部)

有关为何会发生这种情况以及如何覆盖此宽度限制的任何线索。

感谢。

2 个答案:

答案 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