Ayyıldız2 | 2008 TR Yapısı • 1-99 Orta Emek Destan • Oto Avsız • 10 Temmuz 21:00 HEMEN TIKLA!
PowerShell, Windows'da sistem yönetimi ve otomasyonu için bir komut satırı ve betik dilidir ve her Windows yöneticisinin veya geliştiricisinin araç setinin önemli bir parçasıdır. Where-Object kullanarak PowerShell komutlarının çıktısını filtrelemek , görüntüleme için ilgili verileri hızlı bir şekilde bulmanızı veya filtre ölçütlerinize göre nesnelerin bir alt kümesinde işlemler gerçekleştirmenizi sağlar.
Bu kılavuz, Where-Object'in PowerShell'de nesneleri ve verileri filtrelemek için nasıl kullanılacağını açıklar ve kendi kodunuzda kullanmak üzere kopyalayıp yapıştırabileceğiniz pratik örnekler içerir. Ayrıca, Where-Object'i PowerShell betiklerinizde kullanmak için performans değerlendirmelerini ve en iyi uygulamaları açıklar .
Where-Object için en sık kullanılan sözdizimi ve parametreler aşağıdaki gibidir:
[ Komut ] | Where-Nesnesi [ -Özellik ] [ -Değer ] [ Operatör ]
Dikkat:
Aşağıda, günlük dosyalarını temizleme, yüksek bellek kullanan işlemleri bulma, Active Directory kullanıcılarını filtreleme ve olay günlüklerini arama gibi yaygın komut dosyası görevlerini gerçekleştirmek için Where-Object'i kullanan birkaç eksiksiz PowerShell komutu yer almaktadır.
# Çalışan işlemleri 'powershell' adlı işlemlerle filtrele
Get-Process | Where-Object Adı -eq 'powershell'
# 'winlogon' veya 'explorer' adlı çalışan işlemleri filtrele
$names = @('winlogon', 'explorer') # Birden fazla arama değerini içeren bir dizi tanımlayın
İşlemi Al | Nesnenin Nerede Olduğu { $names -contains $_.Name }
Bu örnekteki süslü parantezler, bir ifade koleksiyonu içeren bir PowerShell betik bloğunu belirtir. Ayrıca, karşılaştırılan nesneyi temsil eden bir kısayol olan $_ kullanımına da dikkat edin . Bu durumda, karşılaştırmaya nesnenin Name özelliğini sağlamak için kullanılır .
# E-posta dizisini belirli bir etki alanından gelenlere filtrele
$emailAddresses = @(“ bob@example.com ”, “ jane@test.com ”, “ tim@example.com ”) # E-posta adreslerinden oluşan bir dizi tanımlayın
$emailAdresleri | Where-Nesnesi { $_ -match '@test.com$' }
Bu makalenin ilerleyen kısımlarında ele alınacak olan dizi Where() metodunu da kullanabileceğinizi unutmayın .
# Son 14 gün içinde değiştirilen geçerli dizindeki dosyaları bul
Get-ChildItem -Path . | Where-Object { $_.LastWriteTime -GT (Get-Tarihi).AddDays(-14) }
Ayrıca tarih aralığı sağlayarak tarihler arasında filtreleme yapabilirsiniz:
# Geçtiğimiz haftadan Windows olay günlüğü girişlerini bulun
$startDate = (Get-Date).AddDays(-7) # Tarihi geçmişe ayarlamak için negatif bir sayının kullanıldığına dikkat edin
$endDate = Tarih-Al
Get-EventLog -LogName Uygulaması | Where-Object { $_.TimeGenerated -ge $startDate -ve $_.TimeGenerated -le $endDate }
# CPU kullanımı %75'ten fazla olan işlemleri filtrele
İşlemi Al | Nesne Nerede { $_.CPU -gt 75 }
# 'Win' ile başlayan bir isme sahip çalışan hizmetleri bulun
Get-Service | Where-Object { $_.Status -eq 'Çalışıyor' -ve $_.Name -like 'Win*' }
# Mevcut dizinde 3MB'den büyük ve son 30 gün içinde değiştirilmiş dosyaları bul
Get-ChildItem -Path . | Where-Object { $_.Length -gt 3MB -ve $_.LastWriteTime -gt (Get-Date).AddDays(-30) }
# Geçerli dizindeki .txt dosyalarını bul
Get-ChildItem -Path . | Where-Object Uzantısı -eq '.txt'
# Belirli bir yoldaki 90 günden eski günlük dosyalarını sil
Get-ChildItem -Path 'C
athToLogs' -Filter '*.log' | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-90) } | Remove-Item
# 1000 MB'den fazla bellek kullanan işlemleri listeleyin
İşlemi Al | Where-Object { $_.WorkingSet -gt 1000MB } | Nesne Adını Seç, WorkingSet
# Belirli bir grubun (pazarlama) üyesi olan ve belirli bir iş unvanına (Yönetici) sahip olan Active Directory kullanıcılarını arayın
İçe Aktarma Modülü ActiveDirectory
Get-ADUser -Filter { MemberOf -eq 'CN=Pazarlama,OU=Gruplar,DC=örnek,DC=com' -ve Başlık -eq 'Yönetmen' }
# Belirli bir uygulama ile ilgili hatalar olan Windows olay günlüğü girişlerini bulun (MyApplication)
Get-EventLog -LogName Uygulama -GirişTipi Hata | Where-Object { $_.Source -eq 'Uygulamam' }
Bu örnekte, sonuçlardan ilgili verileri çıkarmak için Where-Object ve Select-Object'in birlikte kullanıldığına dikkat edin.
Birçok PowerShell komutu, bu komutu kullanarak arama yapmak için optimize edilmiş bir -Filter parametresi içerecektir. Bir -Filter parametresi mevcutsa, Where-Object'e geçirmeden önce verileri mümkün olduğunca azaltmak için kullanılması önerilir.
Örneğin, Get-ADUser'ı kullanarak Active Directory verileriyle çalışıyorsanız ve belirli bir departmandan kullanıcı listesini almak ve ardından iş rollerine göre farklı eylemler gerçekleştirmek istiyorsanız, sonuçları departmanla sınırlamak için -Filter'ı kullanmalı ve ardından daha küçük nesne listesine İş rolüne göre eylemler gerçekleştirmek için Where-Object'i kullanabilirsiniz.
Powershell betiğinizin yürütülmesi çok uzun sürüyorsa ve bunun Where-Object içeren bir komuttan kaynaklandığından şüpheleniyorsanız, komutun tamamlanması için geçen süreyi ölçmek üzere Measure-Command cmdlet'ini kullanarak performansını değerlendirebilirsiniz.
$VerbosePreference = “Devam Et”
İşlemi Al | Nesnenin Nerede Olduğu { $_.CPU -gt 75 } -Ayrıntılı
Beklenmeyen hatalarla zarif bir şekilde başa çıkmak için try-catch bloklarını da kullanmalısınız.
Bu kılavuz, Where-Object'in PowerShell'de nesneleri ve verileri filtrelemek için nasıl kullanılacağını açıklar ve kendi kodunuzda kullanmak üzere kopyalayıp yapıştırabileceğiniz pratik örnekler içerir. Ayrıca, Where-Object'i PowerShell betiklerinizde kullanmak için performans değerlendirmelerini ve en iyi uygulamaları açıklar .
Where-Object PowerShell cmdlet'ini anlama
Where -Object PowerShell CmdLet'i ( CmdLet, otomasyon için kullanılan bir PowerShell komutudur), bir komuttan gelen nesne koleksiyonunu yalnızca arama ölçütlerinizle eşleşenlerle filtreler.Where-Object için en sık kullanılan sözdizimi ve parametreler aşağıdaki gibidir:
[ Komut ] | Where-Nesnesi [ -Özellik ] [ -Değer ] [ Operatör ]
Dikkat:
- [ Komut ] , çıktısı Where-Object tarafından filtrelenen komuttur.
- [ -Özellik ] karşılaştırılacak nesnenin bir dize olarak sağlanan özelliğidir.
- [ -Değer ] , özelliğin karşılaştırılacağı değerdir; nesne veya dize olarak sağlanır.
- Son parametre kullanılacak karşılaştırma [ Operatörü ]' dür: -eq (eşittir), -ne (eşit değildir), -gt (büyüktür), -lt (küçüktür), -ge (büyüktür veya eşittir), -le (küçüktür veya eşittir).
Where-Object'i nesneleri filtrelemek için kullanmanın pratik örnekleri
Where-Object'i nasıl kullanacağınızı görmenin en iyi yolu onu eylem halinde görmektir. Aşağıda yerleşik karşılaştırma operatörlerini kullanarak temel kullanımı ve betik bloklarında özel ölçütleri uygulayan gelişmiş kullanımı gösteren birkaç basit örnek bulunmaktadır. Bu örnekler arasında birden fazla değere göre filtreleme, regex kullanımı ve tarihe göre filtreleme yer almaktadır.Aşağıda, günlük dosyalarını temizleme, yüksek bellek kullanan işlemleri bulma, Active Directory kullanıcılarını filtreleme ve olay günlüklerini arama gibi yaygın komut dosyası görevlerini gerçekleştirmek için Where-Object'i kullanan birkaç eksiksiz PowerShell komutu yer almaktadır.
Tek değerleri filtreleme
Bu örnek, -eq karşılaştırma operatörünü kullanarak tek bir değere nasıl filtre uygulanacağını gösterir:# Çalışan işlemleri 'powershell' adlı işlemlerle filtrele
Get-Process | Where-Object Adı -eq 'powershell'
Birden fazla değere göre filtreleme
Bu örnek, birden fazla değere göre filtrelemenin nasıl yapılacağını gösterir. Çalışan işlemlerin listesini Get-Process'ten "winlogon" ve "explorer" adlı işlemlere (her ikisi de oturum açmış her kullanıcı için çalışıyor olmalıdır) filtreler:# 'winlogon' veya 'explorer' adlı çalışan işlemleri filtrele
$names = @('winlogon', 'explorer') # Birden fazla arama değerini içeren bir dizi tanımlayın
İşlemi Al | Nesnenin Nerede Olduğu { $names -contains $_.Name }
Bu örnekteki süslü parantezler, bir ifade koleksiyonu içeren bir PowerShell betik bloğunu belirtir. Ayrıca, karşılaştırılan nesneyi temsil eden bir kısayol olan $_ kullanımına da dikkat edin . Bu durumda, karşılaştırmaya nesnenin Name özelliğini sağlamak için kullanılır .
Düzenli ifadeleri kullanma
Where-Object dizilerle de kullanılabilir. Regex, her türlü nesneyi filtrelemek için kullanılabilir ve dizelerin içeriklerine göre filtreleme için karmaşık koşullar eklemenin bir yolunu sağlar:# E-posta dizisini belirli bir etki alanından gelenlere filtrele
$emailAddresses = @(“ bob@example.com ”, “ jane@test.com ”, “ tim@example.com ”) # E-posta adreslerinden oluşan bir dizi tanımlayın
$emailAdresleri | Where-Nesnesi { $_ -match '@test.com$' }
Bu makalenin ilerleyen kısımlarında ele alınacak olan dizi Where() metodunu da kullanabileceğinizi unutmayın .
Tarihe göre filtreleme
Tarih özelliklerine sahip nesneler döndüren komutlar için Get-Date tarafından döndürülen DateTime nesnelerini kullanarak filtreleme yapabilirsiniz :# Son 14 gün içinde değiştirilen geçerli dizindeki dosyaları bul
Get-ChildItem -Path . | Where-Object { $_.LastWriteTime -GT (Get-Tarihi).AddDays(-14) }
Ayrıca tarih aralığı sağlayarak tarihler arasında filtreleme yapabilirsiniz:
# Geçtiğimiz haftadan Windows olay günlüğü girişlerini bulun
$startDate = (Get-Date).AddDays(-7) # Tarihi geçmişe ayarlamak için negatif bir sayının kullanıldığına dikkat edin
$endDate = Tarih-Al
Get-EventLog -LogName Uygulaması | Where-Object { $_.TimeGenerated -ge $startDate -ve $_.TimeGenerated -le $endDate }
Komut dosyası bloklarında özel ölçütleri gösteren gelişmiş örnekler
Yukarıdaki örneklerde gösterildiği gibi, betik blokları birden fazla karşılaştırma ifadesi içermek için kullanılabilir. Betik bloklarında birden fazla ölçüt ve koşul sağlayarak Where-Object kullanarak daha karmaşık filtrelemeler gerçekleştirebilirsiniz. İşte birkaç örnek:# CPU kullanımı %75'ten fazla olan işlemleri filtrele
İşlemi Al | Nesne Nerede { $_.CPU -gt 75 }
# 'Win' ile başlayan bir isme sahip çalışan hizmetleri bulun
Get-Service | Where-Object { $_.Status -eq 'Çalışıyor' -ve $_.Name -like 'Win*' }
# Mevcut dizinde 3MB'den büyük ve son 30 gün içinde değiştirilmiş dosyaları bul
Get-ChildItem -Path . | Where-Object { $_.Length -gt 3MB -ve $_.LastWriteTime -gt (Get-Date).AddDays(-30) }
Yaygın gerçek dünya Where-Object örnekleri
Yukarıdaki örneklere ek olarak, otomasyon ve sistem yönetimi için yaygın olarak ihtiyaç duyulan bazı PowerShell komutları şunlardır:# Geçerli dizindeki .txt dosyalarını bul
Get-ChildItem -Path . | Where-Object Uzantısı -eq '.txt'
# Belirli bir yoldaki 90 günden eski günlük dosyalarını sil
Get-ChildItem -Path 'C
athToLogs' -Filter '*.log' | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-90) } | Remove-Item# 1000 MB'den fazla bellek kullanan işlemleri listeleyin
İşlemi Al | Where-Object { $_.WorkingSet -gt 1000MB } | Nesne Adını Seç, WorkingSet
# Belirli bir grubun (pazarlama) üyesi olan ve belirli bir iş unvanına (Yönetici) sahip olan Active Directory kullanıcılarını arayın
İçe Aktarma Modülü ActiveDirectory
Get-ADUser -Filter { MemberOf -eq 'CN=Pazarlama,OU=Gruplar,DC=örnek,DC=com' -ve Başlık -eq 'Yönetmen' }
# Belirli bir uygulama ile ilgili hatalar olan Windows olay günlüğü girişlerini bulun (MyApplication)
Get-EventLog -LogName Uygulama -GirişTipi Hata | Where-Object { $_.Source -eq 'Uygulamam' }
Bu örnekte, sonuçlardan ilgili verileri çıkarmak için Where-Object ve Select-Object'in birlikte kullanıldığına dikkat edin.
Where-Object ile diğer filtreleme yöntemleri arasındaki fark
Powershell'de verileri filtrelemenin birkaç yolu vardır, bazıları nesnelerle, bazıları da metinle ilgilidir. Aynı şekilde davranmazlar, bu yüzden her senaryoya en uygun olanı seçmelisiniz:- Where-Object : Komuta iletilen nesne koleksiyonlarını filtrele, böylece yalnızca eşleşen nesneler kalır.
- Select-Object : Ayrıca nesne özelliklerini filtrelemek de mümkün, örneğin bir nesne koleksiyonunu döndürmek, ancak her birinin yalnızca 'name' özelliğini dahil etmek.
- Dizi Where() yöntemi : Dizileri verilen koşullara göre filtreler.
- Filtre parametresi : Bazı cmdlet'ler çıktılarını aramak için -Filter parametresini içerecektir
Verileri filtrelerken performans hususları
Veri filtreleme kaynak yoğun bir görev olabilir. PowerShell komutları, özellikle veritabanları veya Active Directory ile etkileşimde bulunurken, potansiyel olarak binlerce kayıt çıktısı verebilir ve her birini işlemek ve filtrelemek için Where-Object kullanmak, büyük veri kümelerini aramanın en verimli yolu değildir.Birçok PowerShell komutu, bu komutu kullanarak arama yapmak için optimize edilmiş bir -Filter parametresi içerecektir. Bir -Filter parametresi mevcutsa, Where-Object'e geçirmeden önce verileri mümkün olduğunca azaltmak için kullanılması önerilir.
Örneğin, Get-ADUser'ı kullanarak Active Directory verileriyle çalışıyorsanız ve belirli bir departmandan kullanıcı listesini almak ve ardından iş rollerine göre farklı eylemler gerçekleştirmek istiyorsanız, sonuçları departmanla sınırlamak için -Filter'ı kullanmalı ve ardından daha küçük nesne listesine İş rolüne göre eylemler gerçekleştirmek için Where-Object'i kullanabilirsiniz.
Powershell betiğinizin yürütülmesi çok uzun sürüyorsa ve bunun Where-Object içeren bir komuttan kaynaklandığından şüpheleniyorsanız, komutun tamamlanması için geçen süreyi ölçmek üzere Measure-Command cmdlet'ini kullanarak performansını değerlendirebilirsiniz.
PowerShell'de Where-Object kullanırken en iyi uygulamalar ve yaygın hatalar
Where-Object'i kullanırken kullanıcıların karşılaştığı birkaç yaygın tuzak vardır ve bunlar aşağıdaki en iyi uygulamalarla çözülebilir:- "Sola filtre" : Verimliliği en üst düzeye çıkarmak için PowerShell komutlarınızda mümkün olduğunca erken (yani komutun mümkün olduğunca solunda) cmdlet'e özgü -Filter veya diğer arama parametrelerini kullanın.
- Gereksiz özellikleri filtrelemek için Select-Object'i kullanın : Bu, büyük miktardaki verilerle uğraşırken performansı artırır (başka türlü cmdlet'e özgü işlevleri kullanarak filtreleyemezsiniz).
- Basit tutun : Komut dosyası bloklarında karmaşık koşullardan kaçının ve performansı iyileştirmek ve hata ayıklamayı kolaylaştırmak için mümkün olduğunca her şeyi parçalara ayırın.
- Karşılaştırma operatörlerini doğru kullanın : Beklenmeyen sonuçlardan kaçınmak için filtre parametrelerinizin ve betik bloklarınızın ne yaptığını anladığınızdan emin olun.
- Komut dosyalarınızı okunabilir tutun : Komutları kısaltıp daha kolay okunabilir hale getirmek için Where-Object için bir takma ad olarak ? kullanabilirsiniz . Ayrıca kodunuzu iyi biçimlendirilmiş ve okunması kolay tutmak için boşluk ve girinti kullanmalı ve PowerShell komut dosyanızdaki her satırın ne işe yaradığını belirten yorumlar eklemelisiniz (aylar veya yıllar sonra bir şeyi değiştirmek için geri döndüğünüzde komutun amacının ne olduğunu unutmanız durumunda).
$VerbosePreference = “Devam Et”
İşlemi Al | Nesnenin Nerede Olduğu { $_.CPU -gt 75 } -Ayrıntılı
Beklenmeyen hatalarla zarif bir şekilde başa çıkmak için try-catch bloklarını da kullanmalısınız.
Rica ederimPaylaşım için teşekkürler
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 0
- Görüntüleme
- 124
- Cevaplar
- 0
- Görüntüleme
- 101