0

我有现有的 PowerShell 脚本(不是我写的!),它旨在使用传入的参数(SCOM 警报 ID)然后在警报中设置其他信息,例如 $alert.CustomField1 = $alert.PrincipleName 等。

我希望向此脚本添加功能,以便能够添加存储在单独的文本/CSV 文件中的其他“自定义”信息。文本/CSV 文件有标题行

ServerName,ServiceOwner,Application Tier

所以文件中的一行将是

MYSERVER.CONTOSO.COM,Joe Bloggs, Tier 1

我们环境中的每台服务器都有一个唯一的行(超过 600 行)。

所以我需要做的是使用传入的警报 ID。我可以使用$alert.PrincipleName在文本文件中找到相应的行,并提取存储在字段 2 和 3 中的附加详细信息,即ServiceOwnerApplicationTier.

此逻辑适用于大多数警报,但如果服务器名称是特定值(例如),那么我需要匹配另一个警报属性,MYSTSERVER.CONTOSO.COM而不是使用匹配文本文件中的服务器名称。但是,此字段中的服务器名称是格式中较大字符串的一部分,例如- 所以我需要从字符串的方括号之间提取服务器名称,然后执行与文本文件的匹配。$alert.PrincipleName$alert.MonitoringObjectDisplayNameUser Services Watcher for Pool [MYTARGETSERVER.CONTOSO.COM]

希望我已经清楚地解释了我正在尝试做的事情 - 如果没有,我很乐意提供进一步的说明,并且如果有任何帮助,我还可以发布我正在尝试修改的现有 PS 脚本。

4

1 回答 1

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'
...
于 2013-07-10T09:35:24.880 回答