11Sep

Geek Okulu: PowerShell'de Koleksiyonlarla Çalışma

PowerShell. NET Framework'ü temel aldığından ve WMI ve CIM gibi çeşitli teknolojileri içerdiğinden, aynı şeyi gerçekleştirmenin birden fazla yolu vardır. Görevlerimizi gerçekleştirmek için en iyi metodu seçmeyi öğrendiğimiz bu kısa mesaj için bize katılın.

Serideki önceki makaleleri okuduğunuzdan emin olun:

  • Windows'u PowerShell ile Otomatikleştirmeyi Öğrenin
  • PowerShell'de Cmdlet Kullanmayı Öğrenin
  • PowerShell'de Nesneleri Nasıl Kullanacağınızı Öğrenin
  • PowerShell'de Formatlama, Filtreleme ve Karşılaştırmayı Öğrenme
  • Uzaklaştırmayı Kullanmayı öğreninPowerShell
  • Bilgisayar Bilgilerini Almak İçin PowerShell Kullanarak

Serinin diğer bölümleri için bütün hafta boyunca durmaya devam edin.

Toplu İşaretçi Komutlarını Kullanma

Seri boyunca, sizi boru hattına tanıttığımızda, bir cmdlet'in çıktısını alıp bu gibi bir şeyi kullanarak başka bir cmdlet'e girdi olarak nasıl götürebileceğinizi gösterdik:

Get-Process -Not defterini isimlendirStop-Process

Bu, "not defteri" adı olan herhangi bir işlemi sonlandırır. Ancak muhtemelen PowerShell'in her bir not defteri örneğini tek bir komutla nasıl öldürebildiğini merak ediyorsunuzdur. Yanıt, Dur-İşlem cmdlet'inin yardımıyla bulunur.

yardım Durdur İşlemi -Full

Sözdizimi bölümündeki son kod satırına bakarsanız, InputObject parametresinin Process [] türünde bir nesneyi kabul ettiğini ve ardından iki köşeli ayraç izleyen bir tür gördüğünü görebilirsinizparametrenin 'yi önceki tipin bir veya daha fazla 'sini kabul ettiği anlamına gelir. Bu durumda, bir veya daha fazla işlem nesnesi kabul eder. Teknik olarak, InputObject cmdlet'inin dizisi işlemini kabul ettiğini söyleyebiliriz. Toplu işlemleri bu şekilde destekleyen bir cmdletiniz olduğunda, onu kullanın. Bu bir numara seçimi.

WMI

'yi Kullanma WMI, Microsoft Merkezinden gönderilecek en iyi teknoloji parçası olmamasına rağmen, nesnelerin koleksiyonlarıyla nasıl çalışılacağı listesinde ikinci sırada yer alıyor. Kolayca Win32_Process sınıfından çalışan işlemlerin listesini alabilirsiniz:

Get-WmiObject -Class Win32_Process

WMI sorgusu kendi nesne türünü döndürdüğünden işlemi durdurabilecek bir yöntem aramalısınız. Get-Member'e boru açsın.

Get-WmiObject-Sınıf Win32_Process |Get-Member

Durdurulması gereken en yakın şey terminate yöntemiymiş gibi görünür, dolayısıyla bir tane olması gerekir. Bir WMI Nesnesi üzerinde bir yöntem çağırmak için onu yalnızca Invoke-WmiMethod'a götürmeniz ve yöntemin adını belirtmeniz yeterlidir.

Get-WmiObject-Sınıf Win32_Process -Filter "name = 'notepad.exe'" |Invoke-WmiMethod -Name Terminate

Harika, bu hile yaptı.WMI'de bir ReturnValue 0 olduğunda, komutun başarıyla çalıştırıldığını unutmayın.

Numaralandırma

Diğer iki yöntemde başarısız olursanız, bir sürü nesneye bir şey yapmak zorunda kalırsanız, nesnenin tamamı numaralandırılabilir ve her bir nesne üzerinde hareket edebilir.İlk olarak, tek bir işlemi durdurmak için kullanacağınız yöntemi bulmanız gerekir.

Get-Prosesi |Get-Member-ÜyeTip Metodu

Mükemmel, Kill yöntemini kullanabiliriz ve daha sonra hepsini öldürmek için ForEach-Object'e yönlendiriyoruz.

Alma Süreci -Name notepad |ForEach-Object -Process{ $ _. Kill()}

Burada Get-Process'in döndürdüğü ve ForEach-Object cmdletine aktardığı tüm işlem nesnelerini aldık. Where-Object cmdlet'ine çok benzer şekilde, boru hattındaki her nesneyi, üzerinde Kill() yöntemini çağırdığımız $ _ ile temsil ettik. Bütün bunların söylendiği ve yapıldığı bir koleksiyonun numaralandırılması yukarıdaki yöntemlerden çok daha yavaştır ve yalnızca son bir sonuç olarak kullanılmalıdır.

Özeti

Birinci Seçim

Alma Süreci -Name notepad |Dur-İşlem

İki Seçim

Get-WmiObject-Sınıf Win32_Process -Filter "name = 'notepad.exe'" |Invoke-WmiMethod -Name Terminate

Seçim Üç

Get-Process -Name notepad |ForEach-Object -Process{ $ _. Kill()}

Bu seferlik işimiz bitti, daha fazla PowerShell eğlencesi için gelecek hafta görüşürüz.