11Sep
Ponieważ PowerShell opiera się na. Net Framework i zawiera różne inne technologie, takie jak WMI i CIM, zawsze istnieje więcej niż jeden sposób na osiągnięcie tego samego. Dołącz do nas na ten krótki post, gdzie dowiadujemy się, jak wybrać najlepszą metodę realizacji naszych zadań.
Przeczytaj poprzednie artykuły z serii:
- Dowiedz się, jak zautomatyzować system Windows za pomocą programu PowerShell
- Nauka korzystania z poleceń Cmdlets w programie PowerShell
- Nauka korzystania z obiektów w programie PowerShell Nauka
- Formatowanie, filtrowanie i porównywanie w programie PowerShell
- Naucz się korzystać z usług zdalnego dostępuPowerShell
- Używanie PowerShell do uzyskiwania informacji o komputerze
Pozostań zestrojony przez resztę serii przez cały tydzień.
Używanie poleceń wsadowych wsadowych
Wcześniej w serii, kiedy wprowadziliśmy cię do potoku, pokazaliśmy ci, jak możesz wziąć obiekty, które wyprowadza jeden cmdlet i przekazać je jako dane wejściowe do innego polecenia cmdlet, używając czegoś takiego:
Get-Process -Nazwa notatnika |Zatrzymaj proces
Zabije każdy proces o nazwie "notatnik".Ale prawdopodobnie zastanawiasz się, w jaki sposób PowerShell może zabić każde wystąpienie notatnika za pomocą jednego polecenia. Odpowiedź leży w pomocy polecenia cmdlet Stop-Process.
pomoc Stop-Process -Full
Jeśli spojrzysz na ostatni wiersz kodu w sekcji składni, zobaczysz, że parametr InputObject akceptuje obiekt typu Process [], i gdy zobaczysz typ, po którym następują dwa nawiasy kwadratowe, takie jakoznacza to, że parametr akceptuje jeden lub więcej z poprzedniego typu. W takim przypadku akceptuje jeden lub więcej obiektów procesu. Technicznie powiedzielibyśmy, że cmdlet InputObject akceptuje proces .Ilekroć masz cmdlet, który obsługuje operacje wsadowe w ten sposób, użyj go. To jest numer jeden.
Korzystanie z usługi WMI
Chociaż usługa WMI nie jest najlepszą technologią dostarczaną z centrali firmy Microsoft, zajmuje drugie miejsce na liście sposobów pracy z kolekcjami obiektów. Możemy łatwo uzyskać listę uruchomionych procesów z klasy Win32_Process, jak na przykład:
Get-WmiObject -Class Win32_Process
Ponieważ zapytanie WMI zwraca swój własny rodzaj obiektu, należy poszukać metody, która może zatrzymać proces, więcprzepuszcza potok do Get-Member.
Get-WmiObject -Class Win32_Process |Get-Member
Wygląda na to, że najbliższą rzeczą do zatrzymania jest metoda zakończenia, więc to musi być ta. Aby wywołać metodę w obiekcie WMI, wystarczy przepuścić ją do Invoke-WmiMethod i podać nazwę metody.
Get-WmiObject -Class Win32_Process -Filter "name = 'notepad.exe'" |Invoke-WmiMethod -Name Zakończ
Świetnie, to wystarczyło. Gdy tylko uzyskasz wartość ReturnValue równą 0 w WMI, pamiętaj, że polecenie zostało wykonane pomyślnie.
Wyliczenie
W przypadku braku innych dwóch metod, jeśli musisz coś zrobić z grupą obiektów, możesz wyliczyć cały obiekt i działać na każdym obiekcie. Najpierw musisz znaleźć metodę, której chcesz użyć do zatrzymania pojedynczego procesu.
Pobierz procesGet-Member -MemberType Metoda
Doskonała, wygląda na to, że możemy użyć metody Kill, a następnie podłączyć do ForEach-Object, aby zabić je wszystkie.
Notatnik dziennika Get-Process-Name |ForEach-Object -Process{ $ _. Kill()}
Tutaj wzięliśmy wszystkie obiekty procesu zwrócone przez Get-Process i przekazaliśmy je do cmdletu ForEach-Object. Podobnie jak polecenie cmdlet Where-Object, reprezentowaliśmy każdy obiekt w potoku $ _, który mogliśmy wywołać w metodzie Kill() .Przy tym wszystkim, co powiedzieliśmy i zrobiliśmy, wyliczenie kolekcji jest znacznie wolniejsze niż powyższe metody i powinno być używane tylko jako ostatni wynik.
Podsumowanie
Wybór Jeden
Notatnik procesu pobierania danych |Stop-Process
Choice Two
Get-WmiObject -Class Win32_Process -Filter "name =" notepad.exe "" |Invoke-WmiMethod -Name Zakończ
Choice Three
Get-Process -Name Notatnik |ForEach-Object -Process{ $ _. Kill()}
To wszystko na ten czas ludzie, do zobaczenia w przyszłym tygodniu po więcej zabawy PowerShell.