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 pracy/instalacja
- Instalacja PowerShell
- Zainstaluj bibliotekę Community Extensions
- Pozbądź się komunikatu „wykonywanie skryptów jest wyłączone”
- Ustaw swoją „scripts:” Lokalizacja dysku PowerShell
- Konfiguruj wiersz poleceń
- Różne zadania
- Zapisz na ekranie
- Pytaj użytkownika o dane wejściowe
- Manipuluj datami
- Wyślij e-mail
- Sleep
- Wymień katalog (rekursywnie)
- Testuj, czy plik istnieje
- Wczytaj linie pliku do tablicy
- Zapisz do pliku
- Zmień nazwę pliku
- Usuń plik
- Praca z wyrażeniami regularnymi
- Dzielenie i łączenie łańcuchów
- Chwyć stronę WWW
- Odczyt i zapis w rejestrze
- Zrozumieć cudzysłowy
- Time a command
- Tekst na mowę
- Dostęp do schowka systemu Windows
- Wczytaj zespół .NET
- Wykonaj kod utworzony w czasie wykonywania
- Wykonaj program ze spacją w jego ścieżce
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-Assembly
z 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
.