Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

  • hampeleman
  • Registratie: April 2010
  • Laatst online: 20-11 13:09
Beste,

Ik ben op dit moment Powershell aan het leren. dit wil nog niet echt vlotten;)
Wat ik graag wil is al mijn drives monitoren behalve mijn cd-rom drive.
Met cd-rom drive heb ik het wel voor elkaar maar zonder de drive niet.
het probleem is dat ik meerdere "Drivetypes" heb. namelijk 3,4,5 en dat ik alleen 5(cd-rom drive) wil excluden.
Nu kan ik een filter maken voor alleen 3. Onderstaande werkt gewoon.
Get-WmiObject Win32_LogicalDisk -filter DriveType='3'
Wat ik graag wil is iets als dit:
Get-WmiObject Win32_LogicalDisk -filter DriveType='3' OR Drivetype='4'
of
Get-WmiObject Win32_LogicalDisk -filter DriveType=NOT'5'.

De -ne functie werkt ook niet bij dit commando.
Get-WmiObject Win32_LogicalDisk -filter { "DriveType -ne "5"}

Nu heb ik me op google het apenzuur gezocht maar ik zie overal alleen forums over maar 1 filter maar geen enkele over meer filter opties of een filter met de =not optie.

Weet iemand of dit überhaupt mogelijk is zonder een foreach loop te maken met daarin if statements?

  • hampeleman
  • Registratie: April 2010
  • Laatst online: 20-11 13:09
Get-WmiObject -Query "select * from win32_LogicalDisk where (DriveType != 5)" werkt wel.

Is er in de getwmiobject win32_logicaldisk -filter geen optie die duidt op not equal to?

  • hampeleman
  • Registratie: April 2010
  • Laatst online: 20-11 13:09
laat maar syntax error die ik gebruik:)
werkt dus wel met != commando.

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Eerst en vooral: er is een edit-knop met een reden.

OT:

Dat is nu niet echt de beste plek om te beginnen met het leren van PoSh vind ik, tenzij je sowieso al thuis bent in WMI. Met -Query en -Filter kom je in ieder geval terecht in de syntax van de WMI Query Language (WQL). Dat heeft niets met de syntax van PoSh te zien, vandaar dat de PoSh-operatoren ook niet werken.

Er valt te argumenteren dat -Query en -Filter efficiënter zijn, maar in casu denk ik dat de beste methode is om de hele zooi op te vragen en dan op z'n Powershells te filteren in de pipeline:

C#:
1
Get-WmiObject Win32_LogicalDisk | Where-Object {$_.DriveType -NE 5}


Met wat tussen de accolades staat kan je zelf wel creatief zijn denk ik. Dat voorbeeld is tenslotte wat jou wou bereiken met Get-WmiObject Win32_LogicalDisk -filter { "DriveType -ne "5"}.

Of voor je andere voorbeeld, Get-WmiObject Win32_LogicalDisk -filter DriveType='3' OR Drivetype='4':

C#:
1
Get-WmiObject Win32_LogicalDisk | Where-Object {($_.DriveType -EQ 3) -Or ($_.DriveType -EQ 4)}


Trouwens, het volgende had ook gewerkt (Edit: had je intussen zelf gezien blijkbaar):
Get-WmiObject Win32_LogicalDisk -filter DriveType!=5
tl;dr
Je haalt de syntax can PoSh en WQL door elkaar.




PS. In Powershell - en bij uitbreiding eigenlijk alle script- en programmeertalen - wordt een onderscheid gemaakt tussen een string (tussen aanhalingstekens) en een getal (zonder aanhalingstekens). Dat betekent dat:

$a = "1" ; is correct. 1 is een tekst
$b = 1 ; is correct. 1 is een getal
$c = "hallo" : is correct. hallo is een tekst
$d = hallo ; zal een foutmelding geven, aangezien hij hallo als een getal probeert te interpreteren

Maar wat is het verschil tussen 1 (getal) en "1" (tekst)? Wel, gegeven bovenstaande waarden:
$b + $b = 2, want 1 + 1 = 2
$a + $a = 11, want de tekst 1 na de tekst 1 is gewoon "11"
$c + $b = "hallo1", beide worden als tekst behandeld daar de eerste variabele tekst is en de tweede ook als dusdanig beschouwd wordt.
$b + $c = foutmelding, aangezien hier beiden als getal geïnterpreteerd worden. 1 viel nog om te zetten van getal naar tekst, maar hallo omzetten naar een getal is... moeilijk.

tl;dr
Al is PoSh nogal vergevingsgezind, er horen geen aanhalingstekens rond getallen, tenzij dat een echte reden heeft (dwz. je expliciet een getal als tekst behandelen wil, zoals bv. een telefoonnummer).

[ Voor 33% gewijzigd door YellowOnline op 05-08-2015 13:08 ]


  • hampeleman
  • Registratie: April 2010
  • Laatst online: 20-11 13:09
Hoi YellowOnline,

dank voor je reactie!
Excuus dat ik de edit knop niet heb gebruikt. Zal er op letten.
Ik ben bekend met SQL queries dus dat is toch net iets anders dan WQL.
Verder kwam ik er gewoon echt niet uit en dat komt dus waarschijnlijk omdat ik inderdaad beide talen door elkaar haal gaat het mis. Daar ben ik nu achter dankzij jouw reactie:)
Ik spreek eerst WQL om vervolgens een PoSh filter commando te geven. Nu zie ik dat dit logisch is.
Zal er vanaf nu zeker op letten:)