需要一个powershell脚本来使用参数来操作/读取来自另一个csv文件的字段

时间:2013-07-10 09:09:10

标签: powershell csv

我有和现有的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中的其他详细信息,即ServiceOwnerApplicationTier

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

希望我已经解释了我想要做的事情 - 如果不是我很乐意提供进一步的澄清,也可以发布现有的PS脚本我试图修改,如果这有任何帮助。

1 个答案:

答案 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'
...