在Powershell中不写入命令宽度的Write-Verbose输出

use*_*384 6 powershell logging word-wrap

我想要Write-Verbose一个out文件的很多数据.这就是我在做的方式.

Start-Transcript -Path $TargetDir\RunUnitTests.log -Width 1000000
Write-Verbose "five million character lines and stuff"
Run Code Online (Sandbox Code Playgroud)

这很好用,除了输出自动换行到控制台的标准宽度,这使得日志看起来非常糟糕.

我找到了一个解决方案,这里删除死链接 ,但它是如此复杂和复杂,我不想把它放在我的脚本下面的评论#Thar be dragons.

有一个更好的方法吗?

Rom*_*min 5

这是一个非常简单的解决方法,基于Write-Host此没有这样的问题.在会话开始时安装/ dot-source替换默认值Write-Verbose:

function global:Write-Verbose
(
    [string]
    $Message
)
{
    # check $VerbosePreference variable
    if ($VerbosePreference -ne 'SilentlyContinue') {
        # do this via Write-Host
        Write-Host "VERBOSE: $Message" -ForegroundColor 'Yellow'
    }
}
Run Code Online (Sandbox Code Playgroud)

然后这可以根据需要工作:

$VerbosePreference = 'Continue'
Start-Transcript -Path .\RunUnitTests.log
Write-Verbose ("verbose writes five million character lines and stuff. " * 20)
Run Code Online (Sandbox Code Playgroud)

那就是:它考虑到$VerbosePreference,它以黄色写入主机,转录输出没有被包装,它仍然标记为VERBOSE.

**********************
Windows PowerShell Transcript Start
Start time: 20101105055855
**********************
Transcript started, output file is .\RunUnitTests.log
VERBOSE: verbose writes ... <long line text> ... and stuff.
**********************
Windows PowerShell Transcript End
End time: 20101105055855
**********************
Run Code Online (Sandbox Code Playgroud)

  • 您可能还想装饰参数以支持流水线操作`[Parameter(Position = 0,Mandatory = $ true,ValueFromPipeline = $ true)]` (2认同)