Usuwanie obiektów z potoku (Where-Object)Removing Objects from the Pipeline (Where-Object)

W programie Windows PowerShell możesz często Generowanie i przekazują więcej obiektów do potoku niż potrzebujesz.In Windows PowerShell, you often generate and pass along more objects to a pipeline than you want. Można określić właściwości określonego obiektów przeznaczonych do wyświetlenia przy użyciu Format poleceń cmdlet, ale nie jest pomocne w rozwiązaniu problemu usunięcia całe obiekty z widoku.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. Można filtrować obiektów przed zakończeniem potoku, dzięki czemu można przeprowadzać na tylko podzbiór obiektów początkowo wygenerował.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.

Program Windows PowerShell zawiera Where-Object polecenia cmdlet, które umożliwia testowanie każdy obiekt w potoku i tylko przekazać go do potoku Jeśli dana jednostka spełnia warunek określonego testu.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. Obiekty, które nie są przekazywane do testu są usuwane z potoku.Objects that do not pass the test are removed from the pipeline. Możesz podać warunek testu jako wartość Where-Object FilterScript parametru.You supply the test condition as the value of the Where-Object FilterScript parameter.

Wykonując proste testy za pomocą Where-ObjectPerforming Simple Tests with Where-Object

Wartość FilterScript jest blok skryptu — jedno lub kilka poleceń programu Windows PowerShell, ujęte w nawiasy klamrowe {} — która daje w wyniku wartość true lub false.The value of FilterScript is a script block - one or more Windows PowerShell commands surrounded by braces {} - that evaluates to true or false. Te bloki skryptu może być bardzo proste, ale są one tworzone wymaga, wiedząc o innym pojęcia programu Windows PowerShell, operatory porównania.These script blocks can be very simple, but creating them requires knowing about another Windows PowerShell concept, comparison operators. Operator porównania porównuje elementów, które pojawiają się na każdej stronie.A comparison operator compares the items that appear on each side of it. Operatory porównania zaczynają się od "-" znaków i są następuje nazwa.Comparison operators begin with a '-' character and are followed by a name. Operatory porównania podstawowe działa na prawie każdy rodzaj obiektu.Basic comparison operators work on almost any kind of object. Więcej informacji o zaawansowanych operatory porównania może działać wyłącznie względem tekstu lub tablic.The more advanced comparison operators might only work on text or arrays.

Uwaga

Domyślnie podczas pracy z tekstem operatory porównania programu Windows PowerShell jest rozróżniana wielkość liter.By default, when working with text, Windows PowerShell comparison operators are case-insensitive.

Ze względu na analizowanie zagadnienia, symbole, takie jak <>, i = nie są używane jako operatory porównania.Due to parsing considerations, symbols such as <,>, and = are not used as comparison operators. Zamiast tego operatory porównania składają się z liter.Instead, comparison operators are comprised of letters. Operatory porównania podstawowe są wymienione w poniższej tabeli.The basic comparison operators are listed in the following table.

Operator porównaniaComparison Operator ZnaczenieMeaning Przykład (zwraca wartość true)Example (returns true)
-eq-eq jest równais equal to 1 - eq 11 -eq 1
-ne-ne Nie równa sięIs not equal to 1 - ne 21 -ne 2
-lt-lt jest mniejsza niżIs less than 1 - lt 21 -lt 2
-le-le Jest mniejsze niż lub równeIs less than or equal to 1 - le 21 -le 2
-gt-gt jest większa niżIs greater than 2 - > 12 -gt 1
-ge-ge Jest większe lub równeIs greater than or equal to 2 -ge 12 -ge 1
— np.-like Przypomina (symbol wieloznaczny porównanie tekstu)Is like (wildcard comparison for text) "file.doc" — takich jak "f*.korzystać?""file.doc" -like "f*.do?"
-notlike-notlike Nie jest podobne (symbol wieloznaczny porównanie tekstu)Is not like (wildcard comparison for text) "file.doc"-notlike "p*doc""file.doc" -notlike "p*.doc"
-zawiera-contains zawieraContains 1,2,3 - zawiera 11,2,3 -contains 1
-notcontains-notcontains nie zawieraDoes not contain 1,2,3 - notcontains 41,2,3 -notcontains 4

WHERE-Object Bloki skryptu za pomocą specjalnych zmiennej $_ do odwoływania się do bieżącego obiektu w potoku.Where-Object script blocks use the special variable $_ to refer to the current object in the pipeline. Oto przykład sposobu działania.Here is an example of how it works. Jeśli masz listę liczb i tylko mają być zwracane te, które są mniej niż 3, można użyć Where-Object do filtrowania liczby, wpisując: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

Filtrowanie oparte na właściwości obiektuFiltering Based on Object Properties

Ponieważ $_ odwołuje się do bieżącego obiektu potoku, firma Microsoft będą mogli jej właściwości na potrzeby testów.Since $_ refers to the current pipeline object, we can access its properties for our tests.

Na przykład można przyjrzymy się Klasa Win32_SystemDriver w usłudze WMI.As an example, we can look at the Win32_SystemDriver class in WMI. Mogą istnieć setki sterowników systemu w określonym systemie, ale może być tylko zainteresowana określony zestaw sterowników systemu, takie jak te, które są aktualnie uruchomione.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. Jeśli używasz Get-Member, aby wyświetlić elementy członkowskie Win32_SystemDriver (Get-WmiObject — Klasa Win32_SystemDriver | Właściwość Get-Member - MemberType) widać to za pomocą odpowiednich właściwości stanu i że ma wartość "Uruchomiona", gdy sterownik jest uruchomiony.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. Możesz filtrować sterowniki systemowe, wybierając tylko uruchomione, wpisując:You can filter the system drivers, selecting only the running ones by typing:

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

Daje to nadal długą listę.This still produces a long list. Można filtrować tylko wybranym sterowniki uruchamiana automatycznie, testując również wartość StartMode: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

To daje nam mnóstwo informacji, które firma Microsoft nie są już potrzebne, ponieważ wiemy, że sterowniki są uruchomione.This gives us a lot of information we no longer need because we know that the drivers are running. W rzeczywistości tylko informacje, które prawdopodobnie należy w tym momencie są nazwę i nazwę wyświetlaną.In fact, the only information we probably need at this point are the name and the display name. Poniższe polecenie uwzględnia tylko te dwie właściwości, co znacznie przyspiesza dane wyjściowe: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

Istnieją dwa elementy Where-Object w poleceniu powyżej, ale mogą być wyrażone w pojedynczym elemencie Where-Object przy użyciu i operatora logicznego w następujący sposób: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

Standardowe operatory logiczne są wymienione w poniższej tabeli.The standard logical operators are listed in the following table.

Operator logicznyLogical Operator ZnaczenieMeaning Przykład (zwraca wartość true)Example (returns true)
- i-and Logiczne i; wartość true, jeśli obie strony mają wartość trueLogical and; true if both sides are true (1 - eq 1) — a (2 - eq 2).(1 -eq 1) -and (2 -eq 2)
— lub-or Logiczne lub; wartość true, jeśli strona ma wartość trueLogical or; true if either side is true (1 - eq 1) - lub (1 - eq 2).(1 -eq 1) -or (1 -eq 2)
-nie-not Logiczne not; Odwraca wartość PRAWDA i FAŁSZLogical not; reverses true and false -nie (1 - eq 2)-not (1 -eq 2)
! Logiczne not; Odwraca wartość PRAWDA i FAŁSZLogical not; reverses true and false !(1 - eq 2)!(1 -eq 2)