PowerShell i wszystko, co musisz wiedzieć o tym narzędziu

A co gdyby Twój komputer mógł wykonywać za Ciebie nudne zadania? Dzięki programowi Windows PowerShell jest to możliwe. Oto jak za pomocą programu PowerShell zautomatyzować powtarzające się codzienne zadania, których nikt nie chce wykonywać wciąż od nowa.

Spis treści

Czym jest PowerShell?

Microsoft PowerShell to narzędzie wiersza poleceń i język skryptowy, który jest potężnym narzędziem dla administratorów, umożliwiającym automatyzację szerokiego zakresu zadań na komputerach i w sieciach. PowerShell zawiera komponenty wiersza poleceń i został zbudowany na bazie środowiska .NET. Jeśli czytasz o WebTech360, to musisz wiedzieć, że PowerShell to narzędzie wybierane przez administratorów IT do zarządzania dużymi sieciami.

Poznanie zasad korzystania z programu PowerShell ułatwi wykonywanie wielu żmudnych, codziennych zadań. Można również wprowadzać zmiany w całym systemie, poprzez sieć, bez konieczności osobnej regulacji każdego serwera. PowerShell staje się niezbędnym elementem zarządzania środowiskami hybrydowej chmury .

PowerShell ma wiele zastosowań, które pozwalają na efektywniejszą pracę i utrzymanie sprawnego działania sieci. Do najbardziej podstawowych zastosowań należą: planowanie codziennych aktualizacji systemów, generowanie raportów dla bieżących procesów, okresowe usługi i wiele innych. Prawdą jest, że wiele z tych zadań można wykonać za pomocą interfejsu graficznego, ale celem programu PowerShell jest ich szybsze wykonanie.

Jeśli masz do wykonania regularne zadanie konserwacyjne, którego skonfigurowanie zajmuje kilka minut, możesz zapisać tę samą funkcjonalność w jednym poleceniu programu PowerShell o określonej nazwie. Więc następnym razem po prostu otwórz ten skrypt, a będzie on działał w tle. Poznanie logiki skryptów programu PowerShell, zrozumienie sposobu działania obiektów (var) i inteligentnej implementacji programu PowerShell w sieci sprawi, że zaczniesz się zastanawiać, dlaczego nie korzystałeś z programu PowerShell wcześniej.

W tym samouczku omówimy podstawy programu PowerShell, co będzie pomocne dla osób rozpoczynających przygodę z IT, zwłaszcza jeśli znasz wiersz polecenia systemu Windows. W artykule przedstawiono, jak korzystać z podstawowych narzędzi i poleceń, jak manipulować plikami i folderami, zrozumieć obiekty, używać zmiennych i zarządzać serwerami zdalnymi.

Krótka historia narzędzi wiersza poleceń systemu Windows

Po wydaniu systemu Windows NT program CMD.EXE stał się narzędziem wiersza poleceń dla systemu Windows. Mimo że CMD.EXE odziedziczył niektóre komponenty po swoim poprzedniku z systemu DOS (COMMAN.COM), to nadal bazował na dość „prymitywnym” języku skryptowym: korzystał z plików poleceń systemu Windows (.CMD i .BAT). Dodanie Windows Scripting Host oraz języków VBScript i JScript znacznie zwiększyło możliwości skryptowe narzędzia.

Technologie te stanowią zrównoważone połączenie zaawansowanych narzędzi wiersza poleceń i środowisk skryptowych. Tak naprawdę problemem nie jest to, ile plików CMD.EXE, .CMD i Windows Scripting Host można manipulować. Ludzie najczęściej narzekają i martwią się o wykonanie pozornie prostych zadań.

Korzystając z „struktury” wiersza poleceń i narzędzi skryptowych, każdy w miarę kompleksowy skrypt wymaga kombinacji poleceń wsadowych, hosta skryptów systemu Windows i samodzielnych plików wykonywalnych. Każdy skrypt korzysta z innych konwencji dotyczących wykonywania, żądania, analizowania i zwracania danych.

Słaba obsługa zmiennych w CMD.EXE, niespójne interfejsy i ograniczony dostęp do ustawień systemu Windows, w połączeniu z inną słabością, sprawiają, że skrypty wiersza poleceń są trudniejsze do wdrożenia i używania. Zastanawiasz się pewnie, jaka jest tu „inna słabość”? Należy pamiętać, że jest to zwykły tekst. W tych technologiach wszystko jest w formie tekstowej. Dane wyjściowe polecenia lub skryptu są tekstem, który należy poddać analizie składniowej i zmienić jego format, aby mógł służyć jako dane wejściowe dla następnego polecenia. Jest to podstawowy punkt wyjścia, który program PowerShell przyjmuje ze wszystkich tradycyjnych powłok.

Przedstawiamy narzędzia, polecenia i moduły programu PowerShell

Trzy koncepcje przedstawione w tej sekcji stanowią jedynie podstawowe informacje pozwalające zrozumieć najważniejsze koncepcje stanowiące fundament programu PowerShell. W przypadku poleceń programu PowerShell będziesz musiał poświęcić więcej czasu na naukę i opanowanie bardziej zaawansowanych koncepcji.

Narzędzia PowerShell

Program PowerShell jest instalowany domyślnie w systemach Windows 10, Windows 7, Windows Server 2008 R2 i nowszych wersjach systemu Windows. Nowe wersje programu PowerShell dodają nowe funkcje i „polecenia cmdlet” (określenie firmy Microsoft na polecenia programu PowerShell, wymawiane „command-lets”) i są instalowane wraz z odpowiednią wersją pakietu Windows Management Framework (WMF).

Obecnie najnowszą zalecaną wersją jest WMF 5.1. W niektórych przypadkach nowe funkcje zależą nie tylko od wersji WMF, ale także od systemu operacyjnego. Na przykład systemy Windows 8 i Windows Server 2012 obsługują polecenie cmdlet Test-NetConnection, które umożliwia przetestowanie łączności z określonym portem TCP/IP , ale to polecenie cmdlet nie jest dostępne w systemie Windows 7, nawet w najnowszej wersji programu WMF.

W większości systemów Windows użytkownicy mają do dyspozycji dwa środowiska PowerShell: konsolę PowerShell i środowisko PowerShell ISE (Integrated Scripting Environment). Konsola PowerShell wygląda jak tradycyjny wiersz poleceń, ale oferuje pełną funkcjonalność programu PowerShell. Nazwy zmiennych, pętle, automatyczne uzupełnianie poleceń i przetwarzanie potokowe są dostępne z poziomu konsoli PowerShell.

W przypadku bardziej zaawansowanych zastosowań (takich jak tworzenie skryptów) PowerShell ISE oferuje funkcje automatycznego uzupełniania poleceń, podświetlania kodu oraz funkcję uzupełniania kodu Intellisense firmy Microsoft, które ułatwiają tworzenie i testowanie kodu PowerShell. PowerShell ISE umożliwia także jednoczesną pracę z wieloma skryptami PowerShell za pomocą nawigacji przy użyciu kart.

polecenia cmdlet w programie PowerShell

Podstawą poleceń programu PowerShell jest polecenie cmdlet. Podczas tworzenia poleceń cmdlet w programie PowerShell firma Microsoft przyjęła kilka strategii projektowych.

Pierwszą z nich jest możliwość łatwego wnioskowania nazw poleceń cmdlet lub przynajmniej uczynienia ich bardziej możliwymi do odnalezienia. Polecenia i polecenia cmdlet programu PowerShell są również łatwiejsze w użyciu. Ich składnia jest ujednolicona, co ułatwia tworzenie skryptów z poziomu interfejsu wiersza poleceń.

Polecenia cmdlet korzystają z formatu czasownik-rzeczownik, jak w poleceniach Get-Service, Stop-Service lub Import-Csv. Część czasownikowa w nazwie polecenia cmdlet wskazuje na akcję wykonywaną na rzeczowniku. Zwykle polecenia cmdlet służące do pobierania informacji mają w swojej nazwie czasownik Get , na przykład Get-Process lub Get-Content . Polecenie służące do edycji czegoś zwykle zaczyna się od czasownika Set , polecenie dodania nowego bytu gdzieś zaczyna się zwykle od Add lub New .

Po drugie, powszechnie używanym parametrom w programie PowerShell nadawane są standardowe nazwy. Na przykład parametr -ComputerName umożliwia wykonanie polecenia cmdlet na jednym lub większej liczbie komputerów zdalnych. -Credential służy do dostarczenia obiektu uwierzytelniania zawierającego dane uwierzytelniające użytkownika, aby uruchomić polecenie jako określony użytkownik.

Moduły w PowerShell

Aliasów można używać zarówno dla poleceń cmdlet, jak i parametrów, co pozwala skrócić liczbę naciśnięć klawiszy i skrócić całkowity czas trwania polecenia (bardzo przydatne, gdy łączysz ze sobą wiele poleceń). Choć aliasy te nie zawsze używają standardowych konwencji nazewnictwa, nadal odzwierciedlają tradycyjne narzędzia wiersza poleceń.

W programie PowerShell aliasy takie jak DIR, CD, DEL i CLS odpowiadają odpowiednio poleceniom cmdlet Get-ChildItem, Set-Location, Remove-Item i Clear-Host. Aliasy parametrów mogą działać na dwa sposoby: mogą korzystać ze wstępnie zdefiniowanego aliasu dostarczonego przez polecenie cmdlet lub mogą zostać przekształcone w alias poprzez wprowadzenie wystarczającej liczby znaków, aby utworzyć unikatowe dopasowanie między obsługiwanymi parametrami polecenia cmdlet.

Zarządzanie plikami i folderami

Większość administratorów systemów musi wykonywać operacje na plikach i folderach w trakcie swojej pracy, na przykład przenosić folder do innej lokalizacji na serwerze, archiwizować pliki dziennika lub wyszukiwać duże pliki. Jeśli te same operacje powtarzają się na wielu plikach, warto je zautomatyzować przy użyciu programu PowerShell, co pozwoli zaoszczędzić czas.

Jednym z pierwszych narzędzi wiersza poleceń, jakich uczył się administrator w dawnych czasach komputerów, umożliwiających wyszukiwanie plików i katalogów, było polecenie dir. Dir wyświetli listę plików i katalogów zawartych w określonym katalogu.

W programie PowerShell dostępne jest podobne polecenie w formie polecenia cmdlet Get-ChildItem . Get-ChildItem umożliwia szybkie utworzenie listy plików w katalogu w taki sposób, aby można było manipulować plikami za pomocą polecenia potokowego lub przypisać dane wyjściowe do zmiennej.

Aby użyć polecenia Get-ChildItem, wystarczy podać ścieżkę, albo poprzez potok, za pomocą parametru -Path , albo bezpośrednio po nazwie polecenia cmdlet. Aby dostosować odpowiedź zwróconą przez polecenie Get-ChildItem, konieczne jest uwzględnienie niektórych parametrów udostępnianych przez polecenie cmdlet.

Parametr -Filter jest jednym ze sposobów wyszukiwania plików. Domyślnie Get-ChildItem zwraca tylko bezpośrednie elementy podrzędne katalogu docelowego. Funkcjonalność tę można rozszerzyć, używając dodatkowej opcji -Recurse , która rekurencyjnie przeszukuje katalogi zawarte w bieżącym katalogu.

W programie PowerShell 4.0 polecenie Get-ChildItem dodało możliwość ograniczenia wyników do plików lub katalogów za pomocą przełącznika –File lub –Directory . Poprzednie wersje programu PowerShell musiały przekazać wynik do Where-Object, filtrując według właściwości PSIsContainer, aby dokonać tego ustalenia. Przykład obu technik użytych do zwrócenia folderów zawartych w C:Users pokazano poniżej:

Get-ChildItem C:Users -Directory Get-ChildItem C:Users | Where-Object {$_.PSIsContainer –eq $true}

Aby wykryć pliki ukryte lub systemowe, należy użyć  opcji -Force . Polecenie Get-ChildItem w programie PowerShell 4.0 i nowszych można również wykorzystać do zwrócenia wyłącznie plików ukrytych, tylko do odczytu lub systemowych, odpowiednio za pomocą parametrów -Hidden, -ReadOnly i –System . Podobną funkcjonalność można było osiągnąć w poprzednich wersjach poprzez filtrowanie właściwości Mode przy użyciu Where-Object:

Get-ChildItem C:Users | Where-Object {$_.Mode -like '*R*'}

Sprawdź czy plik istnieje

Zazwyczaj podczas pracy z plikami wystarczy nam informacja, czy plik istnieje i czy ścieżka do katalogu jest prawidłowa. W programie PowerShell dostępne jest polecenie cmdlet w formie Test-Path, które zwraca wartość true lub false.

Polecenie Test-Path jest używane jako środek ostrożności przed próbą skopiowania lub usunięcia konkretnego pliku.

Kopiuj, przenoś i usuwaj pliki

Kopiuj-element: Kopiuje jeden lub więcej plików lub katalogów z lokalizacji określonej parametrem -Path do lokalizacji określonej opcją -Destination.

Przenieś element: Przenieś plik lub folder.

Podczas kopiowania lub przenoszenia struktur katalogów należy użyć opcji -Recurse , aby polecenie cmdlet wykonało akcję na katalogu i jego zawartości. W niektórych przypadkach opcja -Force jest potrzebna , np. gdy plik przeznaczony tylko do odczytu zostanie nadpisany podczas operacji kopiowania.

Usuń element: Usuń plik, folder.

Przełącznik -Force należy użyć w przypadku pliku przeznaczonego tylko do odczytu, a -Recurse należy użyć w przypadku usuwania katalogu wraz z jego zawartością.

Korzystanie z poleceń PowerShell -WhatIf i -Confirm

Przed wykonaniem poważnego, masowego usuwania użyj -WhatIf . -WhatIf pozwala zobaczyć, co się stanie, jeśli zostanie uruchomiony skrypt lub polecenie i czy będzie to miało negatywny wpływ na usunięcie ważnych danych biznesowych. Warto również zauważyć, że -WhatIf nie ogranicza się do operacji na plikach, jest szeroko stosowany w programie PowerShell.

W przypadku skryptów, które zamierzasz uruchomić ręcznie lub, co gorsza, mają zależne od siebie polecenia uruchamiane ręcznie, rozważ użycie opcji -Confirm . Dzięki temu możesz poprosić użytkownika o interakcję zanim akcja faktycznie zostanie wykonana.

Skrypty PowerShell = pliki wsadowe na sterydach

Sam PowerShell został napisany w języku .NET i w dużym stopniu bazuje na środowisku .NET Framework. Dlatego PowerShell został zaprojektowany jako obiektowy język narzędziowy i skryptowy. Wszystko w programie PowerShell jest traktowane jako w pełni funkcjonalny obiekt .NET Framework. Polecenie, które udostępnia zestaw obiektów, które można wykorzystać za pomocą właściwości i metod danego typu obiektu. Gdy chcesz przekazać dane wyjściowe jednego polecenia do drugiego, program PowerShell faktycznie przekazuje obiekt, a nie tylko tekst wyjściowy z pierwszego wiersza polecenia. Dzięki temu następne polecenie uzyska pełny dostęp do wszystkich właściwości i metod obiektu w potoku.

Traktowanie wszystkiego jako obiektu i możliwość akceptowania obiektów pomiędzy poleceniami to duża teoretyczna zmiana dla narzędzi wiersza poleceń. Mimo to PowerShell nadal funkcjonuje jak tradycyjne narzędzie powłoki. Polecenia, skrypty i pliki wykonywalne można wpisywać i uruchamiać z wiersza poleceń, a wyniki są wyświetlane w formacie tekstowym. Pliki .CMD i .BAT systemu Windows, skrypty VBScript i JScripts oraz pliki wykonywalne uruchamiane w pliku CMD.EXE nadal działają w programie PowerShell. Ponieważ jednak nie są zorientowane obiektowo, nie mają pełnego dostępu do obiektów tworzonych i używanych w programie PowerShell. W przypadku tych starszych skryptów i wykonań wszystko nadal będzie traktowane jako tekst, ale program PowerShell można łączyć z wieloma innymi technologiami. Jest to bardzo ważna kwestia, jeśli chcesz zacząć używać programu PowerShell ze zbiorem istniejących skryptów, których nie można przekonwertować jednocześnie.

Wyjaśnienie parametrów programu PowerShell

Polecenia cmdlet mogą akceptować parametry zmieniające ich zachowanie. Podczas uruchamiania polecenia cmdlet lub funkcji możesz podać wartości parametrów, aby określić, co, kiedy, gdzie i w jaki sposób ma zostać uruchomione poszczególne polecenie programu PowerShell.

Na przykład polecenie Get-Process pobierze i wyświetli listę wszystkich procesów uruchomionych w systemie operacyjnym:

PowerShell i wszystko, co musisz wiedzieć o tym narzędziu
Get-Process wyświetla listę wszystkich uruchomionych procesów.

A co, jeśli chcesz osiągnąć tylko określony postęp? Można to zrobić za pomocą parametrów. Na przykład, aby pobrać wszystkie procesy Slacka, możesz użyć parametru Name w poleceniu cmdlet Get-Process:

Get-Process -Name Slack

Następnie zobaczysz tylko procesy o nazwie „slack”:

PowerShell i wszystko, co musisz wiedzieć o tym narzędziu
Używanie Get-Process z parametrami

Wskazówka : niektóre parametry są „pozycyjne”, co oznacza, że ​​ich nazwy są opcjonalne. W tym przypadku Get-Process -Name Slack i Get-Process Slack wykonują to samo zadanie.

Każde polecenie cmdlet akceptuje różne typy parametrów. Użyj polecenia Get-Help, aby zobaczyć akceptowane parametry polecenia cmdlet w sekcji SYNTAX.

Get-Help Get-Process

Zobaczysz listę wszystkich możliwych sposobów uruchomienia danego polecenia cmdlet:

PowerShell i wszystko, co musisz wiedzieć o tym narzędziu
parametry składni polecenia cmdlet

W tym przypadku polecenie cmdlet Get-Process akceptuje parametry takie jak Nazwa, Identyfikator, NazwaKomputera, Moduł, Informacje oWersjiPliku i inne typowe parametry. Symbole tutaj oznaczają:

Symbol

Nazwa

Oznaczający

 

Bęben

Parametr nie akceptuje danych wejściowych

-

Łącznik

Podaj nazwę parametru

<>

nawiasy klamrowe

Miejsce zastępcze dla tekstu

[]

Zdanie wtrącone

Parametr może przyjąć jedną lub więcej wartości.

{}

nawiasy klamrowe

Parametr akceptuje zestaw wartości.

Parametry akceptują zbiór wartości wskazujących typ wymaganych danych, np. ciąg znaków, liczba całkowita, wartość logiczna lub data i godzina. Na przykład poniższe polecenie:

Get-Process [[-Name] ]

... oznacza, że ​​parametr Nazwa akceptuje jedną lub więcej wartości ciągu, podczas gdy to polecenie:

Get-Process -Id 

... oznacza, że ​​parametr Id akceptuje jedną lub więcej wartości całkowitych.

W poprzednim przykładzie Get-Process użyto parametru Name do zawężenia wyników. Jeśli jednak chcesz zawęzić zakres do bardziej szczegółowego procesu, możesz użyć parametru ID , który wymaga liczby całkowitej, zgodnie z jego składnią.

Get-Process -Id 3016

Następnie na liście będzie widoczny tylko jeden proces:

PowerShell i wszystko, co musisz wiedzieć o tym narzędziu
Używanie parametru Id w poleceniach cmdlet

Utwórz potok

PowerShell traktuje wszystkie dane jako obiekty. Aby utworzyć skrypt, obiekty te uruchamiają serię poleceń cmdlet lub funkcji połączonych symbolem potoku (|). Wybór odpowiednich poleceń cmdlet i połączenie ich w logicznej kolejności za pomocą potoku ma duże znaczenie dla wydajności skryptu.

Załóżmy, że tworzysz skrypt sortujący i wyświetlający 5 plików zajmujących najwięcej miejsca w folderze. Istnieją bardziej efektywne sposoby tworzenia skryptu sortującego pliki, ale poniższy, prosty sposób jest łatwy do zrozumienia:

PowerShell i wszystko, co musisz wiedzieć o tym narzędziu
Skrypt Sort-LargeFiles PS1

Aby wykonać to w programie PowerShell, należy użyć potoku wyglądającego następująco:

Get-ChildItem -Path "C:\Directory" -File | Sort-Object Length -Descending `
 | Select-Object -First 5 | Format-Table Name, Length -AutoSize

Zapisz potok jako skrypt PS1

Teraz, gdy mamy już działający potok, możemy go zapisać jako plik skryptu PS1, dzięki czemu nie będziemy musieli go importować przy każdym użyciu.

Najprostszym sposobem utworzenia pliku PS1 jest wklejenie skryptu do Notatnika i zapisanie pliku z rozszerzeniem .ps1.

PowerShell i wszystko, co musisz wiedzieć o tym narzędziu
Utwórz skrypt za pomocą Notatnika

Po utworzeniu pliku PS1 możesz go użyć w programie PowerShell, uruchamiając polecenie ./ScriptName.ps1 :

PowerShell i wszystko, co musisz wiedzieć o tym narzędziu
Korzystanie ze skryptu PS1

Wskazówka : Jeśli pojawi się błąd dotyczący uprawnień, najszybszym rozwiązaniem będzie uruchomienie programu PowerShell z uprawnieniami administratora podczas uruchamiania skryptu.

Gratulacje! Teraz możesz utworzyć skrypt PowerShell PS1.

Przykład skryptu programu PowerShell

Czytanie i zrozumienie cudów nowej technologii to jedno, ale jej faktyczne wykorzystanie to zupełnie inna sprawa! W dalszej części artykułu opracujemy skrypt programu PowerShell, aby zademonstrować jego możliwości i sposób użycia.

DIR jest jednym z najczęściej używanych poleceń w programie CMD.EXE . To polecenie wyświetla wszystkie pliki i podkatalogi zawarte w katalogu nadrzędnym (jak pokazano na rysunku 1). Oprócz nazwy każdego obiektu podawane są także data i godzina ostatniej aktualizacji oraz rozmiar każdego pliku. DIR wyświetla również łączny rozmiar wszystkich plików w katalogu, a także całkowitą liczbę plików i całkowitą liczbę podkatalogów.

PowerShell i wszystko, co musisz wiedzieć o tym narzędziu
Rysunek 1

Uruchomienie polecenia DIR w programie PowerShell również powoduje wyświetlenie listy katalogów podobnej do tej na rysunku 2, ale wygląda ona nieco inaczej. W programie PowerShell nie ma polecenia DIR, ale zamiast niego jest polecenie Get-ChildItem, które wykonuje tę samą funkcję. W programie PowerShell DIR jest aliasem dla Get-ChildItem. Nie zamierzam w tym poście poruszać kwestii pseudonimów. Polecenie DIR w programie PowerShell można interpretować jako skrót od Get-ChildItem.

Polecenie DIR w programie PowerShell udostępnia wiele takich samych informacji, jak te wymienione powyżej: listę plików i folderów, datę i godzinę ostatniej aktualizacji, a także rozmiar każdego pliku. Brakuje jednak informacji podsumowujących, które udostępnia polecenie DIR w programie CMD.EXE: całkowitego rozmiaru wszystkich plików w katalogu, całkowitej liczby plików oraz całkowitej liczby podkatalogów.

PowerShell i wszystko, co musisz wiedzieć o tym narzędziu
Rysunek 2

W przykładowym scenariuszu konieczne będzie utworzenie skryptu programu PowerShell symulującego polecenie CMD.EXE DIR. Poniżej wyjaśnię najważniejsze części skryptu.

DIR.PS1: Nagłówek

Skrypt programu PowerShell składa się z poleceń programu PowerShell w pliku zwykłego tekstu z rozszerzeniem .PS1. Zamiast DIR należy użyć pliku tekstowego o nazwie DIR.PS1.

Aby uruchomić skrypt, wpisz następujące polecenie na ekranie programu PowerShell:

.DIR.PS1 X:Folder

Gdzie X jest literą partycji dysku (np. C, D, E), a Folder jest nazwą folderu.

Jeśli chcesz poznać informacje o partycji dysku, będziesz musiał skorzystać z usługi Windows Management Instrumentation (WMI). Szczegóły dotyczące WMI wykraczają poza zakres tego artykułu, dlatego nie będziemy ich tutaj omawiać. Jednak poniższy kod programu PowerShell jest na tyle łatwy do zrozumienia, że ​​nie wymaga pomocy WMI. Możesz utworzyć zmienną „$filter” do wykorzystania z poleceniem Get-WmiObject. Ta zmienna filtru informuje polecenie Get-WmiObject, że chcesz uzyskać informacje tylko o konkretnym dysku. Wynik polecenia Get-WmiObject jest zapisywany w zmiennej o nazwie $volInfo. Pamiętaj, że w programie PowerShell wszystko jest obiektem; $volInfo jest teraz także obiektem wynikowym zwróconym przez Get-WmiObject.

$filter = "DeviceID = '" + $drive + ":'"
$volInfo = Get-WmiObject -Class Win32_LogicalDisk -Filter $filter

Teraz możesz uzyskać dostęp do wszystkich obiektów i metod skojarzonych z obiektem. Numer seryjny woluminu jest dostępny poprzez właściwość VolumeSerialNumber. Zwrócona informacja jest ciągiem 8 znaków. Zwykle jednak należy je sformatować jako cztery oddzielne liczby rozdzielone myślnikiem. można to zrobić podobnie jak w linijce poniżej. Myślnik na końcu pierwszego wiersza jest znakiem kontynuacji wiersza w programie PowerShell. W zasadzie informuje program PowerShell, że wiersz nie jest podzielony, ale zawiera następny wiersz. Pisząc kod, nie ma potrzeby rozdzielania wierszy, jednak aby zmniejszyć szerokość wiersza i ułatwić czytanie kodu, należy to zrobić.

$serial = $volInfo.VolumeSerialNumber.SubString(0, 4) + "-" + `
$volInfo.VolumeSerialNumber.SubString(4, 4)

Teraz, gdy masz obiekt $volInfo, możesz zapisać informacje z nagłówka DIR na ekranie. Jeśli dysk nie ma nazwy, tekst wyświetlany na ekranie będzie nieznacznie różnić się od tekstu wyświetlanego w przypadku, gdy dysk ma nazwę. Proste polecenie If-Else służy do sprawdzenia, czy właściwość VolumeName jest pustym ciągiem, czy nie. Polecenie Write-Host służy do zapisywania pojedynczych wierszy poleceń na ekranie.

If ($volInfo.VolumeName -eq "") { Write-Host (" Volume in drive " + $drive + " has no label") } Else { Write-Host (" Volume in drive " + $drive + " is " + $volInfo.VolumeName) } Write-Host (" Volume Serial Number is " + $serial) Write-Host ("`n Directory of " + $args[0] + "`n")

Znak „ `n ” na początku i na końcu polecenia Write-Host służy do wstawiania nowych wierszy przed i po tekście. Polecenie Write-Host dodaje nowy wiersz na końcu każdego wiersza. Efektem użycia polecenia „`n” jest utworzenie pustych linii przed i po linii tekstu.

Czy zauważyłeś „-eq” w poleceniu If? Jest to operator porównania równości. Poniższa tabela przedstawia wszystkie operatory porównania:

-równ., -ieq Porównaj według
-ne, -ine Porównanie nie jest równe
-gt, -igt Porównaj więcej niż
-ge, -ige Porównaj większe lub równe
-lt, -ilt Porównaj mniejsze niż
-le, -ile Porównaj mniejsze lub równe

Znak -i przed operatorami porównania oznacza, że ​​operator nie uwzględnia wielkości liter.

PowerShell i wszystko, co musisz wiedzieć o tym narzędziu
Rysunek 3: Dane wyjściowe skryptu, który aktualnie posiadasz

DIR.PS1: Lista plików/folderów

Teraz możesz wyświetlić zawartość i właściwości tego folderu. Pierwszą rzeczą, którą należy zrobić, jest wywołanie polecenia Get-ChildItem programu PowerShell w celu pobrania zestawu plików i przekazania ich do skryptu jako parametru. Polecenie Get-ChildItem pobiera kolekcję obiektów plików i folderów, nie tylko ich nazwy, ale również przekazuje te obiekty bezpośrednio do polecenia Sort-Object w celu ich posortowania. Domyślnie polecenie Sort-Object sortuje obiekty na podstawie właściwości Nazwa. Nie ma więc potrzeby opisywania żadnych innych parametrów. Posortowany zestaw obiektów zostanie następnie zapisany w zmiennej o nazwie $items.

$items = Get-ChildItem $args[0] | Sort-Object

Gdy już masz kolekcję obiektów plików i folderów, musisz je przejrzeć i wyświetlić odpowiednie funkcje. W tym celu używa się polecenia ForEach. Dla każdego pliku lub folderu wyświetlane będą następujące dane: data i godzina ostatniej aktualizacji, nazwa, długość lub rozmiar pliku. Dziwnie wyglądające ciągi znaków w nawiasach to kody formatu ciągów znaków .NET. Służą do wyrównywania pól do lewej i prawej oraz formatowania dat, godzin i liczb. Zrozumienie tych kodów formatu ciągu nie jest zbyt istotne, ponieważ nie są one niezbędne do działania tego skryptu.

Polecenie If służy do określania, czy obiekt jest katalogiem, czy nie. Jeśli pierwszym znakiem atrybutu Mode jest „d”, obiekt jest katalogiem. Musisz to sprawdzić dokładnie, ponieważ kod napisany dla katalogów często różni się od kodu napisanego dla plików.

Zwróć uwagę na wiersz $totalDirs++ wewnątrz instrukcji If. Jest to licznik odpowiedzialny za śledzenie liczby folderów. Podobnie istnieje zmienna $totalFiles, która służy do śledzenia całkowitego rozmiaru wszystkich plików. Wartości te są zawsze obliczane w trakcie wykonywania programu. Są one jednak wyświetlane dopiero po zakończeniu procesu wyświetlania listy plików.

ForEach ($i In $items)
{
$date = "{0, -20:MM/dd/yyyy hh:mm tt}" -f $i.LastWriteTime
$file = $i.Name
If ($i.Mode.SubString(0, 1) -eq "d")
{
$totalDirs++
$list = $date + " {0, -15}" -f "
" + " " + $file
}
Else
{
$totalFiles++
$size = "{0, 18:N0}" -f $i.Length
$list = $date + $size + " " + $file
}
$totalSize += $i.Length
Write-Host $list
}

PowerShell i wszystko, co musisz wiedzieć o tym narzędziu
Rysunek 4: Wyświetla dane wyjściowe zaktualizowanego skryptu.

DIR.PS1: Stopka

Pozostaje już tylko wyświetlenie na ekranie łącznej liczby plików, folderów, całkowitego rozmiaru wszystkich plików i ilości wolnego miejsca na danej partycji dysku. Aby to zrobić, będziesz musiał użyć zmiennych licznika ($totalFiles, $totalDirs, $totalSize) utworzonych w poprzedniej sekcji. Ilość wolnego miejsca możesz sprawdzić w zmiennej $volInfo utworzonej na początku skryptu.

Write-Host ("{0, 16:N0}" -f $totalFiles + " File(s)" + `
"{0, 15:N0}" -f $totalSize + " bytes")
Write-Host ("{0, 16:N0}" -f $totalDirs + " Dir(s)" + `
"{0, 16:N0}" -f $volInfo.FreeSpace + " bytes free`n")

PowerShell i wszystko, co musisz wiedzieć o tym narzędziu
Rysunek 5: Wyświetla kompletne dane wyjściowe skryptu.

Prognozy i ulepszenia mogą być

Mimo że utworzony skrypt generuje niemal identyczne dane wyjściowe, jak polecenie CMD.EXE DIR, należy pamiętać o pewnych zastrzeżeniach i wprowadzić pewne udoskonalenia.

  • Ten skrypt nie wykonuje żadnego sprawdzania błędów.
  • Jeśli do skryptu nie zostanie przekazana prawidłowa ścieżka, skrypt zakończy się niepowodzeniem i wyświetli komunikat o błędzie programu PowerShell.
  • Całkowita liczba katalogów podana w skrypcie jest o 2 mniejsza od wyniku polecenia CMD.EXE DIR, ponieważ polecenie Get-ChildItem nie zlicza dwóch „.” i „..” jak w CMD.EXE.
  • Twój skrypt sortuje tylko według nazwy pliku i nazwy folderu i nie oferuje żadnego innego sortowania według atrybutów.
  • Twój skrypt nie jest w stanie wyświetlić zawartości folderu i wszystkich podfolderów.

Jak PowerShell pomaga zautomatyzować dowolne czynności na komputerze

Napisz proste skrypty PowerShell

Za pomocą programu PowerShell można zautomatyzować niemal wszystko, na przykład masową zmianę nazw plików w celu zachowania spójności lub automatyczne uruchamianie aplikacji. Napiszmy kilka prostych skryptów programu Windows PowerShell, aby zobaczyć, jak to działa.

Uwaga : Jeśli podczas wykonywania skryptu wystąpi błąd dotyczący zasad wykonywania, może być konieczne tymczasowe zezwolenie na wykonanie skryptu poprzez uruchomienie polecenia „Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass”

Zmiana nazw plików w folderze wsadowym

Za pomocą programu PowerShell możesz kopiować, przenosić i usuwać pliki na swoim komputerze. Można również zmieniać nazwy plików określonego typu masowo. Na przykład, oto jak możesz zmienić nazwy wielu plików tekstowych, zastępując prefiks „oldco” prefiksem „newco” w ich nazwach:

Get-ChildItem -Path "C:\CompanyFiles" -Filter "*.txt" | Rename-Item -NewName {$_.Name -replace "oldco","newco"}

W powyższym skrypcie „.txt” jest filtrem rozszerzenia pliku. Można go zmodyfikować i ustawić na .jpg, .docx itd., aby wyszukiwać różne typy plików.

Automatyczne uruchamianie aplikacji

Jeśli codziennie otwierasz ten sam zestaw aplikacji, możesz napisać skrypt programu PowerShell, aby uruchamiać je jednym kliknięciem:

#Open multiple apps with a single click
Start-Process "notepad.exe"
Start-Process "calc.exe"
Start-Process "Chrome.exe"
Start-Process "slack.exe"

Wklej skrypt do pliku Notatnika i zapisz go jako LaunchFavoriteApps.ps1. Następnie wystarczy dwukrotnie kliknąć plik, aby uruchomić wszystkie aplikacje wymienione w skrypcie.

Skopiuj ważne pliki do lokalizacji kopii zapasowej

Możesz okresowo tworzyć kopie zapasowe ważnych plików w lokalizacji kopii zapasowej, korzystając z poniższego skryptu. Pamiętaj o zmianie ścieżek źródłowej i docelowej zgodnie z potrzebami:

#Copy MyFiles folder contents to MyFilesBackup in D:\
Copy-Item -Path "C:\Documents\MyFiles" -Destination "D:\MyFilesBackup" -Recurse

Napisz skrypt programu PowerShell, aby automatycznie organizować pliki każdego dnia

Ze względu na mnogość typów plików pobieranych każdego dnia, folder Pobrane może szybko zaśmiecić się wszelkiego rodzaju plikami porozrzucanymi po całym folderze. Aby rozwiązać ten problem, możemy napisać skrypt programu PowerShell, który pod koniec każdego dnia będzie sortował pobrane pliki do folderów według typu pliku.

Otwórz nowy plik Notatnika i wklej poniższy skrypt. Pamiętaj o zmianie ścieżki folderu źródłowego w skrypcie na ścieżkę folderu Pobrane:

# Change the source folder path below
$sourcePath = "E:\Downloads"
# Add file mapping folder names; the Others folder includes all the files that do not match file types in the other categories
$fileTypes = @{
"Documents" = @("*.docx", "*.pdf", "*.txt")
"Images" = @("*.jpg", "*.png", "*.gif")
"Media" = @("*.mp4", "*.mp3", "*.mov")
"Zip" = @("*.zip", "*.rar")
"ISO" = @("*.iso")
"Others" = @("*")
}
# Iterate through each folder type and prepare a destination folder for organizing files
foreach ($folder in $fileTypes.Keys) {
# Create the destination folder path
$destPath = Join-Path -Path $sourcePath -ChildPath $folder
# Check if the destination folder exists, and create it if it doesn't
if (!(Test-Path -Path $destPath)) {
New-Item -ItemType Directory -Path $destPath | Out-Null
}
# Move matching files from the source folder to the destination folder based on file type patterns
foreach ($pattern in $fileTypes[$folder]) {
Get-ChildItem -Path $sourcePath -Filter $pattern -File -ErrorAction SilentlyContinue | ForEach-Object {
try {
Move-Item -Path $_.FullName -Destination $destPath -Force -ErrorAction Stop
Write-Output "Moved: $($_.FullName) to $destPath"
} catch {
Write-Warning "Failed to move file: $($_.FullName). Error: $_"
}
}
}
}
Write-Output "Files organized successfully!"

Aby zapisać plik, kliknij Plik > Zapisz jako i wpisz OrganizeDownloadsFolder.ps1 jako nazwę pliku. Następnie kliknij Zapisz jako typ i wybierz Wszystkie pliki . Kliknij dwukrotnie plik OrganizeDownloadsFolder.ps1 , aby uruchomić skrypt.

Planowanie i wykonywanie zadań

Oczywiście, pisanie skryptów jest częścią procesu automatyzacji. Druga część polega na sprawdzeniu, czy skrypt można uruchomić automatycznie, aby wykonać zadanie. Aby to zrobić, możemy utworzyć zadania zaplanowane, które będą uruchamiać skrypt codziennie lub w razie potrzeby.

Otwórz program PowerShell, skopiuj i wklej poniższy skrypt i naciśnij Enter . Pamiętaj o zastąpieniu „J:\OrganizeDownloadsFolder.ps1” pełną ścieżką do skryptu OrganizeDownloadsFolder.ps1 .

$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File 'J:\OrganizeDownloadsFolder.ps1'"
$trigger = New-ScheduledTaskTrigger -Daily -At "5:00 PM"
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "OrganizeDownloadsFolderDaily"

Po zakończeniu naciśnij Enter . Skrypt utworzy zaplanowane zadanie w Harmonogramie zadań, aby uruchamiać skrypt organizacji plików codziennie o godzinie 17:00. Jeśli wolisz inny czas, możesz go zmodyfikować w skrypcie powyżej.

Ponadto za pomocą programu PowerShell można automatyzować inne codzienne zadania, np. skrypt monitorujący miejsce, który powiadamia o braku wolnego miejsca na dysku głównym, zabezpieczać hasłem partie dokumentów PDF, a nawet stosować animowane tapety z folderu ze zdjęciami.

Mimo że PowerShell to zaawansowany język skryptowy i narzędzie, jego opanowanie i używanie nie zajmuje dużo czasu, zwłaszcza jeśli nie znasz środowiska .NET Framework. Mam nadzieję, że ten artykuł wraz z przykładowym skryptem okaże się przydatny dla każdego, kto chce zrozumieć program PowerShell. Ale skrypt stworzony w tym przykładzie jest całkiem prosty. Wierzymy, że można je rozbudować i rozwinąć w sposób bardziej kompleksowy, aby lepiej służyły bardziej złożonym zastosowaniom.

Sign up and earn $1000 a day ⋙

Leave a Comment

Typowe błędy w ubiorze, które mężczyźni często ignorują

Typowe błędy w ubiorze, które mężczyźni często ignorują

Mężczyźni również muszą dobrze się ubierać, ponieważ ma to istotny wpływ nie tylko na pracę, ale i na życie osobiste. Oto najczęstsze błędy w ubiorze.

Jak dodać Copilot do Microsoft Office 365

Jak dodać Copilot do Microsoft Office 365

Copilot Pro integruje Copilot AI bezpośrednio z aplikacjami pakietu Microsoft 365, takimi jak Word, PowerPoint, Excel, OneNote i Outlook.

Jak stworzyć autoportret za pomocą Midjourney

Jak stworzyć autoportret za pomocą Midjourney

Generatory grafiki oparte na sztucznej inteligencji, takie jak Midjourney, potrafią odmienić Twoje obrazy, nadając im inny styl, tło, kolor i nastrój. Skorzystaj z tego samouczka, aby stworzyć kilka pomysłowych autoportretów widzianych oczami sztucznej inteligencji.

Oczekuje się gwałtownego wzrostu cen układów scalonych 2 nm

Oczekuje się gwałtownego wzrostu cen układów scalonych 2 nm

Według doniesień TSMC zaczęło przyjmować zamówienia na 2-nanometrowe wafle już na początku tego miesiąca. Szacuje się, że cena za jedną wafel wyniesie do 30 tys. dolarów.

OpenAI ma zamiar przejąć Windsurf – jeden z najpotężniejszych na świecie edytorów kodu AI

OpenAI ma zamiar przejąć Windsurf – jeden z najpotężniejszych na świecie edytorów kodu AI

OpenAI prowadzi rozmowy w sprawie przejęcia Windsurf, wiodącego w branży edytora kodu opartego na sztucznej inteligencji.

5 trendów w smartfonach, które należy wyeliminować

5 trendów w smartfonach, które należy wyeliminować

Niezależnie od tego, czy chodzi o niepraktyczne wybory projektowe, czy też funkcje, o które nikt tak naprawdę nie prosił, niektóre z tych trendów muszą zniknąć na zawsze.

Jak ukryć informacje kontaktowe na Instagramie

Jak ukryć informacje kontaktowe na Instagramie

Domyślnie Twoje dane kontaktowe pojawiają się na Twoim profilu na Instagramie. Będzie to miało wpływ na prywatność. Poniższy artykuł pokaże Ci, jak ukryć dane kontaktowe na Instagramie.

Jak zdalnie wylogować się z konta Telegram

Jak zdalnie wylogować się z konta Telegram

Aplikacja Telegram zapisze wszystkie urządzenia, na których zalogowano się do konta, na liście, którą będziemy mogli śledzić. Na podstawie tej listy możemy sprawdzić, czy nie doszło do nieautoryzowanych logowań.

Najnowszy kod Legendary World z 25.04.2025 i jak wykorzystać kod na nagrody

Najnowszy kod Legendary World z 25.04.2025 i jak wykorzystać kod na nagrody

W Legendary World gracze otrzymują serię diamentów, skrzyń ze skarbami i fragmentów postaci wysokiego poziomu za pośrednictwem kodu podarunkowego

Czym jest Google Store? Co znajdziesz w Google Store?

Czym jest Google Store? Co znajdziesz w Google Store?

Sklep Google ma ciekawą historię.

Jak usunąć adware z komputera

Jak usunąć adware z komputera

Kwestie bezpieczeństwa i prywatności należy zawsze traktować poważnie. W końcu są one ściśle związane z Twoim życiem, więc zachowaj szczególną czujność, jeśli chodzi o złośliwe oprogramowanie i inne zagrożenia.

Jak naprawić błąd IPv4/IPv6 Brak dostępu do Internetu w systemie Windows

Jak naprawić błąd IPv4/IPv6 Brak dostępu do Internetu w systemie Windows

W tym przewodniku Quantrimang.com przedstawi kilka kroków rozwiązywania problemów, które pomogą Ci rozwiązać błąd braku dostępu do Internetu w protokole IPv4/IPv6 i przywrócić połączenie internetowe.

Nvidia spodziewa się, że złącza zasilania RTX 5090/5080 nie stopią się dzięki nowej technologii wtyczek PCIe

Nvidia spodziewa się, że złącza zasilania RTX 5090/5080 nie stopią się dzięki nowej technologii wtyczek PCIe

Z pewnością wiele osób wciąż nie zapomniało skandalu związanego z „eksplozją” kart graficznych Nvidia RTX serii 40.

Dlaczego użytkownicy są rozczarowani linią produktów Galaxy S25 firmy Samsung

Dlaczego użytkownicy są rozczarowani linią produktów Galaxy S25 firmy Samsung

Wiele osób z niecierpliwością czekało na to, co Samsung zaproponuje w serii Galaxy S25, ale po zobaczeniu wszystkiego, co firma ma do zaoferowania, nie mogli oprzeć się poczuciu rozczarowania. Tegoroczna aktualizacja nie wprowadza zbyt wielu zmian.

Naukowcy obserwują niezwykle rzadkie zjawisko pochłonięcia planety przez gwiazdę.

Naukowcy obserwują niezwykle rzadkie zjawisko pochłonięcia planety przez gwiazdę.

Tego typu zjawisko zdarza się niezwykle rzadko, ale zespół ma nadzieję, że dzięki uruchomieniu JWST i innych zaawansowanych obserwatoriów uda się je zaobserwować częściej.