我有和现有的PowerShell脚本(不是由我编写的!),它旨在使用传入的参数(SCOM警报ID),然后在警报中设置其他信息,例如: $ alert.CustomField1 = $ alert.PrincipleName等等。
我希望为此脚本添加功能,以便能够添加存储在单独的文本/ CSV文件中的其他“自定义”信息。 text / CSV文件有标题行
ServerName,ServiceOwner,Application Tier
所以文件中的一行是
MYSERVER.CONTOSO.COM,Joe Bloggs, Tier 1
我们的环境中每个服务器都有一个唯一的行(超过600行)。
所以我需要做的是使用传入的警报ID。我可以使用$alert.PrincipleName
查找文本文件中的相应行,并提取存储在字段2和3中的其他详细信息,即ServiceOwner
和ApplicationTier
。
此逻辑适用于大多数警报,但IF服务器名称是特定值(例如MYSTSERVER.CONTOSO.COM
),然后我不需要使用$alert.PrincipleName
来匹配文本文件中的servername,而是需要匹配另一个警报财产$alert.MonitoringObjectDisplayName
。但是,此字段中的服务器名称是格式中较大字符串的一部分,例如, User Services Watcher for Pool [MYTARGETSERVER.CONTOSO.COM]
- 所以我需要从字符串的方括号中提取severname,然后再与文本文件进行匹配。
希望我已经解释了我想要做的事情 - 如果不是我很乐意提供进一步的澄清,也可以发布现有的PS脚本我试图修改,如果这有任何帮助。
答案 0 :(得分: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'
...