2013-03-13 71 views
0

我仍然在學習PowerShell的開始。我的目標是製作一個腳本,用於提取一天前的SCOM警報,並將警報的netbios計算機名稱與我將導入的CSV中的值進行比較。用新數據填充現有數組/表格

如果CSV中的ServerName與NetbiosName匹配,則會將管理員名稱添加到我創建的原始陣列/表中。目前它可以滿足我所要求的所有內容,但是當它輸出最終數據時,它只會將最後使用的管理員添加到「管理員」列而不是相應的管理員。

NetbiosComputerName:服務器

MonitoringObjectDisplayName:Server.Domain

名稱:等等等等等等

嚴重性:警告

ResolutionState:0

RepeatCount:0

服務器管理員聯繫:聯繫


NetbiosComputerName:服務器

MonitoringObjectDisplayName:Server.Domain

名稱:等等等等等等

嚴重性:警告

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 


} 

回答

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

謝謝你,那絕對是做了什麼,我想和尋找。比我正在努力的更簡單。 – user2166744 2013-03-14 13:39:23