在Powershell中基于foreach if elseif结果更改写主机输出颜色

时间:2010-04-26 15:49:54

标签: sql-server powershell-v2.0 foreach

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

这是我到目前为止所拥有的:

# 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“是一个ReadOnly属性。”

非常感谢任何帮助!

谢谢!

情绪

2 个答案:

答案 0 :(得分:1)

“Splat”参数允许您将参数名称 - 值对的哈希值传递给函数或cmdlet。这个哈希可以逐步构建......

$extraArgs = @{}
if ($thingsFailed) {
  $extraArgs["foregroundColor"] = "Red"
}

write-host "Message" @extraArgs

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

答案 1 :(得分:1)

if ($_.lastrunoutcome = 0)

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

if ($_.lastrunoutcome -eq 0)