Aktionen

WMI-Filter Desktop Notenbook Laptop Server

Aus znilwiki

Die Idee zu den WMI-Filtern stammen aus folgender Quelle: http://woshub.com/sccm-and-wmi-query-to-find-all-laptops-and-desktops/


Vorwort

Ein Kunde benötige WMI-Filter abseits von den üblichen "Nur Windows Server" oder "Nur Windows Workstations", es ging darum eine Gruppenrichtlinie nur auf Client-PC auszuführen, NICHT auf Laptops/Notebooks. Auf der Suche danach findet man den üblichen Tipp nach der Batterie zu fragen. Das klappt auch zuverlässig um Notebooks zu erkennen. Aber eben nicht um Notebooks auszuschließen da es auf Desktops diese WMI-Klasse nicht gibt und die Abfrage somit fehlschlägt.
Die nachfolgenden Filter habe ich auf Kundenanfrage hin erstellt und diese unterliegen folgenden Einschränkungen:

  • Sie funktionieren nicht mit virtuellen Maschinen - diese liefern in der Regel nur "Other" (ChassisTypes) oder "'Unspecified" (PCSystemType) zurück. Die Filter hier habe ich so erstellt das diese auf VMs nicht greifen
  • Bei jedem Abschnitt ist ein einfacher wmic-Aufruf dabei - mit dem Testet Ihr bitte vorher ob der Filter auf euren Systemen funktioniert!



Erstellen der WMI-Filter

Gilt für alle nachfolgenden Regeln:

Öffnet die Gruppenrichtlinienverwaltung und navigiert zu den WMI-Filtern:

ClipCapIt-181121-093421.PNG

Im rechten Bereich könnt Ihr dann per Rechtsklick => Neu einen neuen Filter erstellen:

ClipCapIt-181121-093629.PNG

im Dialog könnt Ihr dann den Namen und die Beschreibung eingeben - und über Hinzufügen den eigentlichen Filter.


Die WMI Filter



Nur Desktops Variante 1: ChassisTypes

Warning.png
Warnung: Dieser WMI-Filter funktioniert nicht! Grund ist das die Abfrage ein Array zurück gibt und Arrays bei WMI-Filtern nicht verarbeitet werden können! Man könnte das ganze hier also nur in einem Skript nutzen!


Ihr testet diese Abfrage in einer Eingabeaufforderung mit diesem Befehl:

wmic PATH Win32_SystemEnclosure GET ChassisTypes

Beispielausgabe:

{10}

Bedeutung der Werte:

1            = "Sonstige"
2            = "Unbekannt"
3            = "Desktop"
4            = "Low Profile Desktop"
5            = "Pizza-Box"
6            = "Mini-Tower"
7            = "Tower"
8            = "Portable"
9            = "Laptop"
10           = "Notebook"
11           = "Handheld"
12           = "Dockingstation"
13           = "All-in-One"
14           = "Sub-Notebook"
15           = "Space Saving"
16           = "Lunch Box"
17           = "Hauptsystemgehäuse"
18           = "Expansion Chassis"
19           = "Sub-Chassis"
20           = "Bus-Erweiterungschassis"
21           = "Peripheral Chassis"
22           = "Storage Gehäuse"
23           = "Rack Mount Chassis"
24           = "Sealed PC-Fall"
alle anderen = "Unbekannt"


Warning.png
Warnung: Dieser WMI-Filter funktioniert nicht! Grund ist das die Abfrage ein Array zurück gibt und Arrays bei WMI-Filtern nicht verarbeitet werden können! Man könnte das ganze hier also nur in einem Skript nutzen!


Der WMI-Filter dazu:

Name:          Nur Desktops  ChassisTypes
Beschreibung:  Abfrage über Win32_SystemEnclosure - ChassisTypes

Abfrage: (Namespace: root\CIMv2)
select * from Win32_SystemEnclosure where ChassisTypes = "3" or ChassisTypes = "4" or ChassisTypes = "5" or ChassisTypes = "6" or ChassisTypes = "7" or ChassisTypes = "15" or ChassisTypes = "16"
ClipCapIt-181121-101352.PNG


Test der Abfrage in der PowerShell:

gwmi -Query 'select * from Win32_SystemEnclosure where ChassisTypes = "3" or ChassisTypes = "4" or ChassisTypes = "5" or ChassisTypes = "6" or ChassisTypes = "7" or ChassisTypes = "15" or ChassisTypes = "16"'



Nur Desktops Variante 2: PCSystemType

Ihr testet diese Abfrage in einer Eingabeaufforderung mit diesem Befehl:

wmic PATH Win32_Computersystem GET PCSystemType

Beispielausgabe:

2

Bedeutung der Werte:

0  = Unspecified
1  = Desktop
2  = Mobile
3  = Workstation
4  = Enterprise Server
5  = Small Office and Home Office (SOHO) Server
6  = Appliance PC
7  = Performance Server
8  = Maximum


Der WMI-Filter dazu:

Name:          Nur Desktops PCSystemType
Beschreibung:  Abfrage über Win32_ComputerSystem - PCSystemType

Abfrage: (Namespace: root\CIMv2)
SELECT * FROM Win32_ComputerSystem WHERE PCSystemType = 1
ClipCapIt-181121-101528.PNG

Alternativ: Desktops und Workstations:

SELECT * FROM Win32_ComputerSystem WHERE PCSystemType = 1 OR PCSystemType = 3



Nur Notebooks Variante 1: PCSystemType

Entspricht ansonsten "Desktops Variante 2":

Name:          Nur Notebooks PCSystemType
Beschreibung:  Abfrage über Win32_ComputerSystem - PCSystemType

Abfrage: (Namespace: root\CIMv2)
SELECT * FROM Win32_ComputerSystem WHERE PCSystemType = 2
ClipCapIt-181121-100109.PNG



Nur Notebooks Variante 2: BatteryStatus

Funktioniert nur bei Notebooks (oder Rechner mit z.B. per USB verbundener USV)
Ihr testet diese Abfrage in einer Eingabeaufforderung mit diesem Befehl:

wmic PATH Win32_Battery GET BatteryStatus 

Beispielausgabe:

2

Bedeutung der Werte:

Jeder andere Wert als 0 gibt einen Zustand des Batteriestatus an:
1  = Other (The battery is discharging)
2  = Unknown (The system has access to AC so no battery is being discharged. However, the battery is not necessarily charging)
3  = Fully Charged
4  = Low
5  = Critical
6  = Charging
7  = Charging and High
8  = Charging and Low
9  = Charging and Critical
10 = Undefined
11 = Partially Charged

Der WMI-Filter dazu:

Name:          Nur Notebooks BatteryStatus
Beschreibung:  Abfrage über Win32_Battery - BatteryStatus 

Abfrage: (Namespace: root\CIMv2)
SELECT * FROM Win32_Battery WHERE (BatteryStatus <> 0)
ClipCapIt-181121-100931.PNG



Nur Notebooks Variante 3: ChassisTypes

Warning.png
Warnung: Dieser WMI-Filter funktioniert nicht! Grund ist das die Abfrage ein Array zurück gibt und Arrays bei WMI-Filtern nicht verarbeitet werden können! Man könnte das ganze hier also nur in einem Skript nutzen!


Entspricht ansonsten "Desktops Variante 1":

Name:          Nur Notebooks ChassisTypes
Beschreibung:  Abfrage über Win32_SystemEnclosure - ChassisTypes

Abfrage: (Namespace: root\CIMv2)
select * from Win32_SystemEnclosure where ChassisTypes = "8" or ChassisTypes = "9" or ChassisTypes = "10" or ChassisTypes = "11" or ChassisTypes = "12" or ChassisTypes = "14" or ChassisTypes = "18" or ChassisTypes = "21"
ClipCapIt-181121-094451.PNG



Kommentare

Loading comments...