Files
site-plata-upravleniya-rf/backup/240700/blog/05-zabbix-api/index.html
2024-07-24 17:12:33 +03:00

236 lines
47 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html><html lang="en"> <head><!-- Global Metadata --><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" type="image/svg+xml" href="/favicon/favicon.ico"><meta name="generator" content="Astro v4.7.1"><link rel="preload" href="/fonts/atkinson-regular.woff" as="font" type="font/woff" crossorigin><link rel="preload" href="/fonts/atkinson-bold.woff" as="font" type="font/woff" crossorigin><!-- Canonical URL --><link rel="canonical" href="https://astro-sphere-demo.vercel.app/blog/05-zabbix-api/"><!-- Primary Meta Tags --><title>Групповые политики GPO для Zabbix Agent с использованием магии API | Плата Управления РФ</title><meta name="title" content="Групповые политики GPO для Zabbix Agent с использованием магии API | Плата Управления РФ"><meta name="description" content="Краткое руководство по созданию скрипта для автоматизации добавления новых устройств в доменной сети"><!-- Open Graph / Facebook --><meta property="og:type" content="website"><meta property="og:url" content="https://astro-sphere-demo.vercel.app/blog/05-zabbix-api/"><meta property="og:title" content="Групповые политики GPO для Zabbix Agent с использованием магии API | Плата Управления РФ"><meta property="og:description" content="Краткое руководство по созданию скрипта для автоматизации добавления новых устройств в доменной сети"><meta property="og:image" content="https://astro-sphere-demo.vercel.app/img04.jpg"><!-- Twitter --><meta property="twitter:card" content="summary_large_image"><meta property="twitter:url" content="https://astro-sphere-demo.vercel.app/blog/05-zabbix-api/"><meta property="twitter:title" content="Групповые политики GPO для Zabbix Agent с использованием магии API | Плата Управления РФ"><meta property="twitter:description" content="Краткое руководство по созданию скрипта для автоматизации добавления новых устройств в доменной сети"><meta property="twitter:image" content="https://astro-sphere-demo.vercel.app/img04.jpg"><!-- Sitemap --><link rel="sitemap" href="/sitemap-index.xml"><!-- RSS Feed --><link rel="alternate" type="application/rss+xml" title="Групповые политики GPO для Zabbix Agent с использованием магии API | Плата Управления РФ" href="https://astro-sphere-demo.vercel.app/rss.xml"><!-- Global Scripts --><script src="/js/theme.js"></script><script src="/js/scroll.js"></script><script src="/js/animate.js"></script><!-- <ViewTransitions /> --><link rel="stylesheet" href="/_astro/_slug_.0h5GVtX4.css"><script type="module" src="/_astro/hoisted.BGfjo5mV.js"></script></head> <body> <header id="header" class="fixed top-0 w-full h-16 z-50 " data-astro-cid-3ef6ksr2> <div class="w-full h-full mx-auto px-5 max-w-screen-md"> <div class="relative h-full w-full" data-astro-cid-3ef6ksr2> <div class="absolute left-0 top-1/2 -translate-y-1/2 flex gap-1 font-semibold" data-astro-cid-3ef6ksr2> <a href="/" class="flex gap-1 text-current hover:text-black dark:hover:text-white transition-colors duration-300 ease-in-out" data-astro-cid-3ef6ksr2> <svg class="size-6 fill-current" data-astro-cid-3ef6ksr2> <use href="/static/logo.svg" data-astro-cid-3ef6ksr2></use> </svg> <div data-astro-cid-3ef6ksr2> Плата Управления РФ </div> </a> </div> <div class="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2" data-astro-cid-3ef6ksr2> <nav class="hidden md:flex items-center justify-center text-sm gap-1" data-astro-cid-3ef6ksr2> <a href="/" class="h-8 rounded-full px-3 text-current flex items-center justify-center transition-colors duration-300 ease-in-out hover:bg-black/5 dark:hover:bg-white/20 hover:text-black dark:hover:text-white" data-astro-cid-3ef6ksr2> Главная </a><a href="/work" class="h-8 rounded-full px-3 text-current flex items-center justify-center transition-colors duration-300 ease-in-out hover:bg-black/5 dark:hover:bg-white/20 hover:text-black dark:hover:text-white" data-astro-cid-3ef6ksr2> Работа </a><a href="/blog" class="h-8 rounded-full px-3 flex items-center justify-center transition-colors duration-300 ease-in-out bg-black dark:bg-white text-white dark:text-black" data-astro-cid-3ef6ksr2> Блог </a><a href="/projects" class="h-8 rounded-full px-3 text-current flex items-center justify-center transition-colors duration-300 ease-in-out hover:bg-black/5 dark:hover:bg-white/20 hover:text-black dark:hover:text-white" data-astro-cid-3ef6ksr2> Проекты </a> </nav> </div> <div class="buttons absolute right-0 top-1/2 -translate-y-1/2 flex gap-1" data-astro-cid-3ef6ksr2> <a href="/search" aria-label="Search blog posts and projects on Плата Управления РФ" class="hidden md:flex size-9 rounded-full p-2 items-center justify-center bg-transparent hover:bg-black/5 dark:hover:bg-white/20 stroke-current hover:stroke-black hover:dark:stroke-white border border-black/10 dark:border-white/25 transition-colors duration-300 ease-in-out" data-astro-cid-3ef6ksr2> <svg class="size-full" data-astro-cid-3ef6ksr2> <use href="/ui.svg#search" data-astro-cid-3ef6ksr2></use> </svg> </a> <a href="/rss.xml" target="_blank" aria-label="Rss feed for Плата Управления РФ" class="hidden md:flex size-9 rounded-full p-2 items-center justify-center bg-transparent hover:bg-black/5 dark:hover:bg-white/20 stroke-current hover:stroke-black hover:dark:stroke-white border border-black/10 dark:border-white/25 transition-colors duration-300 ease-in-out" data-astro-cid-3ef6ksr2> <svg class="size-full" data-astro-cid-3ef6ksr2> <use href="/ui.svg#rss" data-astro-cid-3ef6ksr2></use> </svg> </a> <button id="header-theme-button" aria-label="Toggle light and dark theme" class="hidden md:flex size-9 rounded-full p-2 items-center justify-center bg-transparent hover:bg-black/5 dark:hover:bg-white/20 stroke-current hover:stroke-black hover:dark:stroke-white border border-black/10 dark:border-white/25 transition-colors duration-300 ease-in-out" data-astro-cid-3ef6ksr2> <svg class="size-full block dark:hidden" data-astro-cid-3ef6ksr2> <use href="/ui.svg#sun" data-astro-cid-3ef6ksr2></use> </svg> <svg class="size-full hidden dark:block" data-astro-cid-3ef6ksr2> <use href="/ui.svg#moon" data-astro-cid-3ef6ksr2></use> </svg> </button> <button id="header-drawer-button" aria-label="Toggle drawer open and closed" class="flex md:hidden size-9 rounded-full p-2 items-center justify-center bg-transparent hover:bg-black/5 dark:hover:bg-white/20 stroke-current hover:stroke-black hover:dark:stroke-white border border-black/10 dark:border-white/25 transition-colors duration-300 ease-in-out" data-astro-cid-3ef6ksr2> <svg id="drawer-open" class="size-full" data-astro-cid-3ef6ksr2> <use href="/ui.svg#menu" data-astro-cid-3ef6ksr2></use> </svg> <svg id="drawer-close" class="size-full" data-astro-cid-3ef6ksr2> <use href="/ui.svg#x" data-astro-cid-3ef6ksr2></use> </svg> </button> </div> </div> </div> </header> <script>
function toggleDrawer() {
const drawer = document.getElementById("drawer")
const drawerButton = document.getElementById("header-drawer-button")
drawer?.classList.toggle("open")
drawerButton?.classList.toggle("open")
}
function initializeDrawerButton() {
const drawerButton = document.getElementById("header-drawer-button")
drawerButton?.addEventListener("click", toggleDrawer)
}
document.addEventListener("astro:after-swap", initializeDrawerButton)
initializeDrawerButton()
</script> <div id="drawer" class="fixed inset-0 h-0 z-40 overflow-hidden flex flex-col items-center justify-center md:hidden bg-neutral-100 dark:bg-neutral-900 transition-[height] duration-300 ease-in-out" data-astro-cid-hxtyo74s> <nav class="flex flex-col items-center space-y-2" data-astro-cid-hxtyo74s> <a href="/" class="flex items-center justify-center px-3 py-1 rounded-full text-current hover:text-black dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/20 transition-colors duration-300 ease-in-out" data-astro-cid-hxtyo74s> Главная </a><a href="/work" class="flex items-center justify-center px-3 py-1 rounded-full text-current hover:text-black dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/20 transition-colors duration-300 ease-in-out" data-astro-cid-hxtyo74s> Работа </a><a href="/blog" class="flex items-center justify-center px-3 py-1 rounded-full hover:text-black dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/20 transition-colors duration-300 ease-in-out pointer-events-none bg-black dark:bg-white text-white dark:text-black" data-astro-cid-hxtyo74s> Блог </a><a href="/projects" class="flex items-center justify-center px-3 py-1 rounded-full text-current hover:text-black dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/20 transition-colors duration-300 ease-in-out" data-astro-cid-hxtyo74s> Проекты </a> </nav> <div class="flex gap-1 mt-5" data-astro-cid-hxtyo74s> <a href="/search" aria-label="Search blog posts and projects on Плата Управления РФ" class="size-9 rounded-full p-2 items-center justify-center bg-transparent hover:bg-black/5 dark:hover:bg-white/20 stroke-current hover:stroke-black hover:dark:stroke-white border border-black/10 dark:border-white/25 transition-colors duration-300 ease-in-out" data-astro-cid-hxtyo74s> <svg class="size-full" data-astro-cid-hxtyo74s> <use href="/ui.svg#search" data-astro-cid-hxtyo74s></use> </svg> </a> <a href="/rss.xml" target="_blank" aria-label="Rss feed for Плата Управления РФ" class="size-9 rounded-full p-2 items-center justify-center bg-transparent hover:bg-black/5 dark:hover:bg-white/20 stroke-current hover:stroke-black hover:dark:stroke-white border border-black/10 dark:border-white/25 transition-colors duration-300 ease-in-out" data-astro-cid-hxtyo74s> <svg class="size-full" data-astro-cid-hxtyo74s> <use href="/ui.svg#rss" data-astro-cid-hxtyo74s></use> </svg> </a> <button id="drawer-theme-button" aria-label="Toggle light and dark theme" class="size-9 rounded-full p-2 items-center justify-center bg-transparent hover:bg-black/5 dark:hover:bg-white/20 stroke-current hover:stroke-black hover:dark:stroke-white border border-black/10 dark:border-white/25 transition-colors duration-300 ease-in-out" data-astro-cid-hxtyo74s> <svg class="block dark:hidden size-full" data-astro-cid-hxtyo74s> <use href="/ui.svg#sun" data-astro-cid-hxtyo74s></use> </svg> <svg class="hidden dark:block size-full" data-astro-cid-hxtyo74s> <use href="/ui.svg#moon" data-astro-cid-hxtyo74s></use> </svg> </button> </div> </div> <main> <div class="pt-36 pb-5"> <div class="w-full h-full mx-auto px-5 max-w-screen-md"> <div class="animate"> <div> <a href="/blog" class="group w-fit p-1.5 gap-1.5 text-sm flex items-center border rounded hover:bg-black/5 hover:dark:bg-white/10 border-black/15 dark:border-white/20 transition-colors duration-300 ease-in-out"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="stroke-current group-hover:stroke-black group-hover:dark:stroke-white"> <line x1="19" y1="12" x2="5" y2="12" class="scale-x-0 group-hover:scale-x-100 translate-x-3 group-hover:translate-x-0 transition-all duration-300 ease-in-out"></line> <polyline points="12 19 5 12 12 5" class="translate-x-1 group-hover:translate-x-0 transition-all duration-300 ease-in-out"></polyline> </svg> <div class="w-full group-hover:text-black group-hover:dark:text-white transition-colors duration-300 ease-in-out">
Вернуться в blog </div> </a> <div class="flex flex-wrap text-sm uppercase mt-12 gap-3 opacity-75"> <div class="flex items-center gap-2"> <svg class="size-5 stroke-current"> <use href="/ui.svg#calendar"></use> </svg> 12 июн. 2024 г. </div> <div class="flex items-center gap-2"> <svg class="size-5 stroke-current"> <use href="/ui.svg#book-open"></use> </svg> 5 min read </div> </div> <h1 class="text-3xl font-semibold text-black dark:text-white mt-2"> Групповые политики GPO для Zabbix Agent с использованием магии API </h1> <div class="mt-1"> Краткое руководство по созданию скрипта для автоматизации добавления новых устройств в доменной сети </div> </div> </div> </div> </div> <div class="flex-1 py-5"> <div class="w-full h-full mx-auto px-5 max-w-screen-md"> <div class="animate"> <div> <article> <h1 id="пролог">Пролог</h1>
<p>Собирать метрики со всех устройств в сети — это здорово, но не так уж приятно, если у вас уже есть более 10 устройств и вы только решили, что вам нужен мониторинг. А если устройств 100 и больше? Придется много клацать мышкой! Но что мы за админы, если не умеем правильно лениться? Давайте создадим небольшой скрипт, добавим его в GPO, и пусть часть работы за нас выполняет машина.</p>
<h2 id="подготовка">Подготовка</h2>
<ol>
<li>
<p>На сервере Zabbix создаем новую группу, куда будут попадать новые хосты, например <code>NewHosts</code>. Запишите ID группы — он пригодится позже (в URL строке последние цифры и будут ID).</p>
</li>
<li>
<p>Генерируем токен для подключения к Zabbix API. Для этого перейдите в настройки пользователя, пункт API Tokens.</p>
</li>
<li>
<p>Определяем переменные сервера для скрипта:</p>
</li>
</ol>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="ps1"><code><span class="line"><span style="color:#6A737D"># Zabbix server: </span></span>
<span class="line"><span style="color:#E1E4E8">$ZBX_SERVER </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> "192.168.0.2:8080"</span></span>
<span class="line"><span style="color:#E1E4E8">$ZBX_SERVER_INSTALL </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> "192.168.0.2"</span></span>
<span class="line"><span style="color:#E1E4E8">$ZBX_API </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> "http://</span><span style="color:#E1E4E8">$ZBX_SERVER</span><span style="color:#9ECBFF">/api_jsonrpc.php"</span></span>
<span class="line"><span style="color:#E1E4E8">$ZBX_TOKEN </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> "b1c4f904b2b56a342912dd0c44c890cd35dcac1f69e72cb23c765d8feaf85f0a"</span></span>
<span class="line"><span style="color:#E1E4E8">$ZBX_TEMPLATE </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> "Windows by Zabbix agent"</span></span>
<span class="line"><span style="color:#E1E4E8">$ZBX_HOSTGRP </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> "NewHosts"</span></span>
<span class="line"></span></code></pre>
<ul>
<li><code>$ZBX_SERVER</code> — адрес Zabbix-сервера для URL.</li>
<li><code>$ZBX_SERVER_INSTALL</code> — адрес Zabbix-сервера для MSI пакета.</li>
<li><code>$ZBX_API</code> — адрес API Zabbix-сервера.</li>
<li><code>$ZBX_TOKEN</code> — токен API Zabbix, который мы сгенерировали на этапе подготовки.</li>
<li><code>$ZBX_TEMPLATE</code> — шаблон мониторинга из Zabbix.</li>
<li><code>$ZBX_HOSTGRP</code> — группа (NewHosts), которую создали на этапе подготовки.</li>
</ul>
<ol start="4">
<li>Определяем переменные хоста для скрипта:</li>
</ol>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="ps1"><code><span class="line"><span style="color:#6A737D"># Host vars:</span></span>
<span class="line"><span style="color:#E1E4E8">$HOSTIP </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> (</span><span style="color:#79B8FF">Get-NetIPAddress</span><span style="color:#F97583"> -</span><span style="color:#E1E4E8">AddressFamily IPv4 </span><span style="color:#F97583">|</span><span style="color:#79B8FF"> Where-Object</span><span style="color:#E1E4E8"> {</span><span style="color:#79B8FF">$_</span><span style="color:#E1E4E8">.InterfaceAlias </span><span style="color:#F97583">-imatch</span><span style="color:#9ECBFF"> "Ethernet"</span><span style="color:#E1E4E8">}).IPAddress.toString()</span></span>
<span class="line"><span style="color:#E1E4E8">$HOSTDNS </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> ([</span><span style="color:#F97583">System.Net.Dns</span><span style="color:#E1E4E8">]::GetHostByName($</span><span style="color:#79B8FF">env:</span><span style="color:#E1E4E8">computerName).HostName).tolower()</span></span>
<span class="line"><span style="color:#E1E4E8">$HOSTNAME </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> $</span><span style="color:#79B8FF">env:</span><span style="color:#E1E4E8">computerName.ToUpper()</span></span>
<span class="line"><span style="color:#E1E4E8">$AGENT_PORT </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> "10050"</span></span>
<span class="line"></span></code></pre>
<ul>
<li><code>$HOSTIP</code> — IP адрес устройства.</li>
<li><code>$HOSTDNS</code> — DNS имя устройства.</li>
<li><code>$HOSTNAME</code> — имя добавляемого устройства.</li>
<li><code>$AGENT_PORT</code> — порт, на котором слушает Zabbix агент.</li>
</ul>
<p>Я уже прописал скрипт для автоматического заполнения, но вы всегда можете взять отдельные куски кода и запустить их в терминале.</p>
<ol start="5">
<li>Определяем функцию для регистрации нового хоста:</li>
</ol>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="ps1"><code><span class="line"><span style="color:#F97583">function</span><span style="color:#B392F0"> RegisterNewHost</span><span style="color:#E1E4E8">() {</span></span>
<span class="line"><span style="color:#E1E4E8"> $REQ_PARAMS </span><span style="color:#F97583">=</span><span style="color:#F97583"> @</span><span style="color:#E1E4E8">{</span></span>
<span class="line"><span style="color:#E1E4E8"> jsonrpc </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> "2.0"</span></span>
<span class="line"><span style="color:#E1E4E8"> method </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> "host.create"</span></span>
<span class="line"><span style="color:#E1E4E8"> params </span><span style="color:#F97583">=</span><span style="color:#F97583"> @</span><span style="color:#E1E4E8">{</span></span>
<span class="line"><span style="color:#E1E4E8"> host </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> $HOSTNAME</span></span>
<span class="line"><span style="color:#E1E4E8"> interfaces </span><span style="color:#F97583">=</span><span style="color:#F97583"> @</span><span style="color:#E1E4E8">(</span></span>
<span class="line"><span style="color:#F97583"> @</span><span style="color:#E1E4E8">{</span></span>
<span class="line"><span style="color:#E1E4E8"> type </span><span style="color:#F97583">=</span><span style="color:#79B8FF"> 1</span></span>
<span class="line"><span style="color:#E1E4E8"> main </span><span style="color:#F97583">=</span><span style="color:#79B8FF"> 1</span></span>
<span class="line"><span style="color:#E1E4E8"> useip </span><span style="color:#F97583">=</span><span style="color:#79B8FF"> 0</span></span>
<span class="line"><span style="color:#E1E4E8"> ip </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> $HOSTIP</span></span>
<span class="line"><span style="color:#E1E4E8"> dns </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> $HOSTDNS</span></span>
<span class="line"><span style="color:#E1E4E8"> port </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> $AGENT_PORT</span></span>
<span class="line"><span style="color:#E1E4E8"> }</span></span>
<span class="line"><span style="color:#E1E4E8"> )</span></span>
<span class="line"><span style="color:#E1E4E8"> groups </span><span style="color:#F97583">=</span><span style="color:#F97583"> @</span><span style="color:#E1E4E8">(</span></span>
<span class="line"><span style="color:#F97583"> @</span><span style="color:#E1E4E8">{</span></span>
<span class="line"><span style="color:#E1E4E8"> groupid </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> "24"</span></span>
<span class="line"><span style="color:#E1E4E8"> }</span></span>
<span class="line"><span style="color:#E1E4E8"> )</span></span>
<span class="line"><span style="color:#E1E4E8"> templates </span><span style="color:#F97583">=</span><span style="color:#F97583"> @</span><span style="color:#E1E4E8">(</span></span>
<span class="line"><span style="color:#F97583"> @</span><span style="color:#E1E4E8">{</span></span>
<span class="line"><span style="color:#E1E4E8"> templateid </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> "10081"</span></span>
<span class="line"><span style="color:#E1E4E8"> }</span></span>
<span class="line"><span style="color:#E1E4E8"> )</span></span>
<span class="line"><span style="color:#E1E4E8"> }</span></span>
<span class="line"><span style="color:#E1E4E8"> id </span><span style="color:#F97583">=</span><span style="color:#79B8FF"> 1</span></span>
<span class="line"><span style="color:#E1E4E8"> auth </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> $ZBX_TOKEN</span></span>
<span class="line"><span style="color:#E1E4E8"> } </span><span style="color:#F97583">|</span><span style="color:#79B8FF"> ConvertTo-Json</span><span style="color:#F97583"> -</span><span style="color:#E1E4E8">Depth </span><span style="color:#79B8FF">5</span></span>
<span class="line"><span style="color:#E1E4E8"> $uri </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> $ZBX_API</span></span>
<span class="line"><span style="color:#E1E4E8"> $headers </span><span style="color:#F97583">=</span><span style="color:#F97583"> @</span><span style="color:#E1E4E8">{</span></span>
<span class="line"><span style="color:#9ECBFF"> "Content-Type"</span><span style="color:#F97583"> =</span><span style="color:#9ECBFF"> "application/json"</span></span>
<span class="line"><span style="color:#E1E4E8"> }</span></span>
<span class="line"><span style="color:#E1E4E8"> $method </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> "Post"</span></span>
<span class="line"><span style="color:#E1E4E8"> </span></span>
<span class="line"><span style="color:#79B8FF"> Invoke-WebRequest</span><span style="color:#F97583"> -</span><span style="color:#E1E4E8">Uri $uri </span><span style="color:#F97583">-</span><span style="color:#E1E4E8">Headers $headers </span><span style="color:#F97583">-</span><span style="color:#E1E4E8">Method $method </span><span style="color:#F97583">-</span><span style="color:#E1E4E8">Body $REQ_PARAMS</span></span>
<span class="line"><span style="color:#E1E4E8">}</span></span>
<span class="line"></span></code></pre>
<ul>
<li><code>groupid</code> — укажите ID группы, созданной в начале.</li>
<li><code>templateid</code> — укажите шаблон для добавления (по умолчанию 10081 “Windows by Zabbix agent”).</li>
<li><code>useip</code> — значение, определяющее, что будет идентификатором для хоста: =0 — DNS, =1 — IP адрес.</li>
</ul>
<ol start="6">
<li>Функция установки MSI пакета:</li>
</ol>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="ps1"><code><span class="line"><span style="color:#F97583">function</span><span style="color:#B392F0"> InstallZbxAgent</span><span style="color:#E1E4E8">() {</span></span>
<span class="line"><span style="color:#E1E4E8"> msiexec </span><span style="color:#F97583">/</span><span style="color:#E1E4E8">i \\fs1\soft\zabbix_agent2</span><span style="color:#F97583">-</span><span style="color:#E1E4E8">openssl.msi </span><span style="color:#F97583">/</span><span style="color:#E1E4E8">qn SERVER</span><span style="color:#F97583">=</span><span style="color:#E1E4E8">$ZBX_SERVER_INSTALL LISTENPORT</span><span style="color:#F97583">=</span><span style="color:#E1E4E8">$AGENT_PORT HOSTNAME</span><span style="color:#F97583">=</span><span style="color:#E1E4E8">$HOSTNAME</span></span>
<span class="line"><span style="color:#E1E4E8">}</span></span>
<span class="line"></span></code></pre>
<ul>
<li><code>\\fs1\soft\</code> — указываем путь до установочного файла.</li>
</ul>
<p>Основные шаги выполнены. Осталось добавить в скрипт проверку на случай, если Zabbix агент уже установлен, и указать так называемый entry point для скрипта:</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="ps1"><code><span class="line"><span style="color:#F97583">if</span><span style="color:#E1E4E8"> (</span><span style="color:#F97583">!</span><span style="color:#E1E4E8">(</span><span style="color:#79B8FF">Test-Path</span><span style="color:#F97583"> -</span><span style="color:#E1E4E8">Path </span><span style="color:#9ECBFF">"HKLM:\SYSTEM\CurrentControlSet\Services\Zabbix Agent"</span><span style="color:#E1E4E8">) </span><span style="color:#F97583">-and</span><span style="color:#F97583"> !</span><span style="color:#E1E4E8">(</span><span style="color:#79B8FF">Test-Path</span><span style="color:#F97583"> -</span><span style="color:#E1E4E8">Path </span><span style="color:#9ECBFF">"HKLM:\SYSTEM\CurrentControlSet\Services\Zabbix Agent 2"</span><span style="color:#E1E4E8">)) {</span></span>
<span class="line"><span style="color:#E1E4E8"> InstallZbxAgent</span></span>
<span class="line"><span style="color:#E1E4E8"> RegisterNewHost</span></span>
<span class="line"><span style="color:#E1E4E8">}</span></span>
<span class="line"></span></code></pre>
<h3 id="готовый-скрипт">Готовый скрипт</h3>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="ps1"><code><span class="line"><span style="color:#6A737D"># Zabbix server: </span></span>
<span class="line"><span style="color:#E1E4E8">$ZBX_SERVER </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> "192.168.0.2:8080"</span></span>
<span class="line"><span style="color:#E1E4E8">$ZBX_SERVER_INSTALL </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> "192.168.0.2"</span></span>
<span class="line"><span style="color:#E1E4E8">$ZBX_API </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> "http://</span><span style="color:#E1E4E8">$ZBX_SERVER</span><span style="color:#9ECBFF">/api_jsonrpc.php"</span></span>
<span class="line"><span style="color:#E1E4E8">$ZBX_TOKEN </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> "b1c4f904b2b56a342912dd0c44c890cd35dcac1f69e72cb23c765d8feaf85f0a"</span></span>
<span class="line"><span style="color:#E1E4E8">$ZBX_TEMPLATE </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> "Windows by Zabbix agent"</span></span>
<span class="line"><span style="color:#E1E4E8">$ZBX_HOSTGRP </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> "NewHosts"</span></span>
<span class="line"><span style="color:#6A737D"># Host vars:</span></span>
<span class="line"><span style="color:#E1E4E8">$HOSTIP </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> (</span><span style="color:#79B8FF">Get-NetIPAddress</span><span style="color:#F97583"> -</span><span style="color:#E1E4E8">AddressFamily IPv4 </span><span style="color:#F97583">|</span><span style="color:#79B8FF"> Where-Object</span><span style="color:#E1E4E8"> {</span><span style="color:#79B8FF">$_</span><span style="color:#E1E4E8">.InterfaceAlias </span><span style="color:#F97583">-imatch</span><span style="color:#9ECBFF"> "Ethernet"</span><span style="color:#E1E4E8">}).IPAddress.toString()</span></span>
<span class="line"><span style="color:#E1E4E8">$HOSTDNS </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> ([</span><span style="color:#F97583">System.Net.Dns</span><span style="color:#E1E4E8">]::GetHostByName($</span><span style="color:#79B8FF">env:</span><span style="color:#E1E4E8">computerName).HostName).tolower()</span></span>
<span class="line"><span style="color:#E1E4E8">$HOSTNAME </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> $</span><span style="color:#79B8FF">env:</span><span style="color:#E1E4E8">computerName.ToUpper()</span></span>
<span class="line"><span style="color:#E1E4E8">$AGENT_PORT </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> "10050"</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E1E4E8">echo </span><span style="color:#9ECBFF">"</span><span style="color:#E1E4E8">$HOSTIP</span><span style="color:#9ECBFF">/</span><span style="color:#E1E4E8">$HOSTNAME</span><span style="color:#9ECBFF">"</span></span>
<span class="line"></span>
<span class="line"><span style="color:#F97583">function</span><span style="color:#B392F0"> RegisterNewHost</span><span style="color:#E1E4E8">() {</span></span>
<span class="line"><span style="color:#E1E4E8"> $REQ_PARAMS </span><span style="color:#F97583">=</span><span style="color:#F97583"> @</span><span style="color:#E1E4E8">{</span></span>
<span class="line"><span style="color:#E1E4E8"> jsonrpc </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> "2.0"</span></span>
<span class="line"><span style="color:#E1E4E8"> method </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> "host.create"</span></span>
<span class="line"><span style="color:#E1E4E8"> params </span><span style="color:#F97583">=</span><span style="color:#F97583"> @</span><span style="color:#E1E4E8">{</span></span>
<span class="line"><span style="color:#E1E4E8"> host </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> $HOSTNAME</span></span>
<span class="line"><span style="color:#E1E4E8"> interfaces </span><span style="color:#F97583">=</span><span style="color:#F97583"> @</span><span style="color:#E1E4E8">(</span></span>
<span class="line"><span style="color:#F97583"> @</span><span style="color:#E1E4E8">{</span></span>
<span class="line"><span style="color:#E1E4E8"> type </span><span style="color:#F97583">=</span><span style="color:#79B8FF"> 1</span></span>
<span class="line"><span style="color:#E1E4E8"> main </span><span style="color:#F97583">=</span><span style="color:#79B8FF"> 1</span></span>
<span class="line"><span style="color:#E1E4E8"> useip </span><span style="color:#F97583">=</span><span style="color:#79B8FF"> 0</span></span>
<span class="line"><span style="color:#E1E4E8"> ip </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> $HOSTIP</span></span>
<span class="line"><span style="color:#E1E4E8"> dns </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> $HOSTDNS</span></span>
<span class="line"><span style="color:#E1E4E8"> port </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> $AGENT_PORT</span></span>
<span class="line"><span style="color:#E1E4E8"> }</span></span>
<span class="line"><span style="color:#E1E4E8"> )</span></span>
<span class="line"><span style="color:#E1E4E8"> groups </span><span style="color:#F97583">=</span><span style="color:#F97583"> @</span><span style="color:#E1E4E8">(</span></span>
<span class="line"><span style="color:#F97583"> @</span><span style="color:#E1E4E8">{</span></span>
<span class="line"><span style="color:#E1E4E8"> groupid </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> "24"</span></span>
<span class="line"><span style="color:#E1E4E8"> }</span></span>
<span class="line"><span style="color:#E1E4E8"> )</span></span>
<span class="line"><span style="color:#E1E4E8"> templates </span><span style="color:#F97583">=</span><span style="color:#F97583"> @</span><span style="color:#E1E4E8">(</span></span>
<span class="line"><span style="color:#F97583"> @</span><span style="color:#E1E4E8">{</span></span>
<span class="line"><span style="color:#E1E4E8"> templateid </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> "10081"</span></span>
<span class="line"><span style="color:#E1E4E8"> }</span></span>
<span class="line"><span style="color:#E1E4E8"> )</span></span>
<span class="line"><span style="color:#E1E4E8"> }</span></span>
<span class="line"><span style="color:#E1E4E8"> id </span><span style="color:#F97583">=</span><span style="color:#79B8FF"> 1</span></span>
<span class="line"><span style="color:#E1E4E8"> auth </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> $ZBX_TOKEN</span></span>
<span class="line"><span style="color:#E1E4E8"> } </span><span style="color:#F97583">|</span><span style="color:#79B8FF"> ConvertTo-Json</span><span style="color:#F97583"> -</span><span style="color:#E1E4E8">Depth </span><span style="color:#79B8FF">5</span></span>
<span class="line"><span style="color:#E1E4E8"> $uri </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> $ZBX_API</span></span>
<span class="line"><span style="color:#E1E4E8"> $headers </span><span style="color:#F97583">=</span><span style="color:#F97583"> @</span><span style="color:#E1E4E8">{</span></span>
<span class="line"><span style="color:#9ECBFF"> "Content-Type"</span><span style="color:#F97583"> =</span><span style="color:#9ECBFF"> "application/json"</span></span>
<span class="line"><span style="color:#E1E4E8"> }</span></span>
<span class="line"><span style="color:#E1E4E8"> $method </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> "Post"</span></span>
<span class="line"><span style="color:#E1E4E8"> </span></span>
<span class="line"><span style="color:#79B8FF"> Invoke-WebRequest</span><span style="color:#F97583"> -</span><span style="color:#E1E4E8">Uri $uri </span><span style="color:#F97583">-</span><span style="color:#E1E4E8">Headers $headers </span><span style="color:#F97583">-</span><span style="color:#E1E4E8">Method $method </span><span style="color:#F97583">-</span><span style="color:#E1E4E8">Body $REQ_PARAMS</span></span>
<span class="line"><span style="color:#6A737D"> # Для отладки, можно удалить следующую строку.</span></span>
<span class="line"><span style="color:#E1E4E8"> echo </span><span style="color:#9ECBFF">"debug"</span><span style="color:#E1E4E8"> $REQ_PARAMS</span></span>
<span class="line"><span style="color:#E1E4E8">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E1E4E8">RegisterNewHost</span></span>
<span class="line"></span>
<span class="line"><span style="color:#F97583">function</span><span style="color:#B392F0"> InstallZbxAgent</span><span style="color:#E1E4E8">() {</span></span>
<span class="line"><span style="color:#E1E4E8"> echo </span><span style="color:#9ECBFF">"start install msi"</span></span>
<span class="line"><span style="color:#E1E4E8"> msiexec </span><span style="color:#F97583">/</span><span style="color:#E1E4E8">i \\fs1\soft\zabbix_agent2</span><span style="color:#F97583">-</span><span style="color:#E1E4E8">openssl.msi </span><span style="color:#F97583">/</span><span style="color:#E1E4E8">qn SERVER</span><span style="color:#F97583">=</span><span style="color:#E1E4E8">$ZBX_SERVER_INSTALL LISTENPORT</span><span style="color:#F97583">=</span><span style="color:#E1E4E8">$AGENT_PORT HOSTNAME</span><span style="color:#F97583">=</span><span style="color:#E1E4E8">$HOSTNAME</span></span>
<span class="line"><span style="color:#E1E4E8">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E1E4E8">InstallZbxAgent</span></span>
<span class="line"></span>
<span class="line"><span style="color:#F97583">if</span><span style="color:#E1E4E8"> (</span><span style="color:#F97583">!</span><span style="color:#E1E4E8">(</span><span style="color:#79B8FF">Test-Path</span><span style="color:#F97583"> -</span><span style="color:#E1E4E8">Path </span><span style="color:#9ECBFF">"HKLM:\SYSTEM\CurrentControlSet\Services\Zabbix Agent"</span><span style="color:#E1E4E8">) </span><span style="color:#F97583">-and</span><span style="color:#F97583"> !</span><span style="color:#E1E4E8">(</span><span style="color:#79B8FF">Test-Path</span><span style="color:#F97583"> -</span><span style="color:#E1E4E8">Path </span><span style="color:#9ECBFF">"HKLM:\SYSTEM\CurrentControlSet\Services\Zabbix Agent 2"</span><span style="color:#E1E4E8">)) {</span></span>
<span class="line"><span style="color:#E1E4E8"> InstallZbxAgent</span></span>
<span class="line"><span style="color:#E1E4E8"> RegisterNewHost</span></span>
<span class="line"><span style="color:#E1E4E8">}</span></span>
<span class="line"></span></code></pre>
<h3 id="добавляем-скрипт-в-политику">Добавляем скрипт в политику</h3>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#6A737D">## Script name:</span></span>
<span class="line"><span style="color:#B392F0">%windir%\System32\WindowsPowerShell\v1.0\powershell.exe</span></span>
<span class="line"><span style="color:#6A737D">## Script parameters:</span></span>
<span class="line"><span style="color:#B392F0">-Noninteractive</span><span style="color:#79B8FF"> -ExecutionPolicy</span><span style="color:#9ECBFF"> Bypass</span><span style="color:#79B8FF"> -Noprofile</span><span style="color:#79B8FF"> -file</span><span style="color:#9ECBFF"> "</span><span style="color:#79B8FF">\\</span><span style="color:#9ECBFF">DC1\NETLOGON\zbx_agent_install.ps1"</span></span>
<span class="line"></span></code></pre>
<p>Настройка завершена. Подключаемся к любому хосту и обновляем политики с помощью команды <code>gpupdate /force</code>.</p>
<p>Выводим список всех политик с помощью команды <code>gpresult /R /scope:computer</code>.</p>
<p>Проверяем установку на Windows и добавление устройства на сервере.</p> </article> <div class="grid grid-cols-1 sm:grid-cols-2 gap-4"> <a href="/blog/03-bot-support" class="group p-4 gap-3 flex items-center border rounded-lg hover:bg-black/5 hover:dark:bg-white/10 border-black/15 dark:border-white/20 blend"> <div class="order-2 w-full h-full group-hover:text-black group-hover:dark:text-white blend"> <div class="flex flex-wrap gap-2"> <div class="text-sm uppercase">
Prev
</div> </div> <div class="font-semibold mt-3 text-black dark:text-white"> Хватит терять заявки пользователей </div> </div> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="order-1 stroke-current group-hover:stroke-black group-hover:dark:stroke-white rotate-180"> <line x1="5" y1="12" x2="19" y2="12" class="scale-x-0 group-hover:scale-x-100 translate-x-4 group-hover:translate-x-1 transition-all duration-300 ease-in-out"></line> <polyline points="12 5 19 12 12 19" class="translate-x-0 group-hover:translate-x-1 transition-all duration-300 ease-in-out"></polyline> </svg> </a> <a href="/blog/02-kms-service" class="group p-4 gap-3 flex items-center border rounded-lg hover:bg-black/5 hover:dark:bg-white/10 border-black/15 dark:border-white/20 transition-colors duration-300 ease-in-out"> <div class="w-full h-full text-right group-hover:text-black group-hover:dark:text-white blend"> <div class="text-sm uppercase">
Next
</div> <div class="font-semibold mt-3 text-black dark:text-white"> Активация Windows в организации через KMS server </div> </div> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="stroke-current group-hover:stroke-black group-hover:dark:stroke-white"> <line x1="5" y1="12" x2="19" y2="12" class="scale-x-0 group-hover:scale-x-100 translate-x-4 group-hover:translate-x-1 transition-all duration-300 ease-in-out"></line> <polyline points="12 5 19 12 12 19" class="translate-x-0 group-hover:translate-x-1 transition-all duration-300 ease-in-out"></polyline> </svg> </a> </div> </div> </div> </div> </div> </main> <footer class="relative bg-white dark:bg-black"> <div class="animate"> <section class="py-5"> <div class="w-full h-full mx-auto px-5 max-w-screen-md"> <div class="flex items-center justify-center sm:justify-end"> <button id="back-to-top" aria-label="Back to top of page" class="group flex w-fit p-1.5 gap-1.5 text-sm items-center border rounded hover:bg-black/5 hover:dark:bg-white/10 border-black/15 dark:border-white/20 transition-colors duration-300 ease-in-out"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="stroke-current group-hover:stroke-black group-hover:dark:stroke-white rotate-90"> <line x1="19" y1="12" x2="5" y2="12" class="scale-x-0 group-hover:scale-x-100 translate-x-3 group-hover:translate-x-0 transition-all duration-300 ease-in-out"></line> <polyline points="12 19 5 12 12 5" class="translate-x-1 group-hover:translate-x-0 transition-all duration-300 ease-in-out"></polyline> </svg> <div class="w-full group-hover:text-black group-hover:dark:text-white transition-colors duration-300 ease-in-out">
В начало
</div> </button> </div> </div> </section> <section class=" py-5 overflow-hidden whitespace-nowrap border-t border-black/10 dark:border-white/25"> <div class="w-full h-full mx-auto px-5 max-w-screen-md"> <div class="grid grid-cols-1 sm:grid-cols-2 gap-3"> <div class="flex flex-col items-center sm:items-start"> <a href="/" class="flex gap-1 w-fit font-semibold text-current hover:text-black dark:hover:text-white transition-colors duration-300 ease-in-out"> <svg class="size-6 fill-current"> <use href="/brand.svg#brand"></use> </svg> Плата Управления РФ </a> </div> <div class="flex gap-2 justify-center sm:justify-end items-center"> <span class="relative flex h-3 w-3"> <span class="animate-ping absolute inline-flex h-full w-full rounded-full bg-green-300"></span> <span class="relative inline-flex rounded-full h-3 w-3 bg-green-500"></span> </span>
Все системы в норме
</div> </div> </div> </section> <section class=" py-5 overflow-hidden whitespace-nowrap border-t border-black/10 dark:border-white/25"> <div class="w-full h-full mx-auto px-5 max-w-screen-md"> <div class="h-full grid grid-cols-1 sm:grid-cols-2 gap-3"> <div class="order-2 sm:order-1 flex flex-col items-center justify-center sm:items-start"> <div class="legal"> <a href="/legal/terms" class="text-current hover:text-black dark:hover:text-white transition-colors duration-300 ease-in-out">
Условия использования
</a> |
<a href="/legal/privacy" class="text-current hover:text-black dark:hover:text-white transition-colors duration-300 ease-in-out">
Конфиденциальности
</a> </div> <div class="text-sm mt-2">
&copy; 2024 | @iTKeyS
</div> </div> <div class="order-1 sm:order-2 flex justify-center sm:justify-end"> <div class="flex flex-wrap gap-1 items-center justify-center"> <a href="mailto:krasilnikoff.tihon@gmail.com" target="_blank" aria-label="Плата Управления РФ on Email" class="group size-10 rounded-full p-2 items-center justify-center hover:bg-black/5 dark:hover:bg-white/20 blend"> <svg class="size-full fill-current group-hover:fill-black group-hover:dark:fill-white blend"> <use href="/social.svg#email"></use> </svg> </a><a href="https://git.fipi.pro/Plata_Upravleniya_RF" target="_blank" aria-label="Плата Управления РФ on Github" class="group size-10 rounded-full p-2 items-center justify-center hover:bg-black/5 dark:hover:bg-white/20 blend"> <svg class="size-full fill-current group-hover:fill-black group-hover:dark:fill-white blend"> <use href="/social.svg#github"></use> </svg> </a><a href="https://www.youtube.com/@plata_upravleniya_rf" target="_blank" aria-label="Плата Управления РФ on YouTube" class="group size-10 rounded-full p-2 items-center justify-center hover:bg-black/5 dark:hover:bg-white/20 blend"> <svg class="size-full fill-current group-hover:fill-black group-hover:dark:fill-white blend"> <use href="/social.svg#youtube"></use> </svg> </a><a href="https://t.me/plata_upravleniya_rf" target="_blank" aria-label="Плата Управления РФ on Telegram" class="group size-10 rounded-full p-2 items-center justify-center hover:bg-black/5 dark:hover:bg-white/20 blend"> <svg class="size-full fill-current group-hover:fill-black group-hover:dark:fill-white blend"> <use href="/social.svg#telegram"></use> </svg> </a><a href="https://t.me/plata_upravleniya_rf_bot" target="_blank" aria-label="Плата Управления РФ on Telegram BOT" class="group size-10 rounded-full p-2 items-center justify-center hover:bg-black/5 dark:hover:bg-white/20 blend"> <svg class="size-full fill-current group-hover:fill-black group-hover:dark:fill-white blend"> <use href="/social.svg#telegram"></use> </svg> </a> </div> </div> </div> </div> </section> </div> </footer> <script>
function goBackToTop(event) {
event.preventDefault()
window.scrollTo({
top: 0,
behavior: "smooth"
})
}
function inintializeBackToTop() {
const backToTop = document.getElementById("back-to-top")
backToTop?.addEventListener("click", goBackToTop)
}
document.addEventListener("astro:after-swap", inintializeBackToTop)
inintializeBackToTop()
</script> </body></html>