<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBS: Замер температуры HDD]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=5563</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=5563&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS: Замер температуры HDD».]]></description>
		<lastBuildDate>Thu, 13 Jul 2017 17:03:13 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBS: Замер температуры HDD]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=117260#p117260</link>
			<description><![CDATA[<p>После запроса к классу MSStorageDriver_ATAPISmartData, в массиве VendorSpecific (который является свойством экземпляра указанного класса) нужно найти значение VendorSpecific(i) = 194 и запомнить индекс массива i.&nbsp; Элемент VendorSpecific(i+5) содержит значение температуры жесткого диска:</p><p><strong>VBScript</strong><br /></p><div class="codebox"><pre><code>
&#039;----------------------------------------
&#039; Температура жестких дисков
&#039; VBScript
&#039;----------------------------------------
 Option Explicit 

 Dim objService, objAcpi, obj
 Dim i, lTemp

 Set objService = GetObject(&quot;winmgmts:\\.\Root\WMI&quot;)
 Set objAcpi = objService.ExecQuery(&quot;SELECT * FROM MSStorageDriver_ATAPISmartData&quot;)

&#039;----------------------------------------
 For Each obj In objAcpi

	For i = 0 To UBound(obj.VendorSpecific)

		If obj.VendorSpecific(i) = 194 Then 
			WScript.Echo obj.GetObjectText_
			WScript.Echo _
				&quot;Диск: &quot; &amp; obj.InstanceName &amp; vbCRLF &amp; _
				&quot;Температура: &quot; &amp; CStr(obj.VendorSpecific(i + 5)) &amp; Chr(176) &amp; &quot; C&quot;
			Exit For
		End If

	Next

 Next		
</code></pre></div><p>Пример с периодическим опросом температуры жестких дисков и выводом данных в консоль:</p><p><strong>VBScript</strong><br /></p><div class="codebox"><pre><code>
&#039;----------------------------------------
&#039; Получение температуры накопителей с 
&#039; отображением в консоли CScript
&#039; VBScript
&#039;----------------------------------------

 Option Explicit

 Dim oWshShell, objService, objAcpi, obj, u
 Dim sF, sImage, b, sStr, i, j
 Dim i1(10)

 &#039;--------------------------------------------------------
 Set oWshShell = CreateObject(&quot;WScript.Shell&quot;)

 &#039; Запуск сценария консольным интерпретатором CScript
 &#039;--------------------------------------------------------
 sF = CStr(WScript.FullName)
 sImage = Right(sF,Len(sF)-InStrRev(sF, &quot;\&quot;))

 If StrComp(UCase(sImage),&quot;WSCRIPT.EXE&quot;) = 0 Then
	oWshShell.Run &quot;CScript.exe&quot; &amp; Chr(32) &amp; &quot;&quot;&quot;&quot; &amp; WScript.ScriptFullName &amp; &quot;&quot;&quot;&quot;, 1, False
	WScript.Quit()
 End If

 &#039; Получение температуры накопителей
 &#039;--------------------------------------------------------
 Set objService = GetObject(&quot;winmgmts:\\.\Root\WMI&quot;)
 b = False
 sStr = vbNullString

 While 1

	WScript.StdOut.Write sStr
	sStr = vbNullString
	
	&#039; Получение температуры накопителей
	&#039;-------------------------------------------------
	Set objAcpi = objService.ExecQuery(&quot;SELECT * FROM MSStorageDriver_ATAPISmartData&quot;)

	For j = 0 To objAcpi.Count - 1

		Set obj = objAcpi.ItemIndex(j)
		If Not b Then
			For i = 0 To UBound(obj.VendorSpecific) - 1
				If obj.VendorSpecific(i) = 194 Then
					i1(j) = i + 5
					Exit For
				End If
			Next
		End If
		
		sStr = sStr &amp; Time() &amp; vbCRLF &amp; _
			&quot;Диск: &quot; &amp; obj.InstanceName &amp; vbCRLF &amp; _
			&quot;Температура: &quot; &amp; CStr(obj.VendorSpecific(i1(j))) &amp; Chr(176) &amp; &quot; C&quot; &amp; vbCRLF &amp; vbCRLF

		Set obj = Nothing
	Next		
	
	b = True
	Set objAcpi = Nothing


	WScript.Sleep(3000)

	&#039; Очистка консоли (идея wisgest http://forum.script-coding.com/viewtopic.php?pid=80670#p80670)
	&#039;-------------------------------------------------
	Set u = oWshShell.Exec(&quot;mode.com con: lines=0&quot;)
	While u.Status = 0
		WScript.Sleep(10)
	Wend

 Wend
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Poltergeyst)]]></author>
			<pubDate>Thu, 13 Jul 2017 17:03:13 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=117260#p117260</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Замер температуры HDD]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=45775#p45775</link>
			<description><![CDATA[<p>Вот <a href="http://social.msdn.microsoft.com/Forums/en/vbgeneral/thread/d4f7c173-c605-4eeb-95ff-6d3eb1c7869b">здесь</a> инфа немного раскрывается...</p>]]></description>
			<author><![CDATA[null@example.com (Евген)]]></author>
			<pubDate>Thu, 03 Mar 2011 15:43:36 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=45775#p45775</guid>
		</item>
		<item>
			<title><![CDATA[VBS: Замер температуры HDD]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=45756#p45756</link>
			<description><![CDATA[<p>Доброго времени суток всем!</p><p>столкнулся с небольшой проблемочкой в контроле температуры жесткого диска, дабы не вышел из строя. Так вот на просторах сети увидел решение небольшое: с помощью WMI данный аспект возможно разрешить с помощью получения параметров при просмотре контейнера MSStorageDriver_ATAPISmartData</p><p>и вот собственно сам код: <br /></p><div class="codebox"><pre><code>strComputer = &quot;.&quot;
Set objWMIService = GetObject(&quot;winmgmts:\\&quot; &amp; strComputer &amp; &quot;\root\WMI&quot;)
Set colItems = objWMIService.ExecQuery( _
    &quot;SELECT * FROM MSStorageDriver_ATAPISmartData&quot;,,48)
For Each objItem in colItems
    Wscript.Echo &quot;-----------------------------------&quot;
    Wscript.Echo &quot;MSStorageDriver_ATAPISmartData instance&quot;
    Wscript.Echo &quot;-----------------------------------&quot;
    If isNull(objItem.VendorSpecific) Then
        Wscript.Echo &quot;VendorSpecific: &quot;
    Else
        Wscript.Echo &quot;VendorSpecific: &quot; &amp; Join(objItem.VendorSpecific, &quot;,&quot;)
    End If
Next</code></pre></div><p>за недостатком знаний и возникает вопрос: где именно в возвращаемых данных именно наша температура нужного(конкретного) Диска</p><p>подскажите как возможно реализовать вывод информации по конкретному диску ( если их в системе несколько)</p><p>за ранее спасибо</p>]]></description>
			<author><![CDATA[null@example.com (Space-06)]]></author>
			<pubDate>Wed, 02 Mar 2011 18:57:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=45756#p45756</guid>
		</item>
	</channel>
</rss>
