Zabbix: LLD-мониторинг железа под Windows на PowerShell
Новая версия для Дисков
Zabbix: LLD-мониторинг дисков без UserParameter и скриптов на агентах
Разработчик AcidVenom
Является старой версией, но используется так как было сделано ранее и все работает, новые делаю уже через LLD
Установка Агента Zabbix + Аппаратное обеспечение Windows
Скрипт + Шаблон для Windows LLD Open Hardware Monitor
Скрипт + Шаблон LLD Для проверки Жестких Дисков HDD через smartmontools
Скрипт + Шаблон для Linux LLD LM-Sensors
Обзор шаблона в скриншётах
Скачать Для ручной установки была такая инструкция
Установка службы Zabbix Agent (подразумевается что конфиг агента уже настроен)
прописываем в конфиге UnsafeUserParameters=1 и UserParameter=ZScript[*], powershell C:\zabbix\Scripts\windows.$1.ps1 $2 $3 $4
Выполняем команды в CMD
C:/zabbix/zabbix_agentd.exe --config C:/zabbix/zabbix_agentd.win.conf --install
net start "Zabbix Agent"
cd C:\zabbix\nssm\win32
cd C:\zabbix\nssm\win64
nssm install OpenHardwareMonitor - установка
Service "OpenHardwareMonitor" installed successfully! - успешная установка
nssm start OpenHardwareMonitor - Запуск службы
nssm remove OpenHardwareMonitor - удаление
Проверка
Запустить командную стороку от имени администратора
Win + R выполнить cmd
Выполнить powershell
Далее
C:\zabbix\Scripts\windows.hard.ps1 discovery
или
C:\zabbix\Scripts\windows.hard.ps1 discovery temperature
C:\zabbix\Scripts\windows.hard.ps1 discovery voltage
C:\zabbix\Scripts\windows.hard.ps1 discovery fan
C:\zabbix\Scripts\windows.hard.ps1 VBAT
Для работы нужно разрешить запуск скриптов не имеющих цифровую подпись
Права админа повершел
Get-ExecutionPolicy
Set-ExecutionPolicy remoteSigned - подписанные скрипты
Set-ExecutionPolicy Unrestricted - все скрипты
обнаружение интерактивных служб «Обнаружение интерактивных служб»
Если железо другое надо изначально переименовать показатели в OpenHardwareMonitor убирать # чтоб сохранился конфигурационный файл.
Перво начально надо запускать powershell от имени админа и запустить 2 команды 2-ая с подтверждение Y
Get-ExecutionPolicy
Set-ExecutionPolicy Unrestricted
Установка smartmontools
Браундмауэр открыть порт что бы все работало в брандмауэре Windows создать правило для входящих подключений разрешающее работу с портом 10050
Варианты решения
HKEY_CURRENT_USER\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\ScriptedDiagnostics\ExecutionPolicy
параметр Unrestricted
Проверка через скрипт на самом узле
Заходим в CMD и водим команду powershell выполняем все последующие команды должны начинаться на PS
Или же просто заходим в PowerShell и выполняем команды там кому как удобнее.
Ищем датчики температур
PS C:\zabbix\Scripts> ./windows.hard.ps1 discovery temperature
Ищем кулера
PS C:\zabbix\Scripts> ./windows.hard.ps1 discovery fan
Получаем данные для температуры подставляем найденный датчик
PS C:\zabbix\Scripts> ./windows.hard.ps1 3882 temperature
Со стороны заббикс сервера
Поиск температур
zabbix_get -s 192.168.355.28 -k ZScript[hard,discovery,temperature]
Получение значение температуры
zabbix_get -s 192.168.355.28 -k ZScript[hard,3882,temperature]
Постоянное значение получение напряжение батарейки биос
zabbix_get -s 192.168.355.28 -k ZScript[hard,VBAT]
И так далее подставляем искомые значения
Команда для поиска элементов
$items = Get-WmiObject -Namespace Root\OpenHardwareMonitor -Class sensor | Where-Object {$_.SensorType -eq "$2" -and $_.Name -notmatch "#|VBAT" -and $_.Parent -notmatch "hdd"}
Что здесь происходит
Получение таблицы для команды sensor обработка и вывод в переменную $items
Получение объектов WMI (Get-WmiObject) sensor получим все классы для пространства|фильтрации объектов является Where-Object позволяет протестировать каждый объект в конвейере и передать его дальше, не соответствие удаляется из конвеера
-eq равно; -and оба устловия должны быть истинны; -notmatch регулярные выражения для посика не соответсвия образцу; $2 входная переменная например temperature
Поиск соответствия $_.SensorType равно "$2 входная переменная например temperature" оба условия должны быть равны $_.Name исключить из поиска вывода значения содержащие # и VBAT условия должны быть равны $_.Parent исключить из поиска вывода значения содержащие hdd
Выполнив команду в повершелл
Get-WmiObject -Namespace Root\OpenHardwareMonitor -Class sensor
Получаем все данные для команды sensors
так же можно проверить идут ли данные таблица
Скрипт работает на запрос CMD следующего запроса:
wmic.exe /NAMESPACE:\\root\OpenHardwareMonitor PATH Sensor
Если ничего не возвращается читаем тут Как исправить запросы WMI
После чего можно запустить команду с фильтрацией подставить вместо $2 например temperature
Get-WmiObject -Namespace Root\OpenHardwareMonitor -Class sensor | Where-Object {$_.SensorType -eq "$2" -and $_.Name -notmatch "#|VBAT" -and $_.Parent -notmatch "hdd"}
Получаем датчики температуры чьи имена не содержат # так же из вывода убираем строки содержащие VBAT и hdd по этому мы не получи температуру для диска мы ее запросим другим скриптом тут ее исключаем.
Далее все найденное передаем в цикл и выводим в Jons data.
Примеры выполнения
windows.hard.ps1
windows.hdd.ps1
В скрипте заббикс агента для пользователя
UserParameter=ZScript[*], powershell C:\zabbix\Scripts\windows.$1.ps1 $2 $3 $4
Подставляем под звездочку любые значения ZScript[*]
Поиск
ZScript[hard,discovery,voltage]
ZScript[hard,discovery,temperature]
ZScript[hard,discovery,fan]
Скрипт по дискам
ZScript[hdd,discovery]
Пример Получаем для ключа на Заббикс сервере ZScript[hard,discovery,temperature]
UserParameter=ZScript[hard,discovery,temperature], powershell C:\zabbix\Scripts\windows.hard.ps1 discovery temperature
Получили входной ключ для скрипта
windows.hard.ps1 discovery temperature
PS C:\zabbix\Scripts> ./windows.hard.ps1 discovery temperature
{"data":[{"{#ID}":"3882", "{#NAME}":"Temperature 2"},{"{#ID}":"3881", "{#NAME}":"Temperature 1"}]}
PS C:\zabbix\Scripts> ./windows.hard.ps1 discovery fan
{"data":[{"{#ID}":"3884", "{#NAME}":"Fan 1"}]}
PS C:\zabbix\Scripts>
Нашли например 3882 имя Temperature 2
Подставялем
PS C:\zabbix\Scripts> ./windows.hard.ps1 3882 temperature
46
root@ZABBIXSERVER:~# zabbix_get -s 192.168.355.28 -k ZScript[hard,3882,temperature]
46
Или для скрипт заббикс агента будет
UserParameter=ZScript[hard,3882,temperature], powershell C:\zabbix\Scripts\windows.hard.ps1 3882 temperature
В заббиксе ключ будет выглядеть
ZScript[hard,3882,temperature]
Ключи в заббикс сервере
Переменная имени {#NAME}
ZScript[hard,{#ID},temperature]
ZScript[hrad,{#ID},voltage]
ZScript[hard,{#ID},fan]
Постоянный ключ
ZScript[hard,VBAT]
Для скрипта по дискам
ZScript[hdd,{#DISKID},fw]
ZScript[hdd,{#DISKID},model]
ZScript[hdd,{#DISKID},capacity]
ZScript[hdd,{#DISKID},attr]
ZScript[hdd,{#DISKID},info]
ZScript[hdd,{#DISKID},family]
ZScript[hdd,{#DISKID},serial]
ZScript[hdd,{#DISKID},status]
Подставляем разные значчения например 5
ZScript[hdd,{#DISKID},5]
Запускаете cmd, далее powershell и путь к скрипту с нужными параметрами
C:\zabbix\Scripts\windows.hard.ps1 discovery temperature
C:\zabbix\Scripts\windows.hard.ps1 discovery voltage
C:\zabbix\Scripts\windows.hard.ps1 discovery fan
C:\zabbix\Scripts\windows.hard.ps1 VBAT
C:\zabbix\Scripts\windows.hdd.ps1 discovery status
powershell
C:\zabbix\Scripts\windows.hdd.ps1 discovery serial
C:\zabbix\Scripts\windows.hdd.ps1 discovery status
C:\zabbix\Scripts\windows.hdd.ps1 discovery model
C:\zabbix\Scripts\windows.hdd.ps1 discovery family
C:\zabbix\Scripts\windows.hdd.ps1 discovery fw
C:\zabbix\Scripts\windows.hdd.ps1 discovery capacity
Windows PowerShell
Copyright (C) 2016 Microsoft Corporation. All rights reserved.
PS C:\Users\14-1> C:\zabbix\Scripts\windows.hdd.ps1 discovery serial
{"data":[{"{#DISKID}":"sda"}]}
PS C:\Users\14-1> C:\zabbix\Scripts\windows.hdd.ps1 discovery status
{"data":[{"{#DISKID}":"sda"}]}
PS C:\Users\14-1> C:\zabbix\Scripts\windows.hdd.ps1 discovery model
{"data":[{"{#DISKID}":"sda"}]}
PS C:\Users\14-1> C:\zabbix\Scripts\windows.hdd.ps1 discovery family
{"data":[{"{#DISKID}":"sda"}]}
PS C:\Users\14-1> C:\zabbix\Scripts\windows.hdd.ps1 discovery fw
{"data":[{"{#DISKID}":"sda"}]}
PS C:\Users\14-1> C:\zabbix\Scripts\windows.hdd.ps1 discovery capacity
бАТНИК РЯДОМ СО СКРИПТОМ
C:/zabbix/zabbix_agentd.exe --config C:/zabbix/zabbix_agentd.win.conf --test ZScript[hard,3849,temperature]
pause
# Получение таблицы для команды sensor обработка и вывод в переменную $items
# Получение объектов WMI (Get-WmiObject) sensor получим все классы для пространства| фильтрации объектов является Where-Object позволяет протестировать каждый объект в конвейере и передать его дальше, не соответствие удаляется из конвеера
# -eq равно; -and оба устловия должны быть истинны; -notmatch регулярные выражения для посика не соответсвия образцу
if ($1 -eq "discovery") {
$items = Get-WmiObject -Namespace Root\OpenHardwareMonitor -Class sensor | Where-Object {$_.SensorType -eq "$2" -and $_.Name -notmatch "#|VBAT" -and $_.Parent -notmatch "hdd"}
Поиск соответствия $_.SensorType равно "$2" оба условия должны быть равны $_.Name исключить из поиска вывода значения содержащие # и VBAT условия должны быть равны $_.Parent исключить из поиска вывода значения содержащие hdd
Get-WmiObject -Namespace Root\OpenHardwareMonitor -Class sensor | Where-Object {$_.SensorType -eq "temperature" -and $_.Name -notmatch "#|VBAT" -and $_.Parent -notmatch "hdd"}
Get-CimClass -Namespace Root\OpenHardwareMonitor -Class sensor
C:\Windows\System32>WMIC.exe /NAMESPACE:\\root\OpenHardwareMonitor PATH Sensor
Отсутствуют экземпляры.
No Instance(s) Available. Нет доступных экземпляров.
PS D:\Документы\Desktop\Температур через повер шел> Get-WmiObject -Namespace Root\OpenHardwareMonitor -LIST sensor
NameSpace: ROOT\OpenHardwareMonitor
Name Methods Properties
---- ------- ----------
Sensor {} {Identifier, Index, InstanceId, Max...}
UserParameter=ZScript[*],powershell C:\zabbix\Scripts\windows.$1.ps1 $1 $2 $3 $4
ZScript - указывается в настройках на сервере заббик
* -все команды в запросе от сервера
powershell - испоняемая программа
C:\zabbix\Scripts\ - путь до скрипта
windows.$1.ps1 - содержание начала имени скрипта файла .$1 - различные имена скрипта ps1 расширение
ZScript[hard,discovery,temperature]
ZScript - параметр для Сервера прописанный в конфиге агента UserParameter=ZScript
[hard определение скрипта это windows.hdd
discovery - первая команда в этом файле Ключ: discovery if ($1 -eq "discovery") {
temperature] - ключ команде датчиков температуры
вид ZScript[имя_скрипта, параметр1,.., параметрN]. Параметры передаются непосредственно в сам скрипт.
Ключ - Уникальный ключ элемента данных. [*] задает, что ключ может принимать параметры из скобок. Параметры указываются при настройке элемента данных.
Команда- Команда, которая выполняется для получения значения ключа.
Только для гибких пользовательских параметров:
Вы можете использовать ссылки на позиции $1…$9 для того, чтобы обратиться к соответствующему параметру в ключе элемента данных.
Zabbix разбирает параметры заключенные в [ ] ключа элемента данных и заменяет $1,…,$9 в команде соответственно.
$0 будет заменена оригинальной командой (до раскрытия $0,…,$9) для выполнения.
Ссылки на позиции интерпретируются Zabbix агентом независимо от того заключены ли они в двойные (“) или в одинарные (') кавычки.
Для использования ссылок на позиции без изменения, укажите двойной символ доллара - например, awk '{print $$2}'. В этом случае $$2 фактически превратится в $2 при выполнении команды.
https://www.zabbix.com/documentation/3. ... parameters
param($hw=»nvidiagpu», $hwid=0, $sensor=»temperature», $sensorid=0)
(Get-WmiObject -Namespace Root\OpenHardwareMonitor -Class sensor | where {$_.identifier -eq «/$hw/$hwid/$sensor/$sensorid»}).value
key = system.sensor[intelcpu,0,temperature,0]
param($hw, $hwid, $sensor, $sensorid)
(Get-WmiObject -Namespace Root\OpenHardwareMonitor -Class sensor | ?{$_.identifier -eq «/$hw/$hwid/$sensor/$sensorid»}).value
system.sensor[intelcpu/0/temperature/0]
состояния триггера от FALSE к TRUE или от TRUE к FALSE (возможно с промежуточным состоянием UNKNOWN)
Внутренние (internal) события генерируются самим Zabbix в двух случаях:
айтем стал не поддерживаемым (not supported)
либо триггер перешёл в неизвестное (unknown) состояние
Триггерные функции для NOTSUPPORTED элементов данных
Функция nodata() была переработана, чтобы сделать срабатывание триггеров проще в тех случаях, когда элемент данных становится недоступен.
Кроме того, функции date(), dayofweek(), dayofmonth(), now(), time(), которые в целом не очень то зависят от значения элемента данных,
теперь всегда просчитываются, в независимости в какой состоянии находится элемент данных.
Ну а самое главное, что теперь триггер не будет уходить в состояние UNKNOWN,
пока хотя бы одна часть логического ИЛИ может быть проверена.
Это позволит комбинировать несколько различных методов сбора данных для одного и того же события
Zabbix прокси на IBM DB2 базе данных имеет ограничение в 2048 байт на возвращаемое значение правил низкоуровневого обнаружения
В Zabbix прокси максимальное возвращаемое значение для правила низкоуровневого обнаружения составляет 4000 символов для Oracle DB и 2048 символов для IBM DB2
Периодически Item отваливались и получали статус: Not Supported.
Чтобы избавиться от этой ошибки, необходимо увеличить таймаут до 15-ти секунд
CMD >
WMIC.exe /NAMESPACE:\\root\OpenHardwareMonitor PATH Sensor
powershell >
Get-WmiObject -Namespace Root\OpenHardwareMonitor -Class sensor
Get-WmiObject -List -Namespace Root/OpenHardWareMOnitor
Get-WmiObject -Namespace Root\OpenHardwareMonitor -class Sensor
Get-WmiObject -Namespace Root/OpenHardWareMOnitor -class hardware
Get-WmiObject -Namespace Root\OpenHardwareMonitor -Class sensor | Where-Object {$_.SensorType -eq «Temperature»}
Пример
Microsoft Windows [Version 6.1.7601]
© Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.
C:\Windows\system32>powershell
C:\zabbix\Scripts\windows.hard.ps1 discovery fan
Ответ {"data":[{"{#ID}":"3873", "{#NAME}":"Fan 2"},{"{#ID}":"3872", "{#NAME}":"Fan 1"}]
C:\zabbix\Scripts\windows.hard.ps1 discovery voltage
Ответ {"data":[{"{#ID}":"3863", "{#NAME}":"+5V"},{"{#ID}":"3862", "{#NAME}":"+3.3V"},{"{#ID}":"3861", "{#NAME}":"DRAM"},{"{#ID}":"3860", "{#NAME}":"CPU VCore"}]}
C:\zabbix\Scripts\windows.hard.ps1 discovery temperature
Ответ {"data":[{"{#ID}":"3869", "{#NAME}":"Temperature 1"},{"{#ID}":"3848", "{#NAME}":"CPU Core 2"},{"{#ID}":"3871", "{#NAME}"
:"Temperature 3"},{"{#ID}":"3847", "{#NAME}":"CPU Core 1"},{"{#ID}":"3870", "{#NAME}":"Temperature 2"}]}
C:\zabbix\Scripts\windows.hard.ps1 3848 temperature
Ответ 26
C:\zabbix\Scripts\windows.hard.ps1 VBAT
Ответ 2.944
PS C:\Program Files\smartmontools\bin> C:\zabbix\Scripts\windows.hdd.ps1 discovery
Ответ {"data":[{"{#DISKID}":"sda"}]}
C:\zabbix\Scripts\windows.hdd.ps1 sda serial
Ответ 5VMFCF4Q
C:\zabbix\Scripts\windows.hdd.ps1 sda status
Ответ FAILED! - плохой
Ответ PASSED - хороший
C:\zabbix\Scripts\windows.hdd.ps1 sda model
Ответ ST3500418AS
C:\zabbix\Scripts\windows.hdd.ps1 sda family
Seagate Barracuda 7200.12
C:\zabbix\Scripts\windows.hdd.ps1 sda fw
CC38
C:\zabbix\Scripts\windows.hdd.ps1 sda capacity
500 GB
Пример
C:\zabbix\Scripts\windows.hdd.ps1 sda 9
17100
009 (09h) Power-On Hours (POH) Количество рабочих часов - количество часов, когда диск находился во включенном состоянии за весь срок с момента производства, в виде целочисленного значения в часах. Иногда встречаются модели накопителей, в которых внутреннее значение данного атрибута сохраняется в виде количества рабочих минут или секунд, а не часов. Достижение порогового значения данного атрибута означает выработку ресурса, заданного производителем ( MTBF - Mean Time Between Failures
powershell
C:\zabbix\Scripts\windows.hdd.ps1 discovery serial
C:\zabbix\Scripts\windows.hdd.ps1 discovery status
C:\zabbix\Scripts\windows.hdd.ps1 discovery model
C:\zabbix\Scripts\windows.hdd.ps1 discovery family
C:\zabbix\Scripts\windows.hdd.ps1 discovery fw
C:\zabbix\Scripts\windows.hdd.ps1 discovery capacity
Windows PowerShell
Copyright © 2016 Microsoft Corporation. All rights reserved.
PS C:\Users\14-1> C:\zabbix\Scripts\windows.hdd.ps1 discovery serial
{«data»:[{"{#DISKID}":«sda»}]}
PS C:\Users\14-1> C:\zabbix\Scripts\windows.hdd.ps1 discovery status
{«data»:[{"{#DISKID}":«sda»}]}
PS C:\Users\14-1> C:\zabbix\Scripts\windows.hdd.ps1 discovery model
{«data»:[{"{#DISKID}":«sda»}]}
PS C:\Users\14-1> C:\zabbix\Scripts\windows.hdd.ps1 discovery family
{«data»:[{"{#DISKID}":«sda»}]}
PS C:\Users\14-1> C:\zabbix\Scripts\windows.hdd.ps1 discovery fw
{«data»:[{"{#DISKID}":«sda»}]}
PS C:\Users\14-1> C:\zabbix\Scripts\windows.hdd.ps1 discovery capacity
локальной отрабатывает
C:\Users\14-1>smartctl --scan-open
/dev/sda -d ata # /dev/sda, ATA device
Код: Выделить всё
# 2017/02/13 AcidVenom v2
# Скрипт для обнаружения разных датчиков для Zabbix
param($1,$2)
# Автообнарежение датчиков температуры, напряжения, оборотов кулеров
# Ключи: discovery temperature/voltage/fan
# Получение таблицы для команды sensor обработка и вывод в переменную $items
# Получение объектов WMI (Get-WmiObject) sensor получим все классы для пространства|фильтрации объектов является Where-Object позволяет протестировать каждый объект в конвейере и передать его дальше, не соответствие удаляется из конвеера
# -eq равно; -and оба устловия должны быть истинны; -notmatch регулярные выражения для посика не соответсвия образцу; $2 входная переменная например temperature
if ($1 -eq "discovery") {
$items = Get-WmiObject -Namespace Root\OpenHardwareMonitor -Class sensor | Where-Object {$_.SensorType -eq "$2" -and $_.Name -notmatch "#|VBAT" -and $_.Parent -notmatch "hdd"}
# Поиск соответствия $_.SensorType равно "$2 входная переменная например temperature" оба условия должны быть равны $_.Name исключить из поиска вывода значения содержащие # и VBAT условия должны быть равны $_.Parent исключить из поиска вывода значения содержащие hdd
# Начало для вывода JONS data
write-host -NoNewline "{"
write-host -NoNewline "`"data`":["
# Переборка элементов циклом
$n = 0
foreach ($obj in $items) {
$n = $n + 1
$line = "{`"{#ID}`":`"" + $obj.InstanceId + "`", `"{#NAME}`":`"" + $obj.Name + "`"}"
If ($n -lt $items.Count) { $line = "$line,"}
write-host -NoNewline $line
}
write-host -NoNewline "]"
write-host -NoNewline "}"
}
# Зарезервированные переменные
# Ключи: VBAT получаем напряжение батарейки биос
elseif ($1 -eq "VBAT") {
$obj = (Get-WmiObject -Namespace Root\OpenHardwareMonitor -Class sensor | Where-Object {$_.Name -eq "$1"}).Value -replace(",",".")
Write-Host -NoNewline $obj
}
# Запрос значения по InstaceId от discovery
#
else {
if ((Get-WmiObject -Namespace Root\OpenHardwareMonitor -Class sensor | Where-Object {$_.InstanceId -eq "$1"}).SensorType -eq "Voltage") {
$obj = (Get-WmiObject -Namespace Root\OpenHardwareMonitor -Class sensor | Where-Object {$_.InstanceId -eq "$1"}).Value -replace(",",".")}
else {$obj = (Get-WmiObject -Namespace Root\OpenHardwareMonitor -Class sensor | Where-Object {$_.InstanceId -eq "$1"}).Value -replace(",.*","")}
Write-Host -NoNewline $obj
}
Код: Выделить всё
# 2017/04/12 AcidVenom v3
# Скрипт для обнаружения дисков и получения их данных для Zabbix
param($1,$2)
# Автообнарежение дисков
# Ключ: discovery
if ($1 -eq "discovery") {
try {
$items = smartctl-nc --scan-open | where {$_ -match "/dev/sd"}
write-host -NoNewline "{"
write-host -NoNewline "`"data`":["
$n = 0
foreach ($obj in $items) {
$n = $n + 1
if ((smartctl-nc -i $obj.substring(0,8) | where {$_ -match "SMART support is: Enabled"}) -ne $null) {
If ($n -gt 1) {write-host -NoNewline ","}
$line = "{`"{#DISKID}`":`"" + ($obj.substring(5,3)) + "`"}"
write-host -NoNewline $line
}
}
write-host -NoNewline "]"
write-host -NoNewline "}"
}
catch {exit}
}
# Получение информации от дисков
# Ключи:
else {
try {
if ($2 -eq "status") {
$obj = smartctl-nc -H /dev/$1 | where {$_ -match "result:"}
$obj = $obj.substring(50)
}
elseif ($2 -eq "model") {
$obj = smartctl-nc -i /dev/$1 | where {$_ -match "Device Model:"}
$obj = $obj.substring(18)
}
elseif ($2 -eq "family") {
$obj = smartctl-nc -i /dev/$1 | where {$_ -match "Model Family:"}
$obj = $obj.substring(18)
}
elseif ($2 -eq "fw") {
$obj = smartctl-nc -i /dev/$1 | where {$_ -match "Firmware Version:"}
$obj = $obj.substring(18)
}
elseif ($2 -eq "serial") {
$obj = smartctl-nc -i /dev/$1 | where {$_ -match "Serial Number:"}
$obj = $obj.substring(18)
}
elseif ($2 -eq "capacity") {
$obj = smartctl-nc -i /dev/$1 | where {$_ -match "User Capacity:"}
if ($obj -match "User Capacity:") {
$obj = $obj.Substring($obj.IndexOf("[")+1,$obj.IndexOf("]")-$obj.IndexOf("[")-1)
}
else {
$obj = "N/A"
}}
# Получение показателей SMART
# Значения без скобок и их содержимого
else {
$obj = smartctl-nc -A /dev/$1 | where {$_ -match "^ *$2"}
try {$obj = $obj.Substring(87,$obj.IndexOf("(")-87)}
catch {$obj = $obj.Substring(87)}
}}
catch {$obj = ""}
Write-Output $obj
}