Verwijderen van objecten uit de pijplijn (Where-Object)Removing Objects from the Pipeline (Where-Object)

In Windows PowerShell kunt u vaak genereren en doorgegeven meer objecten voor een pijplijn dan u wenst.In Windows PowerShell, you often generate and pass along more objects to a pipeline than you want. U kunt opgeven dat de eigenschappen van bepaalde objecten worden weergegeven met behulp van de indeling cmdlets, maar dit niet helpt met het probleem van het gehele objecten verwijderen uit de weergave.You can specify the properties of particular objects to display by using the Format cmdlets, but this does not help with the problem of removing entire objects from the display. U wilt filteren, objecten vóór het einde van een pijplijn, zodat u acties op slechts een subset van de objecten in eerste instantie gegenereerd uitvoeren kan.You may want to filter objects before the end of a pipeline, so you can perform actions on only a subset of the initially-generated objects.

Windows PowerShell omvat een Where-Object u elk object in de pijplijn te testen en alleen langs de pijplijn te doorgeven kunt als deze voldoet aan de voorwaarde van een afzonderlijke test-cmdlet.Windows PowerShell includes a Where-Object cmdlet that allows you to test each object in the pipeline and only pass it along the pipeline if it meets a particular test condition. Objecten die niet door de test worden verwijderd vanuit de pipeline.Objects that do not pass the test are removed from the pipeline. U de testvoorwaarde opgeven als de waarde van de Where-Object FilterScript parameter.You supply the test condition as the value of the Where-Object FilterScript parameter.

U eenvoudige tests uitvoert met de Where-ObjectPerforming Simple Tests with Where-Object

De waarde van FilterScript is een scriptblok -een of meer Windows PowerShell-opdrachten omgeven door accolades {} -die resulteert in op true of false.The value of FilterScript is a script block - one or more Windows PowerShell commands surrounded by braces {} - that evaluates to true or false. Deze scriptblokken is zeer eenvoudig, maar ze worden gemaakt moet weten over een andere Windows PowerShell-concept vergelijkingsoperators.These script blocks can be very simple, but creating them requires knowing about another Windows PowerShell concept, comparison operators. Een vergelijkingsoperator vergelijkt de items die worden weergegeven voor elke zijde van deze.A comparison operator compares the items that appear on each side of it. Vergelijkingsoperators beginnen met een '-' teken en worden gevolgd door een naam.Comparison operators begin with a '-' character and are followed by a name. Basic vergelijkingsoperators werken op vrijwel elke soort object.Basic comparison operators work on almost any kind of object. De meer geavanceerde vergelijkingsoperators mogelijk werken alleen op tekst- of -matrices.The more advanced comparison operators might only work on text or arrays.

Notitie

Als u werkt met tekst zijn, Windows PowerShell-vergelijkingsoperators standaard niet hoofdlettergevoelig.By default, when working with text, Windows PowerShell comparison operators are case-insensitive.

Symbolen zoals <>, vanwege het parseren van de overwegingen en = niet als vergelijkingsoperators worden gebruikt.Due to parsing considerations, symbols such as <,>, and = are not used as comparison operators. In plaats daarvan vergelijkingsoperators bestaan uit letters.Instead, comparison operators are comprised of letters. De basic vergelijkingsoperators worden weergegeven in de volgende tabel.The basic comparison operators are listed in the following table.

VergelijkingsoperatorComparison Operator BetekenisMeaning Voorbeeld (' true ' geretourneerd)Example (returns true)
-eq-eq is gelijk aanis equal to 1 - eq 11 -eq 1
-ne-ne Is niet gelijk aanIs not equal to 1 - ne 21 -ne 2
-lt-lt Is kleiner danIs less than 1 - lt 21 -lt 2
-RP-le Is kleiner dan of gelijk aanIs less than or equal to 1 - RP 21 -le 2
-gt-gt Is groter danIs greater than 2 - gt 12 -gt 1
-ge-ge Is groter dan of gelijk aanIs greater than or equal to 2 -ge 12 -ge 1
-zoals-like Lijkt (vergelijking van jokertekens voor tekst)Is like (wildcard comparison for text) "bestand.doc'-zoals ' f*basisbedrijfstoepassingen?""file.doc" -like "f*.do?"
-notlike-notlike Is geen zoals (vergelijking van jokertekens voor tekst)Is not like (wildcard comparison for text) 'bestand.doc'-notlike ' p*.doc '"file.doc" -notlike "p*.doc"
-bevat-contains BevatContains 1,2,3 - 1 bevat1,2,3 -contains 1
-notcontains-notcontains Bevat geenDoes not contain 1,2,3 - notcontains 41,2,3 -notcontains 4

De speciale variabele '$' WHERE-Object scriptblokken gebruiken om te verwijzen naar het huidige object in de pijplijn.Where-Object script blocks use the special variable '$' to refer to the current object in the pipeline. Hier volgt een voorbeeld van hoe het werkt.Here is an example of how it works. Als u een lijst met getallen hebben en retourneren van de waarden die minder dan 3 zijn, kunt u Where-Object voor het filteren van de getallen door te typen:If you have a list of numbers, and only want to return the ones that are less than 3, you can use Where-Object to filter the numbers by typing:

PS> 1,2,3,4 | Where-Object -FilterScript {$_ -lt 3}
1
2

Filteren op basis van eigenschappen van het ObjectFiltering Based on Object Properties

Aangezien $ naar de huidige pipeline-object verwijst, wordt toegang tot de eigenschappen voor onze tests.Since $ refers to the current pipeline object, we can access its properties for our tests.

Als u bijvoorbeeld kunt kijken we de klasse Win32_SystemDriver in WMI.As an example, we can look at the Win32_SystemDriver class in WMI. Er zijn mogelijk honderden besturingsprogramma's op een bepaald systeem, maar u mogelijk alleen geïnteresseerd zijn in een bepaalde set van het besturingsprogramma's, zoals die momenteel worden uitgevoerd.There might be hundreds of system drivers on a particular system, but you might only be interested in a particular set of the system drivers, such as those which are currently running. Als u lid zijn van Get Win32_SystemDriver leden weergeven (Get-WmiObject-klasse Win32_SystemDriver | De eigenschap Get-Member - MemberType) ziet u dat de relevante eigenschap status is en dat er een waarde van het 'Uitvoeren' wanneer het stuurprogramma wordt uitgevoerd.If you use Get-Member to view Win32_SystemDriver members (Get-WmiObject -Class Win32_SystemDriver | Get-Member -MemberType Property) you will see that the relevant property is State, and that it has a value of "Running" when the driver is running. U kunt de systeem-stuurprogramma's filteren selecteren uitgevoerd die door te typen:You can filter the system drivers, selecting only the running ones by typing:

Get-WmiObject -Class Win32_SystemDriver | Where-Object -FilterScript {$_.State -eq 'Running'}

Dit resulteert in nog steeds een lange lijst.This still produces a long list. U wilt filteren zodat alleen de stuurprogramma's automatisch worden gestart door de waarde van StartMode ook testen selecteren:You may want to filter to only select the drivers set to start automatically by testing the StartMode value as well:

PS> Get-WmiObject -Class Win32_SystemDriver | Where-Object -FilterScript {$_.State -eq "Running"} | Where-Object -FilterScript {$_.StartMode -eq "Auto"}

DisplayName : RAS Asynchronous Media Driver
Name        : AsyncMac
State       : Running
Status      : OK
Started     : True

DisplayName : Audio Stub Driver
Name        : audstub
State       : Running
Status      : OK
Started     : True

Dit biedt ons veel informatie die we niet meer nodig omdat we weten dat de stuurprogramma's worden uitgevoerd.This gives us a lot of information we no longer need because we know that the drivers are running. De enige informatie die we waarschijnlijk nodig hebt op dit moment zijn in feite de naam en de weergavenaam.In fact, the only information we probably need at this point are the name and the display name. De volgende opdracht bevat alleen deze twee eigenschappen, wat resulteert in veel eenvoudiger uitvoer:The following command includes only those two properties, resulting in much simpler output:

PS> Get-WmiObject -Class Win32_SystemDriver | Where-Object -FilterScript {$_.State -eq "Running"} | Where-Object -FilterScript {$_.StartMode -eq "Manual"} | Format-Table -Property Name,DisplayName

Name                                    DisplayName
----                                    -----------
AsyncMac                                RAS Asynchronous Media Driver
Fdc                                     Floppy Disk Controller Driver
Flpydisk                                Floppy Disk Driver
Gpc                                     Generic Packet Classifier
IpNat                                   IP Network Address Translator
mouhid                                  Mouse HID Driver
MRxDAV                                  WebDav Client Redirector
mssmbios                                Microsoft System Management BIOS Driver

Er zijn twee elementen van de Where-Object in de bovenstaande opdracht, maar ze kunnen worden uitgedrukt in een enkel element in de Where-Object met behulp van de - en de logische operator, als volgt:There are two Where-Object elements in the above command, but they can be expressed in a single Where-Object element by using the -and logical operator, like this:

Get-WmiObject -Class Win32_SystemDriver | Where-Object -FilterScript { ($_.State -eq 'Running') -and ($_.StartMode -eq 'Manual') } | Format-Table -Property Name,DisplayName

De standaard logische operators worden weergegeven in de volgende tabel.The standard logical operators are listed in the following table.

Logische OperatorLogical Operator BetekenisMeaning Voorbeeld (' true ' geretourneerd)Example (returns true)
- en-and Logische en; True als aan beide zijden wordt voldaanLogical and; true if both sides are true (1 - eq 1) - en (2 - eq 2).(1 -eq 1) -and (2 -eq 2)
- of-or Logische of; True als beide zijden ingesteld op true isLogical or; true if either side is true (1 - eq 1) - of (1 - eq 2).(1 -eq 1) -or (1 -eq 2)
-niet-not Logische not; keert true en falseLogical not; reverses true and false -niet (1 - eq 2)-not (1 -eq 2)
! Logische not; keert true en falseLogical not; reverses true and false !(1 - eq 2)!(1 -eq 2)