Не забравяйте да прочетете предишните статии в серията:
- Научете как да автоматизирате Windows с PowerShell
- Научете как да използвате Cmdlets в PowerShell
- Учене как да използвате обекти в PowerShell
- Форматиране на обучение, филтриране и сравнение в PowerShell
- Научете как да използвате Remoting в PowerShell
- Използване на PowerShell за получаване на компютърна информация
И останете настроени за останалата част от серията през цялата седмица.
Използване на партидни пакети
По-рано в поредицата, когато ви запознахме с тръбопровода, ви показахме как можете да вземете предметите, които извеждате от една cmdlet и да ги предадете като вход към друга cmdlet, като използвате нещо подобно:
Get-Process -Name notepad | Stop-Process
Това би убило всеки процес с името "бележник". Но вие вероятно се чудите как PowerShell може да убие всеки случай на бележник с една команда. Отговорът се крие в помощта на cmdlet за спиране на процеса.
help Stop-Process –Full
Ако погледнете последния ред от кода в секцията за синтаксис, можете да видите, че параметърът InputObject приема обект от типа Process и когато видите тип, последван от две квадратни скоби, това означава, че параметърът приема едно или повече от предходния тип. В този случай тя приема един или повече обекта на процеса. Технически, бихме казали, че InputObject cmdlet приема процес масив, Всеки път, когато имате cmdlet, който поддържа партидните операции по този начин, използвайте го. Това е избор номер едно.
Използване на WMI
Въпреки че WMI не е най-добрата част от технологията за доставка от централата на Microsoft, тя се появява на второ място в списъка с начините за работа с колекции от обекти. Бихме могли лесно да получим списък с текущи процеси от клас Win32_Process като например:
Get-WmiObject –Class Win32_Process
Get-WmiObject –Class Win32_Process | Get-Member
Изглежда, че най-близкото нещо, което трябва да спрете, е методът за прекратяване, така че трябва да е този. За да се обадите на метод на WMI обект, просто го насочете към Invoke-WmiMethod и задайте името на метода.
Get-WmiObject -Class Win32_Process -Filter “name=’notepad.exe'” | Invoke-WmiMethod -Name Terminate
изброяване
При неуспех на другите два метода, ако трябва да направите нещо за куп обекти, можете да изброите целия обект и да действате върху всеки отделен обект. Първо трябва да намерите метода, който бихте използвали, за да спрете един процес.
Get-Process | Get-Member -MemberType Method
Get-Process -Name notepad | ForEach-Object -Process {$_.Kill()}
резюме
Избор 1
Get-Process -Name notepad | Stop-Process
Избор две
Get-WmiObject -Class Win32_Process -Filter “name=’notepad.exe'” | Invoke-WmiMethod -Name Terminate
Избор три
Get-Process -Name notepad | ForEach-Object -Process {$_.Kill()}
Това е всичко за това време хора, виждам ви следващата седмица за повече PowerShell забавно.