2010-04-26 26 views
2

我試圖根據Powershell中的SQL Server作業的lastrunoutcome屬性更改寫入主機輸出的顏色......如...如果一項工作取得成功,lastrunoutcome的輸出是綠色的「成功」......如果失敗,則「失敗」爲紅色。我的腳本正在努力獲得理想的工作狀態......我只是不知道如何改變顏色。更改寫入主機輸出顏色基於foreach如果elseif如果在PowerShell中的結果

這裏是我到目前爲止:

# 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「是一個只讀屬性的錯誤」

任何幫助將不勝感激!

謝謝!

情緒

回答

1
if ($_.lastrunoutcome = 0) 

看起來像一個錯誤;它應該是「-eq」運算符,而不是「=」。那就是:

if ($_.lastrunoutcome -eq 0) 
+0

如果我將代碼從「=」更改爲「-eq」,我只是得到錯誤「術語'-forgroundcolor'不被識別爲cmdlet,函數,腳本文件的名稱,或可操作的程序。「 – Emo 2010-04-26 18:30:26

+0

我知道-eq是一個比較性的說法,這在這裏不起作用 – Emo 2010-04-26 18:37:28

+0

呃...哎呀......我不知道..還有我最後兩條評論大聲笑! – Emo 2010-04-26 20:44:14

1

「啪」的參數讓你參數名稱 - 值對的哈希值傳遞給一個函數或cmdlet的。該散列可以逐步構建...

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

write-host "Message" @extraArgs 

如果哈希爲空什麼也不會增加,但如果$thingsFailed設置輸出爲紅色。

相關問題