Firma Microsoft sprawi, że instalacja nowego programu Outlook w systemie Windows 10 będzie obowiązkowa
Microsoft ma obecnie trudności z przekonywaniem użytkowników do nowych produktów i usług.
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
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.
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.
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.
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.
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.
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.
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.
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:
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”:
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:
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 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:
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
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.
Po utworzeniu pliku PS1 możesz go użyć w programie PowerShell, uruchamiając polecenie ./ScriptName.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.
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.
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.
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.
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
}
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")
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.
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
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.
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.
Microsoft ma obecnie trudności z przekonywaniem użytkowników do nowych produktów i usług.
Wszyscy mamy powtarzalne zadania, które chcemy zautomatyzować na naszych komputerach. Na szczęście istnieje wiele aplikacji innych firm dla systemu Windows, które mogą wziąć na siebie winę i pomóc Ci wykorzystać czas bardziej efektywnie.
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.
Copilot Pro integruje Copilot AI bezpośrednio z aplikacjami pakietu Microsoft 365, takimi jak Word, PowerPoint, Excel, OneNote i Outlook.
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.
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 prowadzi rozmowy w sprawie przejęcia Windsurf, wiodącego w branży edytora kodu opartego na sztucznej inteligencji.
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.
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.
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ń.
W Legendary World gracze otrzymują serię diamentów, skrzyń ze skarbami i fragmentów postaci wysokiego poziomu za pośrednictwem kodu podarunkowego
Sklep Google ma ciekawą historię.
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.
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.
Z pewnością wiele osób wciąż nie zapomniało skandalu związanego z „eksplozją” kart graficznych Nvidia RTX serii 40.
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.
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.