Назад | Перейти на главную страницу

Пользовательское оповещение в SCCM 2012 R2

Можно ли создать настраиваемое оповещение в SCCM 2012 R2. Я хочу, чтобы SCCM предупреждал меня, когда на компьютерах в определенной группе остается меньше определенного процента доступного места на жестком диске. Я знаю, что по умолчанию для этого есть отчет, но я не могу понять, как заставить SCCM предупреждать меня о проблеме. Любая помощь будет оценена.

Такого рода задачи чаще выполняются с помощью SCOM (а не SCCM). Я не думаю, что вы можете получить официальное предупреждение SCCM в консоли monitorign, но я могу придумать 2 способа сделать это с помощью SCCM.

Сначала нужно создать запрос для устройств, соответствующих критериям. Уведомление не будет отправлено, вам придется время от времени просматривать элементы запроса. Если у вас есть отчеты о свободном пространстве, вы, вероятно, уже сделали это, но для других читателей вам также необходимо включить сбор данных Client Settings / Hardware Inventory для свойства Freespace из Win32_LogicalDisk (см. Экран). Установите для запроса значение, ограниченное рассматриваемой группой / коллекцией. Выбор запроса будет следующим:

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

Второй способ может быть реализован через Pacakge, где вы создаете программу, которая является сценарием 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 "who@where.com" -from "who@where.com" -smtpserver "mail.where.com" -body ($diskC | converto-html | out-string) -bodyashtml
}   

С такими большими дисками проценты иногда не являются идеальными триггерами, вы также можете запускать с таким абсолютным размером, как этот.

if ($ diskC.gbFree -lt 1) {

Хорошо, ребята, я понял это. Я скопировал сообщение @ 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 "some@domain.here" -from "another@domain.here" -smtpserver "some.mail.server" -body ($DataSet.Tables[0] + "" + "Enter some line of text here." |  out-string)