是否可以在 SCCM 2012 R2 中创建自定义警报。我希望 SCCM 在某个组中的计算机可用硬盘空间少于一定百分比时向我发出警报。我知道默认情况下会有一个报告,但我不知道如何让 SCCM 向我发出警报。任何帮助都将不胜感激。
答案1
这类任务更常使用 SCOM(而非 SCCM)来完成。我认为您无法在监控控制台中收到官方 SCCM 警报,但我能想到两种使用 SCCM 的方法。
首先要为符合条件的设备创建查询。不会发送任何警报,您必须时不时地查看查询成员。如果您有可用空间报告,您可能已经这样做了,但对于其他读者,您还需要启用 Win32_LogicalDisk 的 Freespace 属性的客户端设置/硬件清单集合(见屏幕)。将查询设置为受相关组/集合限制。查询选择如下:
select SMS_R_System.Name, SMS_G_System_LOGICAL_DISK.DeviceID, SMS_G_System_LOGICAL_DISK.FreeSpace from SMS_R_System inner join SMS_G_System_LOGICAL_DISK on SMS_G_System_LOGICAL_DISK.ResourceID = SMS_R_System.ResourceId where SMS_G_System_LOGICAL_DISK.DeviceID = "C:" and SMS_G_System_LOGICAL_DISK.FreeSpace < 1024 order by SMS_R_System.Name
第二种方法可以通过一个包来完成,您可以创建一个 Powershell 脚本程序,并将其安排为每 24 小时运行一次。这将发送一封实际的电子邮件。将包部署到相关的组/集合。
$diskC = gwmi win32_logicaldisk | where {$_.deviceid -match 'C'} | select systemname, @{n='gbFree'; e={[int]($_.freespace/1gb)}}, @{n='gbSize'; e={[int]($_.size/1gb)}}, @{n='percentFree'; e={"{0:N2}" -f ($_.freespace/$_.size)}}
if ($diskC.percentfree -lt .10) {
send-mailmessage -subj "Low Disk" -to "[email protected]" -from "[email protected]" -smtpserver "mail.where.com" -body ($diskC | converto-html | out-string) -bodyashtml
}
对于如此大的磁盘,百分比有时并不总是理想的触发器,您也可以像这样用绝对大小来触发
如果 ($diskC.gbFree -lt 1) {
答案2
好的伙计们,我明白了。我借鉴了@Craig620的帖子,只是使用了一个powershell脚本。我更进一步,而不是在所有计算机上运行相同的脚本,而是使用SCCM提取的信息。这是我用来从数据库中提取信息并发送电子邮件的脚本。
$dataSource = “.\”
$user = “someuser”
$pwd = “somepass"
$database = “yourdb"
$connectionString = “Server=$dataSource;uid=$user; pwd=$pwd;Database=$database;Integrated Security=False;”
$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString
$connection.Open()
$query = "SELECT
SYS.Name0,LDISK.DeviceID0,
LDISK.FreeSpace0*100/LDISK.Size0 as [Percentage Free]
FROM v_R_System as SYS
join v_GS_LOGICAL_DISK LDISK on SYS.ResourceID = LDISK.ResourceID
WHERE
LDISK.DriveType0 =3 AND
LDISK.Size0 > 0 AND
Primary_Group_ID0 = someservergroup AND
LDISK.FreeSpace0*100/LDISK.Size0 < 20
ORDER BY SYS.Name0, LDISK.DeviceID0"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $query
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$SqlCmd.Connection = $connection
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$connection.Close()
send-mailmessage -subj "Low Disk Report" -to "[email protected]" -from "[email protected]" -smtpserver "some.mail.server" -body ($DataSet.Tables[0] + "" + "Enter some line of text here." | out-string)