Windows Server Backup хороша в качестве компонента резервного копирования, встроенного в ОС. Но работу этого компонента неплохо было бы отслеживать.
Я написал небольшой скрипт, позволяющий по крону отслеживать системный журнал и находить записи по работе Windows Server Backup.
Скрипт анализирует системный журнал и фиксирует записи, принадлежащие #Windows Server Backup. Скрипт состоит из файла настроек, к которому можно ограничить доступ, приложения и двух задач.
- Скопировать файлы
app.backup.wsb.mail.ps1
и app.backup.wsb.mail.ini
в директорию C:\Scripts\
. - Импортировать задания
task.backup.wsb.mail.error.xml
и task.backup.wsb.mail.success.xml
в Windows Task Scheduler и откорректировать параметры вызова скрипта. - Изменить параметры скрипта в файле
app.backup.wsb.mail.ini
.
Файл настройки представляет собой простой файл .ini
, содержащий в себе приватные параметры.
1
2
3
4
5
6
| From=mail@domain.com
To=mail@domain.org
Server=192.168.11.22
Port=25
User=smtp_user
Password=smtp_password
|
From
- адрес email, с которого будет отправлено сообщение.To
- адрес email, на который будет отправлено сообщение.Server
- IP-адрес SMTP-сервера.Port
- порт SMTP-сервера.User
- имя пользователя в SMTP-сервере.Password
- пароль пользователя в SMTP-сервере.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
| <#PSScriptInfo
.VERSION 0.1.0
.GUID 18c25998-a474-425e-a59f-e32f79c8431d
.AUTHOR Kai Kimera
.AUTHOREMAIL mail@kai.kim
.COMPANYNAME Library Online
.COPYRIGHT 2024 Library Online. All rights reserved.
.TAGS windows server backup mail
.LICENSEURI https://choosealicense.com/licenses/mit/
.PROJECTURI https://lib.onl/ru/2024/09/40539e36-4656-5532-b920-8975c97d4dc5/
#>
<#
.SYNOPSIS
Script for sending messages about backup status.
.DESCRIPTION
The script sends messages to the specified address for further analysis.
The messages contain the host ID and notification type.
.EXAMPLE
.\app.backup.wsb.mail.ps1 -Type 'error' [-SSL]
.\app.backup.wsb.mail.ps1 -Type 'success' [-SSL]
.LINK
https://lib.onl/ru/2024/09/40539e36-4656-5532-b920-8975c97d4dc5/
#>
# -------------------------------------------------------------------------------------------------------------------- #
# CONFIGURATION
# -------------------------------------------------------------------------------------------------------------------- #
Param(
[Parameter(HelpMessage='Message type.')]
[ValidateSet('error', 'success')]
[string]$Type,
[Parameter(HelpMessage='Enable or disable encrypted connection.')]
[switch]$SSL = $false,
[Alias('Host')][string]$Hostname = ([System.Net.Dns]::GetHostByName([string]'localhost').HostName)
)
# Loading configuration data.
$S = ((Get-Item "${PSCommandPath}").Basename + '.ini')
$P = (Get-Content -Path "${PSScriptRoot}\${S}" | ConvertFrom-StringData)
# Generating HostID (HID).
$UUID = (Get-CimInstance 'Win32_ComputerSystemProduct' | Select-Object -ExpandProperty 'UUID')
$HID = ((${Hostname} + ':' + ${UUID}).ToUpper())
# -------------------------------------------------------------------------------------------------------------------- #
# INITIALIZATION
# -------------------------------------------------------------------------------------------------------------------- #
function Start-Script() {
switch ("${Type}") {
'error' { Send-BackupError }
'success' { Send-BackupSuccess }
default { exit }
}
}
# -------------------------------------------------------------------------------------------------------------------- #
# BACKUP: ERROR
# Sending an email after a failed backup.
# -------------------------------------------------------------------------------------------------------------------- #
function Send-BackupError() {
$Subject = "Windows Server Backup: ${Hostname}"
$Body = @"
Windows Server Backup failed: ${Hostname}.
Please check server backup!
Host: ${Hostname}
Status: ERROR
--
#ID:${HID}
#TYPE:BACKUP:ERROR
"@
Start-Smtp -S "${Subject}" -B "${Body}"
}
# -------------------------------------------------------------------------------------------------------------------- #
# BACKUP: SUCCESS
# Sending an email after a successful backup.
# -------------------------------------------------------------------------------------------------------------------- #
function Send-BackupSuccess() {
$Subject = "Windows Server Backup: ${Hostname}"
$Body = @"
Windows Server Backup completed successfully!
Host: ${Hostname}
Status: SUCCESS
--
#ID:${HID}
#TYPE:BACKUP:SUCCESS
"@
Start-Smtp -S "${Subject}" -B "${Body}"
}
# -------------------------------------------------------------------------------------------------------------------- #
# SMTP
# SMTP configuration.
# -------------------------------------------------------------------------------------------------------------------- #
function Start-Smtp {
Param(
[Alias('S')][string]$Subject,
[Alias('B')][string]$Body
)
$SmtpClient = New-Object Net.Mail.SmtpClient("$($P.Server)", "$($P.Port)")
$SmtpClient.EnableSsl = $SSL
$SmtpClient.Credentials = New-Object System.Net.NetworkCredential("$($P.User)", "$($P.Password)")
$SmtpClient.Send("$($P.From)", "$($P.To)", "${Subject}", "${Body}")
}
# -------------------------------------------------------------------------------------------------------------------- #
# -------------------------------------------------< RUNNING SCRIPT >------------------------------------------------- #
# -------------------------------------------------------------------------------------------------------------------- #
Start-Script
|
Type
- тип сообщения.success
- задание #Windows Server Backup успешно выполнено.error
- задание #Windows Server Backup не выполнено или выполнено с ошибками.
Задачи делятся на два типа: ошибка и успешное выполнение. Каждая из задач будет искать записи #Windows Server Backup в журнале и запускаться в зависимости от идентификатора события (EventID
).
Задача присылает уведомление в том случае, когда в журнале событий появляется запись об ошибке выполнения #Windows Server Backup.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| <?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Description>Notifies backup admin of scheduled backup failure.</Description>
</RegistrationInfo>
<Triggers>
<EventTrigger>
<Enabled>true</Enabled>
<Subscription><QueryList><Query Id="0" Path="Microsoft-Windows-Backup"><Select Path="Microsoft-Windows-Backup">*[System[Provider[@Name='Microsoft-Windows-Backup'] and (EventID=5 or EventID=8 or EventID=9 or (EventID &gt;= 17 and EventID &lt;= 22) or EventID=49 or EventID=50 or EventID=52 or EventID=100 or EventID=517 or EventID=518 or EventID=521 or EventID=527 or EventID=528 or EventID=544 or EventID=545 or EventID=546 or EventID=561 or EventID=564 or EventID=612)]]</Select></Query></QueryList></Subscription>
</EventTrigger>
</Triggers>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
</Settings>
<Actions Context="Author">
<Exec>
<Command>powershell</Command>
<Arguments>"C:\Scripts\app.backup.wsb.mail.ps1" -Type 'error'</Arguments>
</Exec>
</Actions>
</Task>
|
Задача присылает уведомление в том случае, когда в журнале событий появляется запись об успешном выполнении #Windows Server Backup.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| <?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Description>Notifies backup admin of scheduled backup successful completion.</Description>
</RegistrationInfo>
<Triggers>
<EventTrigger>
<Enabled>true</Enabled>
<Subscription><QueryList><Query Id="0" Path="Microsoft-Windows-Backup"><Select Path="Microsoft-Windows-Backup">*[System[Provider[@Name='Microsoft-Windows-Backup'] and (EventID=4)]]</Select></Query></QueryList></Subscription>
</EventTrigger>
</Triggers>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
</Settings>
<Actions Context="Author">
<Exec>
<Command>powershell</Command>
<Arguments>"C:\Scripts\app.backup.wsb.mail.ps1" -Type 'success'</Arguments>
</Exec>
</Actions>
</Task>
|