使用新数据填充现有数组/表

时间:2013-03-13 18:16:08

标签: arrays powershell foreach

我还在学习powershell的开始。我的目标是使用一个脚本来提取一天前的SCOM警报,比较警报和#39; netbios计算机名称为我将导入的CSV中的值。

如果CSV中的ServerName与NetbiosName匹配,则将管理员名称添加到我创建的原始阵列/表中。目前它完成了我所要求的一切,但是当我输出最终数据时,它只有最后一个管理员用于添加到Admin列而不是相应的管理员。

  

NetbiosComputerName:服务器

     

MonitoringObjectDisplayName:Server.Domain

     

姓名:Blah Blah Blah

     

严重性:警告

     

ResolutionState:0

     

RepeatCount:0

     

服务器管理员:管理员

     
     

NetbiosComputerName:服务器

     

MonitoringObjectDisplayName:Server.Domain

     

姓名:Blah Blah Blah

     

严重性:警告

     

ResolutionState:0

     

RepeatCount:0

     

服务器管理员:管理员

在第二个输出上,管理员应该反映该特定服务器的管理员而不是相同的管理员。

这是我的代码。

     # Load SCOM snap-in
add-pssnapin "Microsoft.EnterpriseManagement.OperationsManager.Client";
$server = "RMSSERVER"

# Connect to OpsMgr SDK - change management server to your RMS
new-managementGroupConnection -ConnectionString:RMSSERVER.domain;
set-location "OperationsManagerMonitoring::";

$Date = (Get-Date).adddays(-1)

$ScomAlert = get-alert | where {($_.ResolutionState -eq 0) -and ($_.TimeRaised -gt $Date)  } | Select NetbiosComputerName,MonitoringObjectDisplayName, Name,Severity, ResolutionState, RepeatCount
$Administrators = Import-CSV "C:\Script\SCOM\admin.csv"
$TableSC = $ScomAlert



ForEach ($Alert in $ScomAlert)
{
    $NetBios       = "$($Alert.NetBiosComputerName)"
    $MonObjectName = "$($Alert.MonitoringObjectDisplayName)"
    $AlertName     = "$($Alert.Name)"
    $Severity      = "$($Alert.Severity)"
    $ResState      = "$($Alert.ResolutionState)"
    $RepCount      = "$($Alert.RepeatCount)"


        ForEach ( $Admin in $Administrators ) 
       {
            $ServerName  = "$($Admin.ServerName)"
            $ServerAdmin = "$($Admin.AdminName)"

            if($ServerName -eq $NetBios)
            {
               $ServerAdministrator = $ServerAdmin    

            } 

       }

     $TableSC | Add-Member -MemberType NoteProperty -Name "Server Adminstrator" -Value $ServerAdministrator -Force


}

1 个答案:

答案 0 :(得分:0)

$TableSC | Add-Member -MemberType NoteProperty -Name "Server Adminstrator" ...

上述代替使用给定值替换集合Server Administrator所有项中的属性$TableSC

如果您希望使用相应的管理员更新每个项目,您需要这样的内容(未经测试):

$Administrators = @{}
Import-Csv "C:\Script\SCOM\admin.csv" | % {
  $Administrators[$_.ServerName] = $_.AdminName
}

$TableSC = $ScomAlert | select NetBiosComputerName,
  MonitoringObjectDisplayName, Name, Severity, ResolutionState, RepeatCount,
  @{n="Server Administrator";e={$Administrators[$_.NetBiosComputerName]}}