Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - HDD/SSD S.M.A.R.T. - парсинг RAW-значений атрибутов.

Ответить
Настройки темы
PowerShell - HDD/SSD S.M.A.R.T. - парсинг RAW-значений атрибутов.

Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: jpg SMART_problem.jpg
(31.8 Kb, 6 просмотров)
Всем привет!

Есть доменная сеть с клиентами не ниже Windows 7. Встала интересная задача:
1. Сформировать список ПК из определённого файла.
2. Собирать по всем ПК/ноутбукам из п.1 S.M.A.R.T. атрибуты подключённых по SATA или M.2 имеющихся HDD/SSD(Бывает часто, что подключены оба).
3. После сборки этих данных - парсить RAW-значения атрибутов на предмет отличия от нуля:
- 05 Reallocated Sector Count
- 187 (BB) Reported Uncorrected Sector Count (UNC Error)
- 197 (С5) Current Pending Sector Count
- 198 (С6) Offline Uncorrectable Sector Count (Uncorrectable Sector Count)
- 200 (С8) Write Error Rate (MultiZone Error Rate)
4. Если находятся ПК, у которых RAW-значения накопителей выше нуля - отправить по почте список этих ПК.

Пункты 1,2,4 реализовал

Код: Выделить весь код
##### п.1
$COMPUTERS = get-content D:\pc.txt

##### п.2
foreach ($computer in $COMPUTERS)	{
$smart = gwmi -Namespace root\WMI -ComputerName $computer -Class MSStorageDriver_FailurePredictData 
if ($smart.VendorSpecific.Length -gt 0) {
    $smart = @($smart)
}
for ($n = 0; $n -lt $smart.Length; $n++) {
    $result = @()
    for ($i = 2; $i -lt $smart[$n].VendorSpecific.Length; $i += 12) 
    {
    $result += [pscustomobject] @{
    AttrID = $smart[$n].VendorSpecific[$i];
    Raws = $smart[$n].VendorSpecific[($i+5)..($i+10)];

##### п.3
        if(RAW-значение аттрибутов 05 или 187 или 197 или 198 или 200 больше нуля) 
            {

##### п.4
            $Server = 'mail_server_address.ru'
            $From = 'my_mail@mail_server_address.ru'
            $To = 'my_mail@mail_server_address.ru'
            $encoding = [System.Text.Encoding]::UTF8
            $BodyM = ""
            Send-MailMessage -From $From -To $To -SmtpServer $server -Body "$Theme `n$BodyM" -Subject "SMART Alert - $computer" -Encoding $encoding
            }
    }
}


Пример вывода атрибутов по время работы скрипта:

Код: Выделить весь код
AttrID Raws
------ ----
     1 {55, 53, 153, 7...}
     3 {0, 0, 0, 0...}
     4 {65, 25, 0, 0...}
     5 {9, 0, 0, 0...}
     7 {232, 254, 47, 19...}
     9 {36, 132, 0, 0...}
    10 {0, 0, 0, 0...}
    12 {185, 1, 0, 0...}
   183 {0, 0, 0, 0...}
   184 {0, 0, 0, 0...}
   187 {0, 0, 0, 0...}
   188 {12, 0, 0, 0...}
   189 {6, 0, 0, 0...}
   190 {38, 0, 32, 39...}
   194 {38, 0, 0, 0...}
   195 {55, 53, 153, 7...}
   197 {0, 0, 0, 0...}
   198 {0, 0, 0, 0...}
   199 {0, 0, 0, 0...}
   240 {242, 86, 0, 0...}

В нём, к примеру, значение атрибута №5 равно 9, т.е. уже с HDD имеется проблема(приложил картинку).

Вопрос только в том, как правильно парсить в п.3 эти значения?

Отправлено: 07:52, 02-07-2018

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата rango13:
1. Сформировать список ПК из определённого файла. »
Почему не из AD, если сеть доменная?

Отправлено: 08:53, 02-07-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Почему не из AD, если сеть доменная? »
Код: Выделить весь код
$COMPUTERS = Get-ADComputer -Filter {OperatingSystem -NotLike "*server*"} -Property * -SearchBase "OU=Test-Group, OU=WS, DC=domain, DC=loc" | Select Name -ExpandProperty DNSHostName | Sort
Можно и так - пока не принципиально.

Отправлено: 10:05, 02-07-2018 | #3


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$RawIndex = 5,187,197,198,200
$IsSmartBad = $false

for ($n = 0; $n -lt $smart.Length; $n++) {
    for ($i = 2; $i -lt $smart[$n].VendorSpecific.Length; $i += 12) 
    {
		if($RawIndex -contains $smart[$n].VendorSpecific[$i]) {
			$smart.VendorSpecific[($i+5)..($i+10)] | Where {$_ -gt 0} | Foreach {
				$IsSmartBad = $true
			}
		}
	}
}


if($IsSmartBad) 
{
	$Server = 'mail_server_address.ru'
    $From = 'my_mail@mail_server_address.ru'
    $To = 'my_mail@mail_server_address.ru'
    $encoding = [System.Text.Encoding]::UTF8
    $BodyM = ""
    Send-MailMessage -From $From -To $To -SmtpServer $server -Body "$Theme `n$BodyM" -Subject "SMART Alert - $computer" -Encoding $encoding
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:52, 02-07-2018 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - HDD/SSD S.M.A.R.T. - парсинг RAW-значений атрибутов.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
HDD - HELP HDD RAW в NTFS пичалька Накопители (SSD, HDD, USB Flash) 4 18-02-2016 18:14
SSD - Windows не хочет грузится с SSD при подключенном SSD и HDD Odess Накопители (SSD, HDD, USB Flash) 7 19-04-2015 21:51
HDD - Кто клонировал HDD 2TB или более прогой "HDD-Raw-Copy-Tool"? DENIS451 Накопители (SSD, HDD, USB Flash) 2 03-02-2014 16:17
K50ID + SSD возможно ли поставить вместо hdd ssd intel 520? OmarMaly Ноутбуки 5 17-08-2013 20:01
HDD - [решено] Значения атрибутов SMART и возврат HDD продавцу minos66 Накопители (SSD, HDD, USB Flash) 1 01-02-2009 18:21




 
Переход