Пакетное обновление агентов Zabbix

zabbix_logo1.pngНа днях релизнулся Zabbix 3.0, да к тому же LTS. Обновление серверной части не заняло много времени (да здравствуют репозитарии!), а вот ползать по куче серверов (а их собственно за сотню) для обновления агентов было впадлу. Можно было конечно и забить, но некрасиво как-то. Поэтому на коленке был сварганен следующий скрипт.

Лень было делать параметры, мне проще один комментарий перенести.
Скрипт берёт или список компов из текстового файла (по строке на хостнейм, 13 строка), или просто шерстит АД в поисках серверных виндов (12 строка), и обновляет, если версия младше, чем указана в переменной $zabbix_version (первая строка, обратите внимание на звёздочку).
Лог с результатами кладёт рядом с собой.

Комментировать сий наколеночный скрипт с кучей ифов мне лень, но вроде ничего сложного в нём нет.

$zabbix_version = "3.0.0*"
 
$curDir = $MyInvocation.MyCommand.Definition | split-path -parent
$d=Get-Date -Format "yyyy-MM-dd"
$t=Get-Date -Format "HH:mm"
$LogFile = "$curDir\updatelog_"+$d+".log"
 
$log = "`n" + $d + " " + $t + " Start"
Write-Host $log
Out-File -FilePath $LogFile -Append -Encoding default -InputObject $log
 
Get-ADComputer -Filter {OperatingSystem -Like "Windows Server*"} -Property Name, OperatingSystem  | ForEach {
#Import-CSV "$curDir\computers.csv" -header("Name") | ForEach {
	$ComputerName = $_.Name
	$path = "\\$ComputerName\c$\Program Files\Zabbix"
	Write-host $ComputerName
	if ((Test-Connection $ComputerName -quiet -count 1)) {
		if ((Test-Path $path)) {
		    if ((Get-Service "zabbix agent" -ComputerName $ComputerName)) {
			$installed_zabbix_version = (Get-Item $path\zabbix_agentd.exe).versioninfo.fileversion
				if (($installed_zabbix_version -notlike $zabbix_version)) {
					$bit = (Get-WmiObject Win32_ComputerSystem -computer $ComputerName).systemtype
					if (($bit)) {
 
						Set-Service "zabbix agent" -ComputerName $ComputerName -Status stopped -PassThru
						if ($bit -like '*64*') {
							Copy-Item $curDir\win64\*.exe $path
							$zbit = 64
						}
						else {
							Copy-Item $curDir\win32\*.exe $path
							$zbit = 32
						}
						Set-Service "zabbix agent" -ComputerName $ComputerName -Status running -PassThru
 
		                        	$msg = " - Agent updated, " + $_.OperatingSystem + ", " + $bit + ", " + $zbit
					}
					else { $msg = " - Agent not updated, unknown architecture or RPC is unavailable " + $bit }
			}
			else { $msg = " - already updated " + $installed_zabbix_version}
		    }
		    else { $msg = " - Agent not installed" }
		}
		else { $msg = "- Zabbix folder not exist" }
	}
	else { $msg = " is not available" }
$log = $d + " " + $t + " " + $ComputerName + $msg
Write-Host $log
Out-File -FilePath $LogFile -Append -Encoding default -InputObject $log
}
 
$log = $d + " " + $t + " All done"
Write-Host $log
Out-File -FilePath $LogFile -Append -Encoding default -InputObject $log

5
Средняя: 5 (1 голос)
Ваша оценка: Нет

Comments :

Отправить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
 
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <table> <tr> <td> <img>
  • Строки и параграфы переносятся автоматически.
  • Вы можете использовать подсветку исходного кода следующими тегами: <code>, <blockcode>. Поддерживаемые стили тегов: <foo>, [foo].
  • Поисковые системы будут индексировать и переходить по ссылкам на разрешённые домены.

Подробнее о форматировании