PowerShell Cookbook

To jest lista rzeczy, które ja i moi koledzy uznaliśmy za przydatne w naszej pracy. Nie ma to być encyklopedia, ale raczej miejsce do zapisywania rzeczy, które początkujący mógłby uznać za przydatne, zwłaszcza rzeczy, których rozgryzienie może zająć dużo czasu.

Ta strona została założona zanim O’Reilly opublikował Windows PowerShell Cookbook autorstwa Lee Holmesa. Polecam książkę O’Reilly’ego, ale ta strona nie jest z nią związana.

Zobacz także PowerShell gotchas.

Outline

  • Rozpoczęcie/instalacja
    • Instalacja PowerShell
    • Instalacja biblioteki Community Extensions
    • Pozbądź się komunikatu „wykonywanie skryptów jest wyłączone”
    • Ustawienie „scripts:” Lokalizacja dysku PowerShell
    • Konfiguruj swój wiersz poleceń
  • Różne zadania
    • Zapisuj na ekran
    • Pytaj użytkownika o dane wejściowe
    • .

    • Manipuluj datami
    • Wyślij e-mail
    • Uśpij
    • Wylistuj katalog (rekursywnie)
    • Sprawdź, czy plik istnieje
    • Wczytaj linie pliku do tablicy tablicę
    • Zapis do pliku
    • Nazwa pliku
    • Usuwanie pliku
    • Praca z wyrażeniami regularnymi
    • Rozdzielanie i łączenie łańcuchów
    • Pobieranie strony internetowej strona
    • Odczyt i zapis do rejestru
    • Zrozumienie cudzysłowów
    • Czas polecenia
    • Text to speech
    • Dostęp do schowka Windows
    • Wczytaj zespół .NET assembly
    • Wykonaj kod utworzony w czasie uruchamiania
    • Wykonaj program ze spacją w ścieżce

Rozpoczęcie pracy/instalacja

Instalacja PowerShell

Możesz uzyskać PowerShell z:
https://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx

top

Zainstaluj bibliotekę Community Extensions

Biblioteka PowerShell Community Extensions (PSCX) jest dostępna tutaj:
https://www.codeplex.com/Wiki/View.aspx?ProjectName=PowerShellCX

Jest to przydatny zbiór cmdletów i funkcji. Instaluje menu kontekstowe „PowerShell Here” w WindowsExplorer, które otwiera okno poleceń PowerShell w folderze, na którym kliknięto prawym przyciskiem myszy. Ponadto PSCX dostarcza przykładowy plik Profile.ps1.

Po zainstalowaniu PSCX wpisz man about_pscx, aby zobaczyć przegląd cmdletów, dostawców itp. dostarczanych z PSCX.

top

Pozbądź się komunikatu „wykonywanie skryptów jest wyłączone”

Pierwszym problemem, jaki prawdopodobnie napotkasz podczas uruchamiania skryptów PowerShell, jest coś takiego:

PSH> .\myScript.ps1File D:\myScript.ps1 cannot be loaded. The fileD:\myScript.ps1 is not digitally signed. The script will not execute on thesystem. Please see "get-help about_signing" for more details..
At line:1 char:13 + .\myScript.ps1 <<<<

Wynika to z domyślnego ustawienia zabezpieczeń w PowerShell, które zabrania uruchamiania złośliwych skryptów.

Możesz zmienić to zachowanie, wykonując następujące czynności:

PSH> set-executionPolicy RemoteSigned

Teraz tylko skrypty pochodzące ze zdalnych źródeł będą wymagały podpisu cyfrowego.

top

Ustaw swoją „scripts:” Lokalizacja dysku PowerShell

Gdy już napiszesz kilka skryptów PowerShell, może się okazać, że warto zebrać je w jednym miejscu i utworzyć PSDrive o nazwie scripts:, aby szybko je znaleźć. Możesz dodać poniższe do swojego profilu PSCX, aby utworzyć taki PSDrive.

New-PSdrive -name scripts -PSprovider filesystem -root C:\bin\PowerShellScripts

top

Konfiguruj wiersz poleceń

Aby skonfigurować wiersz poleceń, po prostu utwórz funkcję o nazwie prompt i umieść ją w swoim profilu. Na przykład poniższe polecenie spowoduje wyświetlenie katalogu roboczego.

function prompt { "$pwd> " }

Zauważ, że możesz umieścić dowolny kod wewnątrz funkcji prompt, a kod ten będzie uruchamiany za każdym razem, gdy naciśniesz klawisz return.

top

Różne zadania

Zapisz na ekranie

Użyj Write-Host, aby zapisać dane wyjściowe. Opcjonalnie można określić -foregroundcolor, aby pokolorować dane wyjściowe. Na przykład błędy i ostrzeżenia mogą być podświetlone na czerwono.

Przykład:

Write-Host "Hello world" -foregroundcolor red

top

Pytaj użytkownika o dane wejściowe

Użyj Read-Host.

Przykład:

$a = Read-Host "Enter your name"Write-Host "Hello" $a

top

Manipuluj datami

Ccmdlet get-date zwraca obiekt DateTime. Bez argumentu, zwraca bieżący czas i datę. Z argumentem łańcuchowym, bez potrzeby cytowania, parsuje łańcuch na datę.

Przykład: Znajdź liczbę dni i godzin od dwusetnej rocznicy powstania USA.

(get-date) - (get-date 7/4/1976)

Można również rzutować ciągi znaków na obiekt DateTime za pomocą rzutowania .

top

Wyślij e-mail

Użyj cmdleta Send-SmtpMail z PowerShell Community Extensions.

Przykład:

Send-SmtpMail -SmtpHost wotan.mdacc.tmc.edu -from [email protected] -to [email protected] -body "hello world"

top

Sleep

Użyj cmdleta Start-Sleep. Domyślnie zajmuje sekundy, ale ma opcję -milliseconds.

Przykład:

Write-Host "hello"; Start-Sleep 5; Write-Host "world"

top

Wymień katalog (rekursywnie)

Możesz użyć polecenia dir, które tak naprawdę jest aliasem do Get-ChildItem. Aby wylistować katalog rekursywnie, wystarczy dodać opcję -recurse.

Przykład:

dir f:\bin -recurse

top

Testuj, czy plik istnieje

Użyj polecenia test-path.

top

Wczytaj linie pliku do tablicy

Użyj get-content.

Przykład:

$a = (get-content foo.txt)

top

Zapisz do pliku

Użyj Out-File. Jeśli nie chcesz wyjścia Unicode, określ -encoding ASCII

Przykład:

$foo | out-file -encoding ASCII foo.txt

top

Zmień nazwę pliku

Użyj Rename-Item lub jego aliasu ren.

top

Usuń plik

Użyj Delete-Item lub jego aliasu del.

top

Praca z wyrażeniami regularnymi

Patrz Wyrażenia regularne w PowerShell i Perlu.

top

Dzielenie i łączenie łańcuchów

Stringi mają metodę split. Argumentem do split() jest łańcuch zawierający znaki, na które ma zostać podzielony. Funkcja ::split jest bardziej ogólna. Jej pierwszym argumentem jest łańcuch do podziału, a drugim wyrażenie regularne, na którym ma zostać dokonany podział.

Przykład:

$a.split("`t ")

rozbije łańcuch $a na tablicę łańcuchów, dzieląc go wszędzie tam, gdzie występuje tabulator lub spacja.

Przykład:

$a = "123,456,apple"; ::split($a, ",(?!\d)")

rozbije $a na przecinkach, po których nie występują cyfry. Tak więc podział zwróciłby „123,456” i „apple”.

Jeśli dzielony łańcuch jest ścieżką Windows, możesz chcieć użyć wyspecjalizowanego polecenia Split-Path.

Aby połączyć tablicę w pojedynczy łańcuch, użyj metody ::join. Pierwszym argumentem jest znak rozdzielający, a drugim tablica.

Przykład:

$a = 1, 2, 3;#note: this is an array, not a string$b = ::join("*", $a)

Teraz $b zawiera „1*2*3”.

top

Chwyć stronę WWW

Użyj albo Get-Url z PSCX, albo obiektu net.webclient z .NET. Pierwszy sposób jest bardziej zwięzły, ale drugi pozwala na więcej opcji.

Przykład:

$w = Get-Url "https://www.w3.org"

$w = (new-object net.webclient).DownloadString("https://www.w3.org")

Kod (new-object net.webclient) tworzy obiekt .NET WebClient z wieloma użytecznymi metodami. Na przykład można wywołać DownladFile, aby zapisać bezpośrednio na dysk, a nie do łańcucha. Istnieją również metody UploadData i UploadFile.

top

Odczyt i zapis w rejestrze

Po rejestrze można poruszać się tak samo jak po systemie plików, choć trzeba znać pewne szczegóły.

Każdy ul rejestru jest jak dysk. Na przykład, aby poznać HKEY_CURRENT_USER, możesz cd HKCU:, a następnie użyć cd, aby przejść w dół drzewa. Użyj Get-ItemProperty do odczytu i Set-ItemProperty do zapisu. Możesz również użyć Remove-ItemProperty do usuwania.

Przykład:

Poniższe polecenia wyświetlą zawartość węzła rejestru, który konfiguruje powłokę cmd.exe. Ustawiając CompletionChar na 9, włączamy uzupełnianie tabulatorów.

cd HKCU:\Software\Microsoft\Command ProcessorGet-ItemProperty .Set-ItemProperty . -name CompletionChar -Value 9

Ten artykuł TechNet zawiera więcej szczegółów.

top

Zrozumieć cudzysłowy

PowerShell ma cztery rodzaje cudzysłowów: pojedyncze i podwójne zwykłe cudzysłowy oraz pojedyncze i podwójne here-strings. Wewnątrz podwójnych cudzysłowów i podwójnych łańcuchów tutaj nazwy zmiennych są zastępowane ich wartościami, a sekwencje specjalne PowerShella są interpretowane. W pojedynczych cudzysłowach i pojedynczych łańcuchach, nazwy zmiennych nie są interpretowane, a sekwencje specjalne nie są interpretowane. Na przykład, fragment kodu

 $a = "bar" 'foo`t$a', "foo`t$a"

wyprodukuje wyjście

 foo`t$a foo bar

ponieważ wewnątrz podwójnego cudzysłowu, `t jest interpretowane jako tabulator, a $a jako „bar”.

PowerShell here-strings są jak here-documents w Perlu. Wewnątrz łańcuchów here-string, podwójne i pojedyncze cudzysłowy nie są specjalne, lecz cytowane dosłownie. Zachowywane są również podziały na linie.

Podłańcuch here-string zaczyna się od @" lub @' i kończy tymi samymi symbolami w odwrotnej kolejności. Musi być nowa linia po znaczniku otwierającym i przed znacznikiem zamykającym.

Przykład

 $a = "bar" $b = @" foo "baz" 'qux' $a "@ $b

produkuje

 foo "baz" 'qux' bar

i

 $a = "bar" $b = @' foo "baz" 'qux' $a '@ $b

produkuje

 foo "baz" 'qux' $a

Zauważ, że nie może być białej spacji po cytacie otwierającym here-string. W przeciwnym razie otrzymasz komunikat „Nierozpoznany token w tekście źródłowym.”

Mimo, że wyglądają podobnie, ciągi here-strings PowerShella i verbatim strings C# są dość różne. Poniższa tabela podsumowuje te różnice.

.

C# verbatim strings PowerShell here-strings
Może zawierać podziały na linie Musi zawierać podziały na linie
Tylko odmiana z podwójnym cudzysłowem Odmiana z pojedynczym i podwójnym cudzysłowem
Begins with @” Begins with @” (or @’) plus a line break
Ends with „ Ends with a line break followed by „@ (or '@)
Cannot contain un-escaped double quotes May contain quotes
Turns off C# escape sequences ’@ turns off PowerShell escape sequences but „@ does not

top

Time a command

Use Measure-Command to time how long a task takes to complete.

top

Tekst na mowę

Użyj Out-Speech z PSCX.

top

Dostęp do schowka systemu Windows

Użyj poleceń cmdlet PSCX Get-Clipboard i Out-Clipboard do odczytu ze schowka i zapisu do schowka.

top

Wczytaj zespół .NET

Możesz wywołać LoadWithPartialName. Na przykład, aby załadować zespół dla Team Foundation Server API, wykonałbyś

::LoadWithPartialName("Microsoft.TeamFoundation.Client")

Patrz także Resolve-Assemblyz PSCX.

top

Wykonaj kod utworzony w czasie wykonywania

Polecenie Invoke-Expression jest analogiczne do eval w Perlu lub JavaScript. Invoke-Expression $str wykonuje kod zawarty w łańcuchu $str.

top

Wykonaj program ze spacją w jego ścieżce

Obejmij ścieżkę cudzysłowem i wstaw przed nią znak ampersand. Na przykład,

& "C:\Program Files\WinEdt Team\WinEdt\WinEdt.exe"

uruchomi program wykonywalny WinEdt.exe, który ma dwie spacje w pełnej ścieżce.

Zauważ, że nie możesz pominąć cudzysłowu. W przeciwieństwie do cmd.exe, PowerShell nie zakłada, że wszystkie łańcuchy są poleceniami. Bez ampersanda, cytowana ścieżka jest po prostu łańcuchem.

top

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.