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

Pla*_*fan 8 powershell logging redirect scheduled-tasks

我有一个由任务调度程序调用的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 | 的Out-Default

请注意,需要将outout out to Out-Default以避免由于可执行文件的输出尝试写入与powershell脚本相同的流而没有PowerShell知道它而发生的另一个PowerShell错误(Write-Host:The OS句柄的位置不是FileStream所期望的.不要在一个FileStream和Win32代码或另一个FileStream中同时使用句柄.这可能会导致数据丢失.)

所以在这种情况下,Write-Host行输出的字符串不会被包装,但是,ReportRunner.exe生成的任何输出都被包装为80个字符,只有在使用任务调度程序运行时才会出现!如果您更改重定向发生的点,即如果您在定义中重定向任务(任务的命令行而不是脚本内),则会发生相同的行为

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

谢谢.

ber*_*d_k 3

你试过了吗

| Out-File C:\Log\output.log -width 120 # or whatever size  you need
Run Code Online (Sandbox Code Playgroud)