【问题标题】:PowerShell Out-FilePowerShell 输出文件
【发布时间】:2020-01-15 11:33:58
【问题描述】:

我对 PowerShell 脚本相当陌生。我创建了一个非常简单的脚本,它通过管道传输几个命令并在屏幕上以不同的颜色显示不同的结果。 我想获取屏幕上的数据并将其全部放入一个 txt 文件中,最终我将用于 Zabbix 警报。

脚本执行并创建 txt 文件,但 txt 文件为空。 任何帮助都会很棒!

代码:

Get-MailboxServer | Get-MailboxDatabaseCopyStatus | ForEach {
    if ($_.Status.ToString() -notmatch "Mounted" -or $_.ContentIndexState.ToString() -notmatch "Healthy") {
        Write-Host "$($_.Name) - $($_.Status) - $($_.ContentIndexState) - OK" -ForegroundColor Green
    } else {
        Write-Host "$($_.Name) - $($_.Status) - $($_.ContentIndexState) - FAILED" -ForegroundColor Red
    }     
} | Set-Content | Out-File c:\scripts\exchangedb.log

【问题讨论】:

  • Write-Host 只输出到屏幕,它不存储任何要通过管道传输到 txt 文件的数据。
  • 另外,Set-Content | Out-File 没有意义。使用其中之一。

标签: powershell if-statement foreach


【解决方案1】:

一般规则是write-host,仅写入主机(PowerShell 控制台),不能发送到任何其他输出! 如果您想创建一个输出并将其存储到一个文件中,您可以使用write-output cmdlet ...选项一。 或选项 2:使用两个操作:1. 写入主机,然后 2. 输出到文件..

另外一个提示,在这种情况下不需要使用匹配。 如果您正在寻找平等,您可以尝试使用-eq(等于)或-ne(不等于)。注意:那些运算符不懂通配符! 如果您想使用通配符,那么您可以检查:-like-notlike。 最后,还有-match-notmatch,它们也可以理解正则表达式。 这没有错,但有点开销。

您可以在此处查看更多关于比较运算符的信息: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_comparison_operators?view=powershell-6

由于您是 PowerShell 新手,还请检查 PowerShell(或在线)中的任何 about_ 部分。在 PowerShell 控制台中运行:get-help about_,您将看到大量概念性主题列表,这些主题非常好,并附有很好的示例。同样可以在网上找到。 注意:您可能需要先运行 update-help 才能获取完整列表(大约 140 多个主题)。

顺便提一下:您的脚本逻辑对于新手来说看起来相当不错,所以请继续努力! ;)

希望对您有所帮助!

最好的问候, 伊万

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-22
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多