2013-07-10 21 views
0

我已經和現有的PowerShell腳本(不是我寫的!),其目的是使用傳入的參數(SCOM警報ID)來然後在警報中設置其他信息,例如$ alert.CustomField1 = $ alert.PrincipleName等等需要一個PowerShell腳本使用參數來操作/從另一個CSV文件中的字段讀取

我正在尋找添加功能,這個腳本能夠添加額外的'自定義'信息存儲在一個單獨的文本/ CSV文件。文本/ CSV文件的標題行

ServerName,ServiceOwner,Application Tier 

所以文件中的行會

MYSERVER.CONTOSO.COM,Joe Bloggs, Tier 1 

將會有一個唯一的行爲我們的環境(超過600行)每個服務器。

所以我需要的是用做傳入的警示標識。我可以使用$alert.PrincipleName查找文本文件中的相應行和存儲在現場2和3,即ServiceOwnerApplicationTier其他詳細信息的拉動。

,這個道理對廣大警報,但如果服務器名稱爲特定值(例如MYSTSERVER.CONTOSO.COM)然後,而不是使用$alert.PrincipleName以匹配文本文件服務器名稱,我需要匹配的另一個警報財產$alert.MonitoringObjectDisplayName。但是,該字段中的服務器名稱是格式中較大字符串的一部分,例如, User Services Watcher for Pool [MYTARGETSERVER.CONTOSO.COM] - 所以我需要從字符串的方括號中提取severname,然後與文本文件進行匹配。

希望我已經解釋了我想要做清楚 - 如果不是我樂意爲您提供進一步的澄清,也可以張貼現有的PS腳本我試圖修改如果多數民衆贊成任何幫助。

回答

0

您可以在服務器名稱的反應是這樣的:

$csv = Import-Csv 'C:\path\to\your.csv' 
... 
if ($alert.PrincipalName -eq 'MYSTSERVER.CONTOSO.COM') { 
    if ($alert.MonitoringObjectDisplayName -match '.*\[(.*?)\]') { 
    $targetserver = $matches[1] 
    } 
} else { 
    $targetserver = $alert.PrincipalName 
} 

$newdata = $csv | ? { $_.ServerName -eq $targetserver } ` 
       | select ServiceOwner, 'Application Tier' 
... 
$alert.CustomField2 = $newdata.ServiceOwner 
$alert.CustomField3 = $newdata.'Application Tier' 
... 
+0

嗨安斯加爾,剛剛返回從一個短暫的假期,因此後期的答覆工作!感謝上面的代碼片段 - 我遵循它,但有點依賴於服務器名稱在文件中的值分配有點困惑。如果我給powershell,我特別試圖改變,你可能會協助修改它,以提供我所需的功能?希望你可以幫忙 - 下面的PowerShell,我試着添加一些不工作的位 - 我把我的評論作爲##與原始腳本註釋分開。任何幫助非常感謝! – user2567758

+0

實際上不能發佈完整的PowerShell - 它不是很長,但超過了允許的字符。我可以向您發送腳本或其他任何可以在此論壇上發佈的方式嗎? – user2567758

+0

嗨安斯加 - 我不能修剪足夠,所以我已經把整個PowerShell粘貼到Pastebin(不是很大!),如你在這裏建議http://pastebin.com/TmVuBT9x如果你需要我澄清任何事情,請讓我知道我很想讓這個腳本工作。任何幫助表示讚賞! – user2567758

相關問題