【问题标题】:Why doesn't -whatif parameter get passed to pipeline为什么 -whatif 参数不传递给管道
【发布时间】:2021-10-22 13:02:19
【问题描述】:

在 Powershell 脚本中使用公共参数 -Whatif,例如:

Remove-Item -Path "$now\$basename" -Recurse -Whatif -Force |
    Write-Entry -Line $(get-linenumber) -level 'Info' | 
    Create-Log -title "$title.log" -display

即使我可以清楚地看到屏幕上的文本,日志文件也是空白的。我想将 -Whatif 字符串传递给文本文件。我知道这与重定向有关,但据我所知。

【问题讨论】:

    标签: powershell logging


    【解决方案1】:

    -Whatif 处理的输出绕过标准流进行输出,直接进入控制台。 This TechNet question about accessing the -WhatIf output from C# 解释。

    【讨论】:

    • 有没有办法捕捉屏幕上显示的输出。
    • @extraordinare - 仅当您重写控制台处理程序时,将其视为“不是真的”。
    • 有趣的是,虽然您无法重定向此输出,但它Start-Transcript 捕获。我不确定这个 cmdlet 如何促进日志记录,但似乎必须有 some 方法来直接抓取控制台输出。
    • @BendertheGreatest - 如果 Start-TranscriptStop-Transcript 实际上替换了控制台处理程序(或使用 [最可能未记录的] 挂钩)以便能够将输出捕获到控制台(或尚未实现重定向的 [notional] 流)。
    • 这可能是我要看看核心源来弄清楚的东西;我现在很感兴趣。我想知道我不熟悉的.NET 中是否有一个 Logger 类,而不是刮控制台输出。这可以制定这样的记录器,.NET 自己记录活动,而 cmdlet 只是触发该过程。
    猜你喜欢
    • 2019-05-24
    • 2021-08-23
    • 1970-01-01
    • 2012-05-24
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    相关资源
    最近更新 更多