Jump to content
Melde dich an, um diesen Inhalt zu abonnieren  
TheCracked

wim select in der PS prüfen

Empfohlene Beiträge

Hallo Zusammen,

 

wie kann ich ein erstellten querry für einen wmi Filter in der PS auf Richtigkeit testen?

 

WMI querry sieht so aus:

(Es soll geprüft werden, ob das OS ein Windows Server 2016 ist, auch wenn es sich um einen DC handelt..)

 

select * from Win32_OperatingSystem where Version like "10.%" and ProductType="3" or ProductType="2"

 

Wie kann ich denn in der PS testen, ob der select so korrekt ist?

Es sollte ja ein true oder false zurück kommen.

 

Habe in der PS schon so was probiert, jedoch ohne Erfolg:

Get-WmiObject -Class win32_operatingsystem -namespace root/cimv2 | where Version like "10.%" and ProductType="3" or ProductType="2"

-------------

Where-Object : A positional parameter cannot be found that accepts argument '10.%'.
At line:1 char:30
+ ... ingsystem | where Version like '10.%' and ProductType="3" or ProductT ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Where-Object], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.WhereObjectCommand

 

Grüße

TC

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Es gibt von MSFT einen WMI-Code Creator, der erstellt dir Scripte on the Fly. Hier gehts zum Download: https://www.microsoft.com/en-us/download/details.aspx?id=8572

Ansonsten einfach selbst ein Script dafür erstellen und abfragen.

 


strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM Win32_OperatingSystem",,48) 
For Each objItem in colItems 
    Wscript.Echo "-----------------------------------"
    Wscript.Echo "Win32_OperatingSystem instance"
    Wscript.Echo "-----------------------------------"
    Wscript.Echo "ProductType: " & objItem.ProductType
Next

 

Jetzt brauchst Du nur noch deinen SELECT an der richtigen Stelle einfügen.

 

BTW: Auch wenn es schnell geht, ersetze das * durch eine Property, die es auch gibt. Damit geht das Script nochmal schneller.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Der ProductType in der WMI-Klasse OperationgSystem unterscheidet meines Wissens zwischen Workstation, Server (nicht nur 2016) und Domain Controller. Wenn Du in einem Where-Object-Filter Bedingungen verknüpfen willst, musst Du die "Script-Schreibweise" nehmen. Und ich würde die etwas modernere Variante empfehlen. Also so ungefähr:

Get-CimInstance -ClassName CIM_OperatingSystem |
    Where-Object -FilterScript {$_.Version -like '10.*' -and ($_.ProductType -eq 3 -or $_.ProductType -eq 2)}

Es wird aber kein True oder false zurückgeliefert, sondern ein Object vom Typ "Microsoft.Management.Infrastructure.CimInstance#root/cimv2/Win32_OperatingSystem". Du könntest aber auch einfach erst mal das Object "einsammeln" und dann die gewünschten Properties prüfen. Also so ungerfähr:

$OS = Get-CimInstance -ClassName CIM_OperatingSystem 
If($OS.Version -like '10.*' -and ($_.ProductType -eq 3 -or $_.ProductType -eq 2)){
    'Jawoll'
}
Else{
    'Nö'
}

Ich würde empfehlen, sich die Grundlagen von Powershell anzueignen. Einen guten Einstieg gibt's bei Microsoft in der Virtual Academy:

Microsoft Virtual Academy - Getting Started with Microsoft PowerShell

Viel Spaß

bearbeitet von BOfH_666

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Danke für deinen Beitrag..

Das werde ich mir wenn ein bisschen Zeit ist auch mal ansehen.

 

Viele Grüße

 

edit:

 

Wenn ich aber einen wmi filter für ein gpo erstelle, muss in dem select schon diese Schreibweise stehen oder?

 

select * from Win32_OperatingSystem where Version like "10.%" and ProductType="3"

 

 

bearbeitet von TheCracked

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Ich bin jetzt auch nicht der GPO-WMI-Filter-Profi, aber das sieht für mich von der Syntax her ganz plausibel aus.  :thumb1::-)   ... aber im Zweifel kannst Du es ja bevor Du es "produktiv" ausrollst nochmal testen.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
vor 3 Stunden schrieb TheCracked:

Wenn ich aber einen wmi filter für ein gpo erstelle, muss in dem select schon diese Schreibweise stehen oder?

 

select * from Win32_OperatingSystem where Version like "10.%" and ProductType="3"

 

Sollte IMO so passen. Testen musst Du schon selbst. ;)

 

BTW: Schau bei Martin Binder in Sachen GPO und Performance: http://evilgpo.blogspot.de/2014/11/wmi-filter-performance-in-group-policy.html Es gibt noch weitere Artikel bei ihm zu dem Thema zu finden.

  • Like 1

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
Melde dich an, um diesen Inhalt zu abonnieren  

×