Kezdőlap > General > 32/64 bit detect using WMI

32/64 bit detect using WMI


Sokáig nem foglalkoztam a WMI lekérdezésekkel. Tudtam, hogy léteznek, meg hogy pl. GPO-k esetén kiválóan lehet velük szűrni – de ennyi.
A napokban viszont konkrét probléma kapcsán nekiálltam nyomozni – konkrétan a tárgybeli kérdés után. Vagyis: ha van egy hálózatom, benne 32 bites és 64 bites gépekkel, akkor egyes házirendeket mi alapján tudom hozzájuk rendelni, szétválogatva?
 
Utánajárva, több módszer is létezik, viszont a legjavasoltabb a WMI. Ez ugyanis natívan támogatott, több házirendhez hozzá lehet rendelni, nem kell registryt matatni, nem kell környezeti változókkal foglalkozni – ott van a beépített lehetőség.
 
S hogy mi a lekérdezés? Egyszerű (mint minden, ha tudjuk a választ Smile):
 
64-bit: SELECT * FROM Win32_Processor WHERE AddressWidth=64
32-bit: SELECT * FROM Win32_Processor WHERE AddressWidth=32
 
Ha ennél mélyebbre szeretnénk ásni, akkor még a következők lehetnek érdekesek:
SELECT * FROM Win32_Processor WHERE Architecture=0, 32 bites x86 rendszerekhez
SELECT * FROM Win32_Processor WHERE Architecture=9, 64 bites x86 (vagyis x64)
SELECT * FROM Win32_Processor WHERE Architecture=1, MIPS esetén
SELECT * FROM Win32_Processor WHERE Architecture=2, Alpha esetén
SELECT * FROM Win32_Processor WHERE Architecture=3, PowerPC esetén
SELECT * FROM Win32_Processor WHERE Architecture=6, Itanium esetén
 
Bár sok helyen azt állítják, ezek nem a valódi hardver képességeit kérdezik le, hanem az op-rendszer alapján döntik el, hogy a vasunk milyen… Tehát az alapkérdésre a válaszunk megvan, de a következő felmerülő kérdésre (fizikai gépünk milyensége) még nincs…
 
Ja, s hogy mivel teszteljük le? Több lehetőségünk is van, az egyik a WbemTest-el (fenti lekérdezések), amivel a rootCIMv2-re csatlakozunk. Másik lehetőségként ott a "mindentudó" PowerShell:
 
$strComputerName = "."
$strCpuArchitecture = ""
$intCurrentAddressWidth = 0
$intSupportableAddressWidth = 0

$objWmi = Get-WmiObject -class "Win32_Processor" -namespace "rootcimV2"

$intCurrentAddressWidth = $objWmi.AddressWidth
$intSupportableAddressWidth = $objWmi.DataWidth

switch ($objWmi.Architecture)
{
  0 {$strCpuArchitecture = "x86"}
  1 {$strCpuArchitecture = "MIPS"}
  2 {$strCpuArchitecture = "Alpha"}
  3 {$strCpuArchitecture = "PowerPC"}
  6 {$strCpuArchitecture = "Itanium"}
  9 {$strCpuArchitecture = "x64"}
}

# Eredetileg ez a "masodik kerdes" megoldasanak szant lekerdezes, de mivel sajnos nem kezeli rendesen, igy mindig csak az elso sor kerul kiirasra
if ($intCurrentAddressWidth -eq $intSupportableAddressWidth)
{
  "System Type: $intCurrentAddressWidth-bit operating system – Processor Architecture: $strCpuArchitecture"
}
else
{
  "System Type: $intCurrentAddressWidth-bit operating system ($intSupportableAddressWidth-bit capable) – Processor Architecture: $strCpuArchitecture"
}

Amit még tapasztaltam: PS nem működik minden esetben. Konkrétan szerverek esetén a Wbemtest-el le tudom kérdezni, de a PS nem irja ki a kert adatokat Disappointed

Reklámok
Kategóriák:General
  1. Még nincs hozzászólás.
  1. No trackbacks yet.

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s

%d blogger ezt kedveli: