If-Koubou

Geek School: Работа с колекции в PowerShell

Geek School: Работа с колекции в PowerShell (Как да)

Тъй като PowerShell се основава на .Net Framework и включва различни други технологии като WMI и CIM, винаги има повече от един начин за постигане на едно и също нещо. Елате при нас за този кратък пост, където се учим как да изберем най-добрия метод за изпълнение на нашите задачи.

Не забравяйте да прочетете предишните статии в серията:

  • Научете как да автоматизирате Windows с PowerShell
  • Научете как да използвате Cmdlets в PowerShell
  • Учене как да използвате обекти в PowerShell
  • Форматиране на обучение, филтриране и сравнение в PowerShell
  • Научете как да използвате Remoting в PowerShell
  • Използване на PowerShell за получаване на компютърна информация

И останете настроени за останалата част от серията през цялата седмица.

Използване на партидни пакети

По-рано в поредицата, когато ви запознахме с тръбопровода, ви показахме как можете да вземете предметите, които извеждате от една cmdlet и да ги предадете като вход към друга cmdlet, като използвате нещо подобно:

Get-Process-Напиши бележник | Стоп-Process

Това би убило всеки процес с името "бележник". Но вие вероятно се чудите как PowerShell може да убие всеки случай на бележник с една команда. Отговорът се крие в помощта на cmdlet за спиране на процеса.

помощ Stop-Process-Full

Ако погледнете последния ред от кода в секцията за синтаксис, можете да видите, че параметърът InputObject приема обект от типа Process [] и когато видите тип, последван от две квадратни скоби, това означава, че параметърът приема едно или повече от предходния тип. В този случай тя приема един или повече обекта на процеса. Технически, бихме казали, че InputObject cmdlet приема процес масив, Всеки път, когато имате cmdlet, който поддържа партидните операции по този начин, използвайте го. Това е избор номер едно.

Използване на WMI

Въпреки че WMI не е най-добрата част от технологията за доставка от централата на Microsoft, тя се появява на второ място в списъка с начините за работа с колекции от обекти. Бихме могли лесно да получим списък с текущи процеси от клас Win32_Process като например:

Get-WmiObject - клас Win32_Process

Тъй като заявката за WMI връща свой собствен вид обект, ще трябва да потърсите метод, който може да спре процеса, така че позволява тръба, която да се получи член.

Get-WmiObject - клас Win32_Process | Get-държава

Изглежда, че най-близкото нещо, което трябва да спрете, е методът за прекратяване, така че трябва да е този. За да се обадите на метод на WMI обект, просто го насочете към Invoke-WmiMethod и задайте името на метода.

Get-WmiObject - Клас Win32_Process -Филтър "име = 'notepad.exe'" | Invoke-WmiMethod - Намерете прекратяване

Страхотно, това направи трик. Когато получите ReturnValue на 0 в WMI, не забравяйте, че командата е изпълнена успешно.

изброяване

При неуспех на другите два метода, ако трябва да направите нещо за куп обекти, можете да изброите целия обект и да действате върху всеки отделен обект. Първо трябва да намерите метода, който бихте използвали, за да спрете един процес.

Получаване на процес | Метод Get-Member -MemberType

Перфектно, изглежда, че можем да използваме метода "Убий" и след това да преминем в ForEach-Object, за да ги убием всички.

Get-Process-Напиши бележник | ForEach-Object -Process $ _.Kill ()

Тук взехме всички обекти на процеса, които Get-Process се върнаха и ги предадоха на командата ForEach-Object. Подобно на командата Къде-обект, ние представлявахме всеки обект в тръбопровода с $ _, който успяхме да се свържем с метода Kill (). С всичко казано и направено, изброяването на колекция е много по-бавно от горните методи и трябва да се използва само като последен резултат.

резюме

Избор 1

Get-Process-Напиши бележник | Стоп-Process

Избор две

Get-WmiObject - Клас Win32_Process -Филтър "име = 'notepad.exe'" | Invoke-WmiMethod - Намерете прекратяване

Избор три

Get-Process-Напиши бележник | ForEach-Object -Process $ _.Kill ()

Това е всичко за това време хора, ще видите следващата седмица за повече PowerShell забавно.