【问题标题】:Change write-host output color based on foreach if elseif outcome in Powershell如果 Powershell 中的 elseif 结果,则根据 foreach 更改写入主机输出颜色
【发布时间】:2011-02-12 11:26:15
【问题描述】:

我正在尝试根据 Powershell 中 SQL Server 作业的 lastrunoutcome 属性更改写入主机输出的颜色...如...如果作业成功,lastrunoutcome 的输出为“成功”绿色....如果失败,则“失败”为红色。我的脚本正在工作以获得所需的工作状态...我只是不知道如何更改颜色。

这是我目前所拥有的:

# Check for failed SQL jobs on multiple servers

[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null

foreach ($svr in get-content "C:\serverlist2.txt")

{
   $a = get-date
   $BegDate = (Get-Date $a.AddDays(-1) -f d) + " 12:00:00 AM"
   $BegDateTrans = [system.datetime]$BegDate

   write-host $svr

   $srv=New-Object "Microsoft.SqlServer.Management.Smo.Server" "$svr"

   $srv.jobserver.jobs | where-object {$_.lastrundate -ge $BegDateTrans -and $_.Name -notlike "????????-????-????-????-????????????"} | format-table name,lastrunoutcome,lastrundate -autosize
foreach ($_.lastrunoutcome in $srv.jobserver.jobs)
{
   if ($_.lastrunoutcome = 0)
      {
      -forgroundcolor red
      }
   else
   {}
   }
}

这似乎是我得到的最接近的...但它给了我一个错误““LastRunOutcome”是一个只读属性。”

任何帮助将不胜感激!

谢谢!

情绪

【问题讨论】:

    标签: sql-server powershell-2.0 foreach


    【解决方案1】:
    if ($_.lastrunoutcome = 0)
    

    看起来是个错误;它应该使用“-eq”运算符,而不是“=”。那就是:

    if ($_.lastrunoutcome -eq 0)
    

    【讨论】:

    • 如果我将代码从“=”更改为“-eq”,我只会收到错误消息“'-forgroundcolor' 一词未被识别为 cmdlet、函数、脚本文件的名称,或可运行的程序。”
    • 我知道 -eq 是一个比较参数,在这里不起作用
    • 嗯...哎呀...我不知道..忽略我的最后两个 cmets LOL!
    【解决方案2】:

    “Splat”参数允许您将参数名称-值对的散列传递给函数或 cmdlet。这个哈希可以增量构造...

    $extraArgs = @{}
    if ($thingsFailed) {
      $extraArgs["foregroundColor"] = "Red"
    }
    
    write-host "Message" @extraArgs
    

    如果哈希为空,则不会添加任何内容,但如果设置了$thingsFailed,则输出将为红色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-01
      • 1970-01-01
      • 2021-03-07
      • 2020-08-23
      • 2018-09-02
      • 1970-01-01
      相关资源
      最近更新 更多