Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI/HTA
Войти
Регистрация
Восстановить пароль
Другие темы раздела
VBScript/JScript Кто нибудь работал с библиотекой ChilkatFTP? https://www.cyberforum.ru/ vbscript-wsh/ thread668991.html
Использую данную библиотеку для получения файлов из файл-сервера FTP. Подключаюсь 1 раз, но когда работаю с директориями (меняю каталог, возвращаюсь в корневой каталог) создаются все новые и новые...
VBScript/JScript Как в VBS скрипте создать задание в планировщике задач
Как в VBS скрипте создать задание в планировщике задач, которое бы запускало файл каждые несколько минут?
VBScript/JScript Запуск скрипта из контекстного меню В общем ситуация такая: решил написать скрипт, чтобы который выполнялся из контекстного меню. Пусть будет: msgBox "Hello World" Cоздал разделыы: "HKEY_CLASSES_ROOT\Folder\shell\myscr", ... https://www.cyberforum.ru/ vbscript-wsh/ thread662848.html VBScript/JScript Проверить наличие папки с условием ззззздарова! пытаюсь слепить код который проверяет наличие папки , вот че я нагородил, при проверке то вообще молчит то закидывает ошибками. код достаточно мудреный: 1: сначала он должен определить... https://www.cyberforum.ru/ vbscript-wsh/ thread662784.html
VBS и интернет VBScript/JScript
зззззздарова. нужен vbs код который запустит указанный в коде файл при коннекте с инетом.
VBScript/JScript Работа с реестром https://www.cyberforum.ru/ vbscript-wsh/ thread658605.html
ззззздарова! буду благодарен тому кто подкинет vbs код, который создаст раздел в реестре по адресу HKLM\SOFTWARE. с возможностью создания ветки разделов, пр(HKLM\SOFTWARE\Новый раздел #1\Новый раздел...
VBScript/JScript Функция, которая обрезает все символы не являющиеся прописными буквами кирилицы Хочу поделиться функцией, которая обрезает все символы не являющиеся прописными буквами кириллицы (можно подкорректировать под себя: Function fun_Ignor_Incorrect_Symbols(byVal string_to_Change)... https://www.cyberforum.ru/ vbscript-wsh/ thread658176.html Запуск WordPad (Word) и Paint, запись в них информации из буфера VBScript/JScript
Всем привет! помогите пожалуйста написать два скриптика в VBS, пожааалуйста! =) первый скрипт 1) Запросить у пользователя, какой редактор (Word или WordPad) нужно запустить. 2) Обработать...
VBScript/JScript Имитация нажатия клавиш https://www.cyberforum.ru/ vbscript-wsh/ thread657753.html
кто-нить подскажите vbs код для имитации нажатия клавиш, комбинация CTRL+V и нажатие клавиши "стрелки вправо" Добавлено через 44 секунды еще один символ "_"
VBScript/JScript Лишний символ в строке https://www.cyberforum.ru/ vbscript-wsh/ thread657591.html
Здравствуйте читающие! Появилась проблема при сравнении строк в QTP на языке VBS. Визуально две строки равны. Но при сравнении их программно с помощью функий VBS оказывается, что одна строка...
Передача файла через почту VBScript/JScript
Зззззздарова! Возник между делом вопрос, можно ли в среде программирования VBS, написать код, который бы отправлял с компа сервера указанный файл (путь, имя, расширение). Есть ли вообще способы...
VBScript/JScript Перевод запросов SQL Server в VBS https://www.cyberforum.ru/ vbscript-wsh/ thread653617.html
подскажите с помощью какой программы можно быстро перевести запросы написаные на SQL в формат VBS?
Эксперт WindowsАвтор FAQ
17779 / 7515 / 888
Регистрация: 25.12.2011
Сообщений: 11,288
Записей в блоге: 16
12.04.2014, 02:30  [ТС] 0

Полезные VBS скрипты и программы по работе с ними - VBScript/JScript - Ответ 6033700

12.04.2014, 02:30. Показов 177621. Ответов 42
Метки (Все метки)

Ответ

Получение HDD Smart

Автор: Леонид_33

Отчет в виде CSV.
Мною добавлены функции повышение привилегий и скорректирован вывод отчета в папку рядом со скриптом.

Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
'==========================================================================
'
' AUTHOR: Леонид_33
' NAME: HDD_Smart.vbs
'
' Скрипт для получения SMARTа HDD
' Может брать SMART как с локальной так и удаленной машины с выводом результата в файл в формате CSV
' При запуске скрипта выдается окно ввода имени(IP) машины с учетными данными
' Если хотим получить SMART с локальной машины, то ничего не указываем, если с удаленной, указываем имя(IP) машины, и, если надо, учетные данные
' Работает на WindowsXP(SP2,SP3), Windows2003SP2, Windows2008SP1
' Берет SMART через WMI, поэтому, что винда отдает, то отдает т.е.
' работает только со стандартно подключенными на мать HDD IDE и SATA
' Как бы того не хотелось, НЕ РАБОТАЕТ с рэйдами.
' Ну не видит винда SMARTов с этих винтов и все тут.
'
' Если что по атрибутам неясно, можно глянуть тут
' [url]http://en.wikipedia.org/wiki/Self-Monitoring%2C_Analysis%2C_and_Reporting_Technology[/url]
'
'==========================================================================
 
if not isAdminRights then call Elevate(""): WScript.Quit
 
Dim strComputer
Dim strLogin
Dim strPassword
On Error Resume Next
'GetPassword()
   strComputer = "."
   strLogin = ""
   strPassword = ""
 
 
If strLogin = "" or strComputer = "." then
   Set    objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\WMI")
else
   Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
   Set objWMIService = objSWbemLocator.ConnectServer(strComputer, _
      "root\CIMV2", _
      strLogin, _
      strPassword, _
      "MS_409")
end If
 
    Set    SmartDataItems = objWMIService.ExecQuery("SELECT * FROM MSStorageDriver_FailurePredictData", "WQL", 48)
 
    InstanceName = Array()
    SmartData = Array()
    SmartLength = Array()
    RowCount = 0
    For Each objItem In SmartDataItems
          Redim Preserve InstanceName(RowCount)
          InstanceName(RowCount) = objItem.InstanceName
          Redim Preserve SmartData(RowCount)
          SmartData(RowCount) = objItem.VendorSpecific
          Redim Preserve SmartLength(RowCount)
          SmartLength(RowCount) = objItem.Length
          RowCount = RowCount + 1
    Next
    Set    SmartDataItems = Nothing
 
    ThresholdData = Array()
    Redim Preserve ThresholdData(RowCount)
    PredictFailure = Array()
    Redim Preserve PredictFailure(RowCount)
    Reason = Array()
    Redim Preserve Reason(RowCount)
 
    RowCount = 0
    Set    ThresholdItems = objWMIService.ExecQuery("SELECT * FROM MSStorageDriver_FailurePredictThresholds", "WQL", 48)
    For Each objItem In ThresholdItems
          ThresholdData(RowCount) = objItem.VendorSpecific
          RowCount = RowCount + 1
    Next
    Set    ThresholdItems = Nothing
 
    RowCount = 0
    Set    PredictStatusItems = objWMIService.ExecQuery("SELECT * FROM MSStorageDriver_FailurePredictStatus", "WQL", 48)
    For Each objItem In PredictStatusItems
          PredictFailure(RowCount) = objItem.PredictFailure
          Reason(RowCount) = objItem.Reason
          RowCount = RowCount + 1
    Next
    Set    PredictStatusItems = Nothing
 
    Set oDict = CreateObject("Scripting.Dictionary")
    CreateDict(oDict)
 
    Set objFSO = CreateObject("Scripting.FileSystemObject")
 
    If strComputer = "." then
       'Set objTextFile = objFSO.OpenTextFile(objFSO.GetSpecialFolder(2) & "\drp\" & "HDD_Smart.csv", 2, True)
       Set objTextFile = objFSO.OpenTextFile(objFSO.GetParentFolderName(WScript.ScriptFullName) & "\HDD_Smart.csv", 2, True)
    else
       'Set objTextFile = objFSO.OpenTextFile(objFSO.GetSpecialFolder(2) & "\drp\" & "HDD_Smart_" & strComputer & ".csv", 2, True)
       Set objTextFile = objFSO.OpenTextFile(objFSO.GetParentFolderName(WScript.ScriptFullName) & "\HDD_Smart_" & strComputer & ".csv", 2, True)
    end If
 
    For CurrentDisk = 0 to RowCount - 1
         objTextFile.WriteLine("Drive: " & Replace(Mid(InstanceName(CurrentDisk), 9, InStr(InstanceName(CurrentDisk), "__") - 9), "_", " "))
         objTextFile.WriteLine("PredictFailure: " & PredictFailure(CurrentDisk))
         objTextFile.WriteLine("Reason: " & Reason(CurrentDisk))
         objTextFile.WriteLine("ID;Attribute;Type;Flag;Threshold;Value;Worst;Raw;Status;")
         aSmartData = SmartData(CurrentDisk)
         aThresholdData = ThresholdData(CurrentDisk)
 
         If IsArray(aSmartData) AND IsArray(aThresholdData) Then
             LastID = 0
             For x = 2 To SmartLength(CurrentDisk) + 2 Step 12
                  If LastID > aSmartData(x)  then
                     x = 514
                  else
                     LastID = aSmartData(x)                   
 
                  If aSmartData(x) <> 0 Then
                      objTextFile.Write(aSmartData(x) & ";")
                      If oDict.Item(aSmartData(x)) = "" Then
                            objTextFile.Write("VendorSpecific(" & aSmartData(x) & ");")
                      else
                            objTextFile.Write(oDict.Item(aSmartData(x)) & ";")
                      end If
 
                      If aSmartData(x + 1) MOD 2 Then
                            objTextFile.Write("Pre-Failure;")
                      Else
                            objTextFile.Write("Advisory;")
                      End If
 
'                      objTextFile.Write(aSmartData(x + 1) & ";")
                      aFlag = aSmartData(x + 1)
                      txtFlag = ""
                      If (aFlag And &H1) <> 0 Then txtFlag = "LC," End If
                      If (aFlag And &H2) <> 0 Then txtFlag = txtFlag & "OC," End If
                      If (aFlag And &H4) <> 0 Then txtFlag = txtFlag & "PR," End If
                      If (aFlag And &H8) <> 0 Then txtFlag = txtFlag &  "ER," End If
                      If (aFlag And &H10) <> 0 Then txtFlag = txtFlag &  "EC," End If
                      If (aFlag And &H20) <> 0 Then txtFlag = txtFlag &  "SP," End If
                      If txtFlag <> "" then
                         txtFlag = Left(txtFlag, Len(txtFlag)-1 )
                      end If
                      objTextFile.Write txtFlag & ";"
 
                      objTextFile.Write(aThresholdData(x + 1) & ";") 'Threshold
                      objTextFile.Write(aSmartData(x + 3) & ";")      'Value
                      objTextFile.Write(aSmartData(x + 4) & ";")      'Worst
                      objTextFile.Write((aSmartData(x + 8) * 65536 + aSmartData(x + 7) * 4096 + aSmartData(x + 6) * 256 + aSmartData(x + 5)) & ";")      'Raw
                      If aSmartData(x + 3) >= aThresholdData(x + 1) Then
                           objTextFile.WriteLine("OK;")
                      else
                           objTextFile.WriteLine("NOT OK;")
                      end If
                  end If
                  end If
             Next
         else
             objTextFile.WriteLine("NO DRIVE WITH SMART FOUND;")
         end If
         'objTextFile.WriteLine
    Next
 
    objTextFile.WriteLine
    objTextFile.WriteLine("LC - life critical;")
    objTextFile.WriteLine("OC - online collection;")
    objTextFile.WriteLine("PR - performance related;")
    objTextFile.WriteLine("ER - error rate;")
    objTextFile.WriteLine("EC - event count;")
    objTextFile.WriteLine("SP - self preserving;")
    objTextFile.Close
 
    Wscript.echo "HDD_SMART Is Done!"
 
Function CreateDict(oDict)
    oDict.Add 1, "Raw Read Error Rate"
    oDict.Add 2, "Throughput Performance"
    oDict.Add 3, "Spin-Up Time"
    oDict.Add 4, "Start/Stop Count"
    oDict.Add 5, "Reallocated Sectors Count"
    oDict.Add 6, "Read Channel Margin"
    oDict.Add 7, "Seek Error Rate Rate"
    oDict.Add 8, "Seek Time Performance"
    oDict.Add 9, "Power-On Hours (POH)"
    oDict.Add 10, "Spin Retry Count"
    oDict.Add 11, "Recalibration Retries Count"
    oDict.Add 12, "Device Power Cycle Count"
    oDict.Add 13, "Soft Read Error Rate"
    oDict.Add 190, "HDA Temperature"
    oDict.Add 191, "G-Sense Error Rate Frequency"
    oDict.Add 192, "Power-Off Park Count"
    oDict.Add 193, "Load/Unload Cycle Count"
    oDict.Add 194, "HDA Temperature"
    oDict.Add 195, "Hardware ECC Corrected Count"
    oDict.Add 196, "Reallocated Event Count"
    oDict.Add 197, "Current Pending Sector Count"
    oDict.Add 198, "Off-Line Scan Uncorrectable Sector Count"
    oDict.Add 199, "UltraDMA CRC Error Count"
    oDict.Add 200, "Write Error Rate"
    oDict.Add 201, "Soft Read Error Rate"
    oDict.Add 202, "Address Mark Errors Frequency"
    oDict.Add 203, "ECC errors (Maxtor: ECC Errors)"
    oDict.Add 204, "Soft ECC Correction"
    oDict.Add 205, "Thermal Asperity Rate (TAR)"
    oDict.Add 206, "Flying Height"
    oDict.Add 207, "Spin High Current"
    oDict.Add 208, "Spin Buzz"
    oDict.Add 209, "Offline Seek Perfomance"
    oDict.Add 210, "Vibration During Write"
    oDict.Add 211, "Vibration During Read"
    oDict.Add 212, "Shock During Write"
    oDict.Add 220, "Disk Shift"
    oDict.Add 221, "G-Sense Error Rate"
    oDict.Add 222, "Loaded Hours"
    oDict.Add 223, "Load/Unload Retry Count"
    oDict.Add 224, "Load Friction"
    oDict.Add 225, "/Unload Cycle Count"
    oDict.Add 226, "Load 'In'-time"
    oDict.Add 227, "Torque Amplification Count"
    oDict.Add 228, "Power-Off Retract Cycle"
    oDict.Add 230, "GMR Head Amplitude"
    oDict.Add 240, "Head Flying Hours"
    oDict.Add 250, "Read Error Retry Rate"
End Function
 
Function GetPassword()
    Dim IE
    On Error Resume Next
   Set IE = CreateObject( "InternetExplorer.Application" )
   With IE
      .AddressBar = False
      .menubar = False
      .Navigate "about:blank"
      .Document.Title = "Password"
      .ToolBar        = False
      .Resizable      = False
      .StatusBar      = False
      .Width          = 340
      .Height         = 230
   End With
   With IE.Document.ParentWindow.Screen
      IE.Left = (.AvailWidth  - IE.Width ) \ 2
      IE.Top  = (.Availheight - IE.Height) \ 2
   End With
   Do While IE.Busy
      WScript.Sleep 200
   Loop
 
   IE.Document.Body.InnerHTML =    "<BODY SCROLL=""NO"" BGCOLOR=""#" & BCol & """ TEXT=""#" & TCol & """>" & _
               "<FONT FACE=""arial"" SIZE=2>" & _
               "Введите имя компьютера<BR><INPUT SIZE=""40"" " & "ID=""Computer""><BR>"  &_
               "Пользователь<BR><INPUT SIZE=""40"" " & "ID=""Login""><BR>" &_
               "Пароль<BR><INPUT TYPE=""password"" SIZE=""40"" " & "ID=""Login"">" &_
               "<P><INPUT TYPE=""hidden"" ID=""OK"" " & "NAME=""OK"" VALUE=""0"">"& _
               "<INPUT TYPE=""submit"" VALUE="" OK "" " & "OnClick=""vbscript:OK.Value=1""></P>"
   strComputer = "."
   strLogin = ""
   strPassword = ""
 
   IE.visible = True
   Do While IE.Document.All.OK.Value = 0
      WScript.Sleep 200
   Loop
 
   If IE.Document.All.Computer.Value = "" then
      strComputer = "."
   else
      strComputer = IE.Document.All.Computer.Value
      If IE.Document.All.Login.Value <> "" then
         strLogin = IE.Document.All.Login.Value
         strPassword = IE.Document.All.Password.Value
      else
         strLogin = ""
         strPassword = ""
      end If
   end If
   IE.Quit
   Set IE = Nothing
End Function
 
Sub Elevate(msg)
     Const DQ = """"
     if msgbox(msg & vblf & "Запустить с Административными привилегиями ?", vbQuestion + vbYesNo,"Подтверждение") = vbNo then WScript.Quit 5
     Dim oShellApp: Set oShellApp = CreateObject("Shell.Application")
     ' Конкатенация аргументов
     Dim args, i: For i = 1 to WScript.Arguments.Count
         args = args & DQ & WScript.Arguments(i - 1) & DQ & " "
     Next
     if len(args) = 0 then args = DQ & syscure & DQ & " " & DQ & syscheck & DQ
     oShellApp.ShellExecute WScript.FullName, DQ & WScript.ScriptFullName & DQ & " " & args, "", "runas", 1
     set oShellApp = Nothing
End Sub
 
Function isAdminRights()
     Const KQV = &H1, KSV = &H2, HKCU = &H80000001, HKLM = &H80000002
     Set oReg = GetObject("winmgmts:root\default:StdRegProv")
     strKey = "System\CurrentControlSet\Control\Session Manager"
     intErrNum = oReg.CheckAccess(HKLM, strKey, KQV + KSV, flagAccess)
     isAdminRights = flagAccess
     Set oReg = Nothing
End Function


Вернуться к обсуждению:
Полезные VBS скрипты и программы по работе с ними VBScript/JScript
Вложения
Тип файла: zip GetSmart.zip (3.9 Кб, 233 просмотров)
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.04.2014, 02:30
Готовые ответы и решения:

Полезные PowerShell скрипты
Здесь публикуются полезные с практической точки зрения сценарии PowerShell или те, что могут...

Полезные BAT/CMD скрипты
В этой теме выкладываем скрипты, которые часто используются Вами или на Ваш взгляд могут иметь...

Как вызвать скрипты .vbs из .wsf?
Добрый день! Пытаюсь освоить WSH с целью автоматического создания фиксированного набора папок в...

VBS, метод POST, заполнение полей и иже с ними
С помощью скрипта лезу на сайт. Далее нужно заполнить поля формы. Тут ступор — как обращаться к...

42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.04.2014, 02:30

Полезные программы для програмистов под VB
Предлагаю сюда скидывать все программы которые упрощают жизнь програмисту. Например: - Программа...

Полезные коды и авторские программы на Lisp
Расскажите, пожалуйста, что на лиспе пишите? вкратце, хотя бы. Очень интересно. Понятно, что...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.