Пакетное обновление агентов Zabbix
На днях релизнулся 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
This work is licensed under a Attribution Non-commercial No Derivatives Creative Commons license
Comments :
Отправить комментарий