Obecne temperatury są uciążliwe nie tylko dla nas – organizmów opartych o białka i węgiel, ale też dla naszych półprzewodnikowych, krzemowych gadżetów. Dotyczy to również komputerów oraz ich procesorów. Jak każde układy scalone, mają one tendencję do nagrzewania się – czasem nadmiernego. Dlatego dobrze jest monitorować temperaturę procesora.
Istnieje oczywiście wiele gotowych aplikacji, które na to pozwalają, ale przecież zawsze fajniej jest zakodować coś samemu, nieprawdaż? :) A już zupełnie świetnie jest wtedy, gdy użyjemy do tego naszego ulubionego narzędzia do administrowania systemem, czyli PowerShella.
Przy jego pomocy pobranie aktualnej temperatury procesora nie jest trudne. Posługujemy się do tego WMI – Windows Management Instrumentation – które to jest rozszerzeniem modelu sterowników systemu Windows, pozwalającym m.in. na monitorowanie różnego rodzaju informacji diagnostycznych. PowerShell zawiera wbudowane komendy, pozwalające na tworzenie obiektów WMI – wśród nich również takich, które udostępniają informacje na temat temperatury procesora:
Z bliżej nieokreślonych powodów wartość temperatury podawana jest w dziesiątych częściach kelwinów, więc konieczne jest ich przeliczenie na stopnie Celsjusza. Ponadto istnieje też prawdopodobieństwo, że używana tutaj klasa WMI o nazwie MSAcpi_ThermalZoneTemperature
nie jest dostępna na naszym komputerze – zależy to prawdopodobnie od modelu jego płyty głównej. W moim przypadku powyższy kod działał bez problemu na komputerze stacjonarnym, lecz nie na laptopie. Może to i dobrze… Mam bowiem uzasadnione przeczucie, że temperatura tamtejszego procesora wcale by mi się nie spodobała ;)
jest:Obecne temperatury są uciążliwe nie tylko dla nas – organizmów opartych o białka i węgiel, ale też dla naszych półprzewodnikowych, krzemowych gadżetów.
powinno być:Obecne temperatury są uciążliwe nie tylko dla nas – organizmów opartych o białka i węgiel, ale też dla naszych półprzewodnikowych, krzemowych braci.
Z bliżej nieokreślonych powodów wartość temperatury podawana jest w dziesiątych częściach kelwinów (…)
Hmm, może to dlatego, żeby całość “wcisnąć” do unsigned int’a? Stopnie Celsjusza są jednostką pochodną (co rodzi pytanie, dlaczego w ogóle jej używamy?); przejście na kelwiny uwalnia nas od ujemnych wartości. A dziesiąte części stopnia związane są pewnie z dokładnością pomiaru, jaką chce nam pokazać WMI.
That’s my guess, at least.
A na mojej stacjonarce nie dziala :P Ale nie chce mi sie sprawdzac dlaczego.
A białka nie zawierają węgla? :P
Pod PowerShellem z Windows 7 jest jakis blad parsowania czy inne cholerstwo ;)
Missing expression after unary operator '-'.
At C:\Users\XXX\Desktop\cpu_temp.ps1:4 char:6
+ - <<<< Namespace "root\WMI" -ErrorAction SilentlyContinue
+ CategoryInfo : ParserError: (-:String) [], ParseException
+ FullyQualifiedErrorId : MissingExpressionAfterOperator
@vashpan: Linijka z wywołaniem Get-WmiObject jest złamana tylko po to, żeby nie wystawała na pasek boczny na stronie :) W rzeczywistym skrypcie powinien być to tylko jeden wiersz.
@TeMPOraL: Że to są kelwiny, to niedziwne, ale zaskakujące są te 1/10. Przecież IEEE to uniwersalny standard liczb zmiennoprzecinkowych, więc nie widzę powodu, by nie używać tutaj floatów :)
A to akurat nie dziwne – po to żeby nie ośmieszać się nieznaczącymi cyframi w n-tym miejscu po przecinku, oraz, większość czujników przekazuje temperaturę liczba 12to bitową, w zakresie od -128 do 127*C , z dokładnością 1/16 stopnia (0.0625), co po zaokrągleniu da 0.1 :D
Znalazłem przyczynę ‘niedziałania’ – na Win7 (x86 Home Premium) potrzebne są uprawienia administratora do odczytu temperatury.
@Xion: liczby zmiennoprzecinkowe są niby standardem, jednak standardem przekazywania wartości w Windows API jest (zwykle) DWORD. Wszelkie FLOATy są używane tak rzadko, jak to możliwe – stąd może taki wybór jednostki?