Результат выполнения любого командлета — это объект. А зачастую не один а объект, а массив объектов. Для фильтрации только определенных объектов в Powershell используется Where. На самом деле Where — это алиас для командлета Where-Object. Еще один алиас этого командлета — знак вопроса. Про использование командлета Where-Object и пойдет в данной статье.
Фильтрация без Where-Object
Во-первых, большинство командлетов, которые выводят массив объектов имеют параметры. Эти параметры позволяют производить фильтрацию. Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
PS C:\users\pnck> Get-ChildItem Каталог: C:\Users\pnck Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 20.11.2014 22:58 .gimp-2.8 d---- 14.01.2014 16:35 .thumbnails d---- 17.02.2014 9:53 Cisco Packet Tracer 6.0.1 d-r-- 26.10.2014 8:25 Contacts d-r-- 02.01.2015 1:16 Desktop d-r-- 30.12.2014 10:51 Documents d-r-- 02.01.2015 11:32 Downloads d-r-- 26.10.2014 8:25 Favorites d---- 30.12.2013 13:09 GNS3 d-r-- 26.10.2014 8:26 Links d-r-- 26.10.2014 8:25 Music d---- 09.07.2014 17:26 NNU d-r-- 02.01.2015 10:52 OneDrive d-r-- 26.10.2014 8:25 Pictures d-r-- 26.10.2014 8:26 Saved Games d-r-- 30.12.2014 8:10 Searches d---- 02.01.2015 12:05 Tracing d-r-- 26.10.2014 8:25 Videos -a--- 04.03.2014 15:02 28 .gitignore -a--- 21.12.2014 11:53 186 .packettracer -a--- 29.03.2014 23:19 3211264 DevelopmentStorageDb22.mdf -a--- 29.03.2014 23:19 851968 DevelopmentStorageDb22_log.ldf -a--- 12.01.2014 10:53 46 test.ps1 -a--- 12.01.2014 10:53 46 test.psq -a--- 28.01.2014 16:25 445601 WP_002009.jpg -a--- 28.01.2014 16:25 149975 WP_002010.jpg -a--- 28.01.2014 16:25 267783 WP_002011.jpg -a--- 28.01.2014 16:25 134365 WP_002012.jpg PS C:\Users\pnck> Get-ChildItem -Name Do* Documents Downloads |
У этого способа есть три основных недостатка: не по всем полям объектов можно осуществлять фильтрацию, не поддерживаются сложные условия, иногда изменяют тип объекта результата.
Во-вторых, в некоторых командлетах есть параметр Filter. Он позволяет производить очень сложную фильтрацию.
1 2 3 4 5 6 7 8 9 10 11 |
PS C:\> Get-ADUser -Filter {surname -like 'j*'} | ft Distinguish Enabled GivenName Name ObjectClass ObjectGUID SamAccountN SID Surname UserPrincip edName ame alName ----------- ------- --------- ---- ----------- ---------- ----------- --- ------- ----------- CN=Lola ... True Lola Lola Jac... user dca983fe... Lola S-1-5-21... Jacobsen Lola@ada... CN=Mukes... True Mukesh Mukesh Jain user f652236a... Mukesh S-1-5-21... Jain Mukesh@a... CN=Krzys... True Krzysztof Krzyszto... user d9704272... Krzysztof S-1-5-21... Janiszewski Krzyszto... CN=Jacek... True Jacek Jacek Je... user 00992f3e... Jacek S-1-5-21... Jelitto Jacek@ad... CN=Erik ... True Erik Erik Jensen user 178368be... Erik S-1-5-21... Jensen Erik@ada... CN=Sarah... True Sarah Sarah Jones user a471b790... Sarah S-1-5-21... Jones Sarah@ad... |
Тут недостаток один — не у всех командлетов такой параметр есть. Синтаксис таких параметров очень схож с использованием Where, поэтому про синтаксис чуть позже.
В-третьих, фильтрация в графическом интерфейсе. В PowerShell 3.0 появился командлет Out-GridView, который позволяет выводить всю информацию об объектах в окном режиме. Удобно для этого использовать конвейер.
1 |
Get-ADOrganizationalUnit -filter * | Out-GridView |
Далее открывается окно, в котором можно производить полнотекстовую фильтрацию или фильтрацию по определенным полям.
Увы данный способ можно использоваться только для просмотра, ни каких операций с отфильтрованными данными вы дальше производить не можете.
Просмотр параметров доступных для фильтрации
Не все объекты выводятся на экран вместе со всеми своими свойствами. То какие поля попадут на экран, а какие нет контролируются в настройках PowerShell. Для просмотра всех свойств, методов и других составляющих объекта используется командлет Get-Member. Для его использования опять таки удобно воспользоваться конвейером.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
PS C:\> Get-Vm Name State CPUUsage(%) MemoryAssigned(M) Uptime Status ---- ----- ----------- ----------------- ------ ------ 55004-Client Off 0 0 00:00:00 Работает нормально 55004-DC Off 0 0 00:00:00 Работает нормально 55004-MS Off 0 0 00:00:00 Работает нормально 55004-MS2 Off 0 0 00:00:00 Работает нормально 55004-SQL Off 0 0 00:00:00 Работает нормально TestPowerShell-CL Running 0 2048 04:44:39 Работает нормально TestPowerShell-DC Running 1 2048 04:44:38 Работает нормально Windows Server Technical Preview Off 0 0 00:00:00 Работает нормально Windows8ForICND2 Off 0 0 00:00:00 Работает нормально PS C:\> Get-Vm | Get-Member TypeName: Microsoft.HyperV.PowerShell.VirtualMachine Name MemberType Definition ---- ---------- ---------- VMId AliasProperty VMId = Id VMName AliasProperty VMName = Name Equals Method bool Equals(System.Object obj) GetHashCode Method int GetHashCode() GetHostOnlyKeyValuePairItems Method string[] GetHostOnlyKeyValuePairItems() GetType Method type GetType() RemoveKeyValuePairItem Method void RemoveKeyValuePairItem(string name, Microsoft.HyperV.PowerShell.KeyValuePairItemPool pool) ToString Method string ToString() VerifyClusterPath Method void VerifyClusterPath(string path, bool allowUnverifiedPaths) AutomaticStartAction Property Microsoft.HyperV.PowerShell.StartAction AutomaticStartAction {get;} AutomaticStartDelay Property int AutomaticStartDelay {get;} AutomaticStopAction Property Microsoft.HyperV.PowerShell.StopAction AutomaticStopAction {get;} ComPort1 Property Microsoft.HyperV.PowerShell.VMComPort ComPort1 {get;} ComPort2 Property Microsoft.HyperV.PowerShell.VMComPort ComPort2 {get;} ComputerName Property string ComputerName {get;} ConfigurationLocation Property string ConfigurationLocation {get;} CPUUsage Property int CPUUsage {get;} CreationTime Property datetime CreationTime {get;} DVDDrives Property Microsoft.HyperV.PowerShell.DvdDrive[] DVDDrives {get;} DynamicMemoryEnabled Property bool DynamicMemoryEnabled {get;} FibreChannelHostBusAdapters Property System.Collections.Generic.List[Microsoft.HyperV.PowerShell.VMFibreChannelHba] FibreChannelHostBusAdapters {get;} FloppyDrive Property Microsoft.HyperV.PowerShell.VMFloppyDiskDrive FloppyDrive {get;} Generation Property int Generation {get;} HardDrives Property Microsoft.HyperV.PowerShell.HardDiskDrive[] HardDrives {get;} Heartbeat Property System.Nullable[Microsoft.HyperV.PowerShell.VMHeartbeatStatus] Heartbeat {get;} Id Property guid Id {get;} IntegrationServicesState Property string IntegrationServicesState {get;} IntegrationServicesVersion Property version IntegrationServicesVersion {get;} IsClustered Property bool IsClustered {get;} IsDeleted Property bool IsDeleted {get;} Key Property Microsoft.HyperV.PowerShell.ObjectKey Key {get;} MemoryAssigned Property long MemoryAssigned {get;} MemoryDemand Property long MemoryDemand {get;} MemoryMaximum Property long MemoryMaximum {get;} MemoryMinimum Property long MemoryMinimum {get;} MemoryStartup Property long MemoryStartup {get;} MemoryStatus Property string MemoryStatus {get;} Name Property string Name {get;} NetworkAdapters Property System.Collections.Generic.List[Microsoft.HyperV.PowerShell.VMNetworkAdapter] NetworkAdapters {get;} Notes Property string Notes {get;} NumaAligned Property System.Nullable[bool] NumaAligned {get;} NumaNodesCount Property int NumaNodesCount {get;} NumaSocketCount Property int NumaSocketCount {get;} OperationalStatus Property Microsoft.HyperV.PowerShell.VMOperationalStatus[] OperationalStatus {get;} ParentSnapshotId Property System.Nullable[guid] ParentSnapshotId {get;} ParentSnapshotName Property string ParentSnapshotName {get;} Path Property string Path {get;} PrimaryOperationalStatus Property System.Nullable[Microsoft.HyperV.PowerShell.VMOperationalStatus] PrimaryOperationalStatus {get;} PrimaryStatusDescription Property string PrimaryStatusDescription {get;} ProcessorCount Property long ProcessorCount {get;} RemoteFxAdapter Property Microsoft.HyperV.PowerShell.VMRemoteFx3DVideoAdapter RemoteFxAdapter {get;} ReplicationHealth Property Microsoft.HyperV.PowerShell.VMReplicationHealthState ReplicationHealth {get;} ReplicationMode Property Microsoft.HyperV.PowerShell.VMReplicationMode ReplicationMode {get;} ReplicationState Property Microsoft.HyperV.PowerShell.VMReplicationState ReplicationState {get;} ResourceMeteringEnabled Property bool ResourceMeteringEnabled {get;} SecondaryOperationalStatus Property System.Nullable[Microsoft.HyperV.PowerShell.VMOperationalStatus] SecondaryOperationalStatus {get;} SecondaryStatusDescription Property string SecondaryStatusDescription {get;} SizeOfSystemFiles Property long SizeOfSystemFiles {get;} SmartPagingFileInUse Property bool SmartPagingFileInUse {get;} SmartPagingFilePath Property string SmartPagingFilePath {get;} SnapshotFileLocation Property string SnapshotFileLocation {get;} State Property Microsoft.HyperV.PowerShell.VMState State {get;} Status Property string Status {get;} StatusDescriptions Property string[] StatusDescriptions {get;} Uptime Property timespan Uptime {get;} Version Property string Version {get;} VMIntegrationService Property System.Collections.Generic.List[Microsoft.HyperV.PowerShell.VMIntegrationComponent] VMIntegrationService {get;} |
В общем-то, фильтрацию можно производить по любому свойству перечисленному в Get-Member.
Есть правда один нюанс, что не всегда командлеты, возвращают объекты с полным перечнем свойств. Т.е. возвращают урезанный объект. И Get-Member в таком случае показывает не все свойства объекта. Тут нужно заглядывать в справку по командлету и искать там параметры, которые позволяют изменить список объектов. Пример это Get-ADUser
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
PS C:\> Get-ADUser -Filter * | Get-Member TypeName: Microsoft.ActiveDirectory.Management.ADUser Name MemberType Definition ---- ---------- ---------- Contains Method bool Contains(string propertyName) Equals Method bool Equals(System.Object obj) GetEnumerator Method System.Collections.IDictionaryEnumerator GetEnumerator() GetHashCode Method int GetHashCode() GetType Method type GetType() ToString Method string ToString() Item ParameterizedProperty Microsoft.ActiveDirectory.Management.ADPropertyValueCollection Item(string p... DistinguishedName Property System.String DistinguishedName {get;set;} Enabled Property System.Boolean Enabled {get;set;} GivenName Property System.String GivenName {get;set;} Name Property System.String Name {get;} ObjectClass Property System.String ObjectClass {get;set;} ObjectGUID Property System.Nullable`1[[System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, ... SamAccountName Property System.String SamAccountName {get;set;} SID Property System.Security.Principal.SecurityIdentifier SID {get;set;} Surname Property System.String Surname {get;set;} UserPrincipalName Property System.String UserPrincipalName {get;set;} PS C:\> Get-ADUser -Filter * -Properties * | Get-Member TypeName: Microsoft.ActiveDirectory.Management.ADUser Name MemberType Definition ---- ---------- ---------- Contains Method bool Contains(string propertyName) Equals Method bool Equals(System.Object obj) GetEnumerator Method System.Collections.IDictionaryEnumerator GetEnumerator() GetHashCode Method int GetHashCode() GetType Method type GetType() ToString Method string ToString() Item ParameterizedProperty Microsoft.ActiveDirectory.Management.ADPropertyValueColle... AccountExpirationDate Property System.DateTime AccountExpirationDate {get;set;} accountExpires Property System.Int64 accountExpires {get;set;} AccountLockoutTime Property System.DateTime AccountLockoutTime {get;set;} AccountNotDelegated Property System.Boolean AccountNotDelegated {get;set;} adminCount Property System.Int32 adminCount {get;set;} AllowReversiblePasswordEncryption Property System.Boolean AllowReversiblePasswordEncryption {get;set;} AuthenticationPolicy Property Microsoft.ActiveDirectory.Management.ADPropertyValueColle... AuthenticationPolicySilo Property Microsoft.ActiveDirectory.Management.ADPropertyValueColle... BadLogonCount Property System.Int32 BadLogonCount {get;} badPasswordTime Property System.Int64 badPasswordTime {get;set;} badPwdCount Property System.Int32 badPwdCount {get;set;} CannotChangePassword Property System.Boolean CannotChangePassword {get;set;} CanonicalName Property System.String CanonicalName {get;} Certificates Property Microsoft.ActiveDirectory.Management.ADPropertyValueColle... City Property System.String City {get;set;} CN Property System.String CN {get;} codePage Property System.Int32 codePage {get;set;} Company Property System.String Company {get;set;} CompoundIdentitySupported Property Microsoft.ActiveDirectory.Management.ADPropertyValueColle... Country Property System.String Country {get;set;} countryCode Property System.Int32 countryCode {get;set;} Created Property System.DateTime Created {get;} createTimeStamp Property System.DateTime createTimeStamp {get;} Deleted Property System.Boolean Deleted {get;} Department Property System.String Department {get;set;} Description Property System.String Description {get;set;} DisplayName Property System.String DisplayName {get;set;} DistinguishedName Property System.String DistinguishedName {get;set;} Division Property System.String Division {get;set;} DoesNotRequirePreAuth Property System.Boolean DoesNotRequirePreAuth {get;set;} dSCorePropagationData Property Microsoft.ActiveDirectory.Management.ADPropertyValueColle... EmailAddress Property System.String EmailAddress {get;set;} EmployeeID Property System.String EmployeeID {get;set;} EmployeeNumber Property System.String EmployeeNumber {get;set;} Enabled Property System.Boolean Enabled {get;set;} Fax Property System.String Fax {get;set;} GivenName Property System.String GivenName {get;set;} HomeDirectory Property System.String HomeDirectory {get;set;} HomedirRequired Property System.Boolean HomedirRequired {get;set;} HomeDrive Property System.String HomeDrive {get;set;} HomePage Property System.String HomePage {get;set;} HomePhone Property System.String HomePhone {get;set;} Initials Property System.String Initials {get;set;} instanceType Property System.Int32 instanceType {get;} isCriticalSystemObject Property System.Boolean isCriticalSystemObject {get;set;} isDeleted Property System.Boolean isDeleted {get;} KerberosEncryptionType Property Microsoft.ActiveDirectory.Management.ADPropertyValueColle... LastBadPasswordAttempt Property System.DateTime LastBadPasswordAttempt {get;} LastKnownParent Property System.String LastKnownParent {get;} lastLogoff Property System.Int64 lastLogoff {get;set;} lastLogon Property System.Int64 lastLogon {get;set;} LastLogonDate Property System.DateTime LastLogonDate {get;} lastLogonTimestamp Property System.Int64 lastLogonTimestamp {get;set;} LockedOut Property System.Boolean LockedOut {get;set;} logonCount Property System.Int32 logonCount {get;set;} logonHours Property System.Byte[] logonHours {get;set;} LogonWorkstations Property System.String LogonWorkstations {get;set;} Manager Property System.String Manager {get;set;} MemberOf Property Microsoft.ActiveDirectory.Management.ADPropertyValueColle... MNSLogonAccount Property System.Boolean MNSLogonAccount {get;set;} MobilePhone Property System.String MobilePhone {get;set;} Modified Property System.DateTime Modified {get;} modifyTimeStamp Property System.DateTime modifyTimeStamp {get;} msDS-User-Account-Control-Computed Property System.Int32 msDS-User-Account-Control-Computed {get;} Name Property System.String Name {get;} nTSecurityDescriptor Property System.DirectoryServices.ActiveDirectorySecurity nTSecuri... ObjectCategory Property System.String ObjectCategory {get;} ObjectClass Property System.String ObjectClass {get;set;} ObjectGUID Property System.Nullable`1[[System.Guid, mscorlib, Version=4.0.0.0... objectSid Property System.Security.Principal.SecurityIdentifier objectSid {g... Office Property System.String Office {get;set;} OfficePhone Property System.String OfficePhone {get;set;} Organization Property System.String Organization {get;set;} OtherName Property System.String OtherName {get;set;} PasswordExpired Property System.Boolean PasswordExpired {get;set;} PasswordLastSet Property System.DateTime PasswordLastSet {get;set;} PasswordNeverExpires Property System.Boolean PasswordNeverExpires {get;set;} PasswordNotRequired Property System.Boolean PasswordNotRequired {get;set;} POBox Property System.String POBox {get;set;} PostalCode Property System.String PostalCode {get;set;} PrimaryGroup Property System.String PrimaryGroup {get;} primaryGroupID Property System.Int32 primaryGroupID {get;set;} PrincipalsAllowedToDelegateToAccount Property Microsoft.ActiveDirectory.Management.ADPropertyValueColle... ProfilePath Property System.String ProfilePath {get;set;} ProtectedFromAccidentalDeletion Property System.Boolean ProtectedFromAccidentalDeletion {get;set;} pwdLastSet Property System.Int64 pwdLastSet {get;set;} SamAccountName Property System.String SamAccountName {get;set;} sAMAccountType Property System.Int32 sAMAccountType {get;set;} ScriptPath Property System.String ScriptPath {get;set;} sDRightsEffective Property System.Int32 sDRightsEffective {get;} ServicePrincipalNames Property Microsoft.ActiveDirectory.Management.ADPropertyValueColle... SID Property System.Security.Principal.SecurityIdentifier SID {get;set;} SIDHistory Property Microsoft.ActiveDirectory.Management.ADPropertyValueColle... SmartcardLogonRequired Property System.Boolean SmartcardLogonRequired {get;set;} State Property System.String State {get;set;} StreetAddress Property System.String StreetAddress {get;set;} Surname Property System.String Surname {get;set;} Title Property System.String Title {get;set;} TrustedForDelegation Property System.Boolean TrustedForDelegation {get;set;} TrustedToAuthForDelegation Property System.Boolean TrustedToAuthForDelegation {get;set;} UseDESKeyOnly Property System.Boolean UseDESKeyOnly {get;set;} userAccountControl Property System.Int32 userAccountControl {get;set;} userCertificate Property Microsoft.ActiveDirectory.Management.ADPropertyValueColle... UserPrincipalName Property System.String UserPrincipalName {get;set;} uSNChanged Property System.Int64 uSNChanged {get;} uSNCreated Property System.Int64 uSNCreated {get;} whenChanged Property System.DateTime whenChanged {get;} whenCreated Property System.DateTime whenCreated {get;} |
Заметьте на сколько во втором случае больше свойств.
Операции сравнения
Прежде всего нужно разобраться с операциями сравнения:
- -lt – Меньше, чем
- -le – Меньше или равно
- -gt – Больше, чем
- -ge – Больше или равно
- -eq – Равно
- -ne – Не равно
- -like – оператор подобия
- -notlike – оператор не-подобия
Если подставить к первым 7 в начале символ ‘c’ получатся операции сравнения, чувствительные к регистру. Например, -eq не чувствителен к регистру, а -ceq уже чувствителен к регистру.
А еще нужно разобраться с логическими операциями.
- -and – Оба условия должны быть истины, чтобы выражение было истинно
- -or – Одно или оба условия должны быть истины, чтобы выражение было истинно
- -xor – Одно условие должно быть истинно, а второе должно иметь значение «ложь», чтобы выражение было истинно
- -not – Указанные условия должны иметь значение «ложь», чтобы выражение было истинно
- ! – Указанное условие должно иметь значение «ложь», чтобы выражение было истинно
Рассмотрим на примерах
1 2 3 4 5 6 7 8 9 10 11 12 13 |
PS C:\> 14 -eq 14 True PS C:\> 'Get-PowerShell.ru' -like '*powershell*' True PS C:\> 'Get-PowerShell.ru' -clike '*powershell*' False PS C:\> 14 -eq 14 -and 20 -gt 100 False PS C:\> 14 -eq 14 -or 20 -gt 100 True PS C:\> $age = 20 PS C:\> ((14 -eq 14) -and ($age -gt 100)) -or $true True |
Базовая фильтрация PowerShell Where
Синтаксис командлета Where-Object и его алиасов Where и ? имеет две формы записи. Первая проста в использовании, но имеет несколько ограничений. Начнем с описания именно его.
Командлет принимает список объектов через параметр InputObject. Однако явно его использовать удобно разве что когда у вас список объектов сохранен в переменную. Да и в этом случае его не используют, а используют возможность параметра InputObject принимать значения через конвейер или вертикальную черту.
При использовании базовой фильтрации первым параметром Where-Object указываем то свойство, которое мы желаем отфильтровать, далее указываем оператор сравнения и в последнюю очередь значение с которым сравниваем.
1 2 3 4 5 6 |
PS C:\> Get-Process | Where-Object PagedMemorySize -gt 200000000 Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 1022 199 840312 879920 1486 6 985,70 5100 firefox 820 260 269124 303008 589 410,22 2152 iexplore |
И так по шагам использование базовой функциональности Where-Object
- Командлет, который возвращает список объектов
- Вертикальная черта
- Where-Object или любой из алиасов Where или ?
- Свойство фильтруемого объекта
- Оператор сравнения
- Значение с которым сравниваем
Еще несколько примеров.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
PS C:\> Get-Vm | Where State -eq Running Name State CPUUsage(%) MemoryAssigned(M) Uptime Status ---- ----- ----------- ----------------- ------ ------ TestPowerShell-CL Running 0 2048 06:25:33 Работает нормально TestPowerShell-DC Running 1 2048 06:25:32 Работает нормально PS C:\> Get-Service | ? DisplayName -like '*dhcp*' Status Name DisplayName ------ ---- ----------- Running Dhcp DHCP-клиент Stopped DHCPServer DHCP-сервер |
В данном способе не получится использовать несколько условий или сравнить несколько полей. Нельзя использовать «подсвойства», т.е. если свойство это объект, у вас не получится сразу обратиться к данным вложенным свойствам.
FilterScript в Where-Object
Второй вариант использования Where — это использования параметра FilterScript. Данный параметр является позиционным и его указание не обязательно.
При использовании данного способа после Where в фигурных скобках указывается условие, которое обращается к свойствам объекта через переменную $_.
Переменная $_ или ее аналог $PSItem содержит текущий объект просматриваемый в конвейере. Обращение к свойствам текущего объекта осущесвляется через точку.
1 2 3 4 5 6 |
PS C:\> Get-Service | Where-Object {$_.DisplayName -like '*dhcp*'} Status Name DisplayName ------ ---- ----------- Running Dhcp DHCP-клиент Stopped DHCPServer DHCP-сервер |
И так по шагам использование расширенной функциональности Where-Object
- Командлет, который возвращает список объектов
- Вертикальная черта
- Where-Object или любой из алиасов Where или ?
- Открывающаяся фигурная скобка
- Выражение сравнения, которое может содержать множество опереаторов сравнения и логических операций
- Закрывающаяся фигурная скобка
Еще несколько примеров.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
PS C:\> Get-Service | Where-Object {$_.Name -like '*dhcp*' -and $_.Name -like '*server'} Status Name DisplayName ------ ---- ----------- Stopped DHCPServer DHCP-сервер PS C:\Windows\system32> Get-ChildItem | ? {$_.psiscontainer -and $PSItem.name -like '*server*'} Каталог: C:\Windows\system32 Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 12.10.2013 20:51 ServerManager d---- 22.08.2013 22:39 ServerManagerInternal |
Далее с отфильтрованными объектами вы можете производить множество операций. Изменение, импорт, сортировка, подстчет итогов и т.п.
а как фильтрануть выпадающий список(подстановка)
Спасибо, было полезно