如何使powershell cmdlet静音?

如何使powershell cmdlet静音?,powershell,Powershell,我正在编写一个脚本,它(必要时)必须调用一组非常嘈杂的其他cmdlet。我希望不显示来自其他cmdlet的打印,以便只看到来自我自己脚本的状态消息 我尝试了$null和| Out null,但它们只接受返回值,而不是通过写入主机打印的文本。如何隐藏/防止“向下”打印文本?在调用嘈杂的cmdlet之前,请尝试定义虚拟函数Write Host,例如 function Write-Host {} 如果他们按字面意思调用Write-Host,这应该会有所帮助。如果我正确阅读了您的帖子,您希望使

我正在编写一个脚本,它(必要时)必须调用一组非常嘈杂的其他cmdlet。我希望不显示来自其他cmdlet的打印,以便只看到来自我自己脚本的状态消息


我尝试了
$null
| Out null
,但它们只接受返回值,而不是通过
写入主机打印的文本。如何隐藏/防止“向下”打印文本?

在调用嘈杂的cmdlet之前,请尝试定义虚拟函数
Write Host
,例如

    function Write-Host {}

如果他们按字面意思调用
Write-Host
,这应该会有所帮助。

如果我正确阅读了您的帖子,您希望使Write-Host cmdlet静音。如果我们考虑命令优先级,我们知道函数将在CMDLET之前运行,如果它们具有相同的名称。因此,我建议您创建一个不写任何东西的写主机函数。这里有一个例子强调了这种可能性


避免
写主机
很难,但您可以通过将这些cmdlet作为作业运行来做到这一点。作业将是一个单独的主机进程,因此没有输出<代码>$Job=Start Job-Scriptblock{noised Cmdlet};等待作业$Job
&{Make Noise}*>$null
写入主机
输出无法重定向,除非生成它的代码在另一个进程中运行(以便Windows将控制台输出合并回该进程的STDOUT)。这将有效地使所有输出静音,对吗?我自己的脚本仍然打印我想看的东西。我怎样才能解决这个问题?是否可以为当前写入主机设置一个新名称,然后用dud覆盖它?您应该尝试避免写入主机。使用Write-Output-InputObject处理您不想静音的内容。要么这样,要么这样使用写主机(根据我的判断),以便查看:Microsoft.PowerShell.Utility\Write Host-Object。命令优先级不会删除原始写入主机cmdlet。它只是运行相同名称的函数,而不是cmdlet。如果您添加模块名和反斜杠,您仍然可以使用它,正如我在上面演示的那样。酷,我喜欢这种方法。它对控制台的某些写入起作用,但其他写入似乎来自cmdlet中DLL中的
console.WriteLine()
s。我能做些什么呢?好的,我刚刚发现了
System.Console.SetOut()
,它解决了这个问题。谢谢有什么方法可以在以后“取消定义”我自己的吗?
删除项目功能:Write Host