【问题标题】:Populate existing array/table with new data用新数据填充现有数组/表
【发布时间】:2013-03-13 18:16:08
【问题描述】:

我还处于学习 powershell 的初期。我的目标是有一个脚本来提取一天前的 SCOM 警报,将警报的 netbios 计算机名称与我将导入的 CSV 中的值进行比较。

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

NetbiosComputerName : 服务器

MonitoringObjectDisplayName : Server.Domain

姓名:呸呸呸

严重性:警告

分辨率状态:0

重复次数:0

服务器管理员:管理员


NetbiosComputerName : 服务器

MonitoringObjectDisplayName : Server.Domain

姓名:呸呸呸

严重性:警告

分辨率状态:0

重复次数: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
  
    
}

【问题讨论】:

    标签: arrays powershell foreach


    【解决方案1】:
    $TableSC | Add-Member -MemberType NoteProperty -Name "Server Adminstrator" ...
    

    以上行将集合$TableSC所有 项中的属性Server Administrator 替换为给定值。

    如果您希望通过相应的管理员更新每个项目,您需要这样的东西(未经测试):

    $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]}}
    

    【讨论】:

    • 谢谢你,这绝对是我想要和寻找的。也比我努力的方向简单得多。
    猜你喜欢
    • 2012-04-11
    • 1970-01-01
    • 2011-09-19
    • 2011-02-02
    • 2015-05-23
    • 2015-02-08
    • 2014-07-19
    • 1970-01-01
    • 2017-09-23
    相关资源
    最近更新 更多