Geek Okulu PowerShell'de Koleksiyonlarla Çalışma
PowerShell, .Net Framework'ü temel aldığından ve WMI ve CIM gibi diğer birçok teknolojiyi içerdiğinden, her zaman aynı şeyi başarmanın birden fazla yolu vardır. Görevlerimizi gerçekleştirmek için en iyi yöntemi nasıl seçeceğimizi öğrendiğimiz bu kısa yazı için bize katılın.
Serideki önceki makaleleri okuduğunuzdan emin olun:
- PowerShell ile Windows'u Nasıl Otomatikleştireceğinizi Öğrenin
- PowerShell'de Cmdlet'leri Kullanmayı Öğrenme
- PowerShell'de Nesnelerin Nasıl Kullanılacağını Öğrenme
- PowerShell'de Biçimlendirme, Filtreleme ve Karşılaştırmayı Öğrenme
- PowerShell'de Uzaktan Kullanmayı Öğrenin
- Bilgisayar Bilgilerini Almak için PowerShell'i Kullanma
Ve tüm hafta boyunca dizinin geri kalanı için bizi izlemeye devam edin.
Toplu Cmdlet'leri Kullanma
Serinin başlarında, sizi boru hattına getirdiğimizde, bir cmdlet'in çıktığı nesneleri nasıl alabileceğinizi ve bunları şöyle bir şey kullanarak başka bir cmdlet'e nasıl geçirebileceğinizi gösterdik:
Get-Process -Adı not defteri | Dur-Süreci
Bu, “not defteri” adı verilen herhangi bir işlemi öldürür. Ama muhtemelen PowerShell'in her notepad örneğini tek bir komutla nasıl öldürebileceğini merak ediyorsundur. Cevap Stop-Process cmdlet'inin yardımında yatar..
Dur-İşlem Yardım
Sözdizimi bölümündeki son kod satırına bakarsanız, InputObject parametresinin Process [] türündeki bir nesneyi kabul ettiğini ve iki tür parantezin ardından bir tür gördüğünüzde parametrenin kabul ettiği anlamına gelir. bir veya daha fazla önceki türden. Bu durumda, bir veya daha fazla işlem nesnesini kabul eder. Teknik olarak, InputObject cmdlet'inin bir işlemi kabul ettiğini söyleyebiliriz. dizi. Toplu işlemleri bu şekilde destekleyen bir cmdlet'iniz varsa, onu kullanın. Bu bir numaralı seçimdir.
WMI Kullanımı
Her ne kadar WMI, Microsoft HQ'dan gönderilecek en iyi teknoloji parçası olmasa da, ikinci olarak nesne koleksiyonlarıyla nasıl çalışılacağı listesine giriyor. Böylece, Win32_Process sınıfından çalışan işlemlerin listesini kolayca bulabiliriz:
Get-WmiObject-Sınıfı Win32_Process
WMI sorgusu kendi türünde bir nesneyi döndürdüğünden, işlemi durduracak bir yöntem aramanız gerekir, bu nedenle bunu Get-Member öğesine yönlendirin.
Get-WmiObject -Class Win32_Process | Get-Üye
Durdurulan en yakın şey sonlandırma yöntemidir, öyleyse bu olmalı. Bir WMI Nesnesindeki bir yöntemi çağırmak için, onu Invoke-WmiMethod'a yönlendirin ve yöntemin adını belirtin.
Get-WmiObject -Sınıf Win32_Process -Filter “name = 'notepad.exe'” | Invoke-WmiMethod -Adı Sonlandır
Harika, hile yaptım. WMI'da 0 dönüş değeri aldığınızda, komutun başarıyla yürütüldüğünü unutmayın..
sayım
Diğer iki yöntemin başarısız olması, eğer bir grup nesneye bir şey yapmak zorundaysanız, tüm nesneyi numaralandırabilir ve her bir nesne üzerinde hareket edebilirsiniz. İlk önce, tek bir işlemi durdurmak için kullanacağınız yöntemi bulmanız gerekir..
Get-Process | Get-Member -MemberType Yöntemi
Mükemmel, Kill yöntemini kullanıp daha sonra hepsini öldürmek için ForEach-Object'e bağlayabiliriz..
Get-Process -Adı not defteri | ForEach-Object -Process $ _. Kill ()
Burada Get-Process'in döndürdüğü ve onları ForEach-Object cmdlet'ine ileten tüm işlem nesnelerini aldık. Where-Object cmdlet'ine benzer şekilde, boru hattındaki her bir nesneyi Kill () yöntemine çağırabildiğimiz $ _ ile temsil ettik. Tüm söylenen ve yapılanlarla, bir toplama sayma yukarıdaki yöntemlerden çok daha yavaştır ve sadece son bir sonuç olarak kullanılmalıdır..
özet
Seçim Bir
Get-Process -Adı not defteri | Dur-Süreci
Seçim İki
Get-WmiObject -Sınıf Win32_Process -Filter “name = 'notepad.exe'” | Invoke-WmiMethod -Adı Sonlandır
Üç seçenek
Get-Process -Adı not defteri | ForEach-Object -Process $ _. Kill ()
Hepsi bu kadar millet, hepsi gelecek PowerShell eğlencesi için görüşmek üzere.