我还在学习powershell的开始。我的目标是有一个脚本来提取一天前的 SCOM 警报,将警报的 netbios 计算机名称与我将导入的 CSV 中的值进行比较。
如果 CSV 中的 ServerName 与 NetbiosName 匹配,则它将管理员名称添加到我创建的原始数组/表中。目前它可以满足我的所有要求,但是当我让它输出最终数据时,它只会将最后一个使用的管理员添加到 Admin 列,而不是适当的管理员。
Netbios计算机名称:服务器
监控对象显示名称:Server.Domain
姓名:呸呸呸呸
严重性:警告
分辨率状态:0
重复次数:0
服务器管理员:管理员
Netbios计算机名称:服务器
监控对象显示名称: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
}