Szukaj…


Uwagi

Windows PowerShell jest powłoką i komponentem skryptowym Windows Management Framework, frameworka automatyzacji / zarządzania konfiguracją firmy Microsoft zbudowanego na .NET Framework. PowerShell jest instalowany domyślnie we wszystkich obsługiwanych wersjach systemów operacyjnych klienta i serwera Windows od Windows 7 / Windows Server 2008 R2. Program PowerShell można zaktualizować w dowolnym momencie, pobierając późniejszą wersję systemu Windows Management Framework (WMF). Wersja „Alpha” programu PowerShell 6 jest wieloplatformowa (Windows, Linux i OS X) i należy ją pobrać i zainstalować z tej strony wydania .

Dodatkowe zasoby:

Wersje

Wersja Zawarte w systemie Windows Notatki Data wydania
1.0 XP / Server 2008 01.11.2006
2.0 7 / Server 2008 R2 01.11.2009
3.0 8 / Server 2012 01.08.2012
4.0 8.1 / Server 2012 R2 01.11.2013
5.0 10 / Server 2016 Przegląd technologii 16.12.2015
5.1 10 edycja rocznicowa / Server 2016 27.01.2017

Instalacja lub konfiguracja

Windows

PowerShell wchodzi w skład Windows Management Framework. Instalacja i konfiguracja nie są wymagane w nowoczesnych wersjach systemu Windows.

Aktualizacji programu PowerShell można dokonać, instalując nowszą wersję systemu Windows Management Framework.

Inne platformy

Wersję „Beta” programu PowerShell 6 można zainstalować na innych platformach. Pakiety instalacyjne są dostępne tutaj .

Na przykład PowerShell 6 dla Ubuntu 16.04 jest publikowany w repozytoriach pakietów w celu łatwej instalacji (i aktualizacji).

Aby zainstalować, uruchom następujące czynności:

# Import the public repository GPG keys
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -

# Register the Microsoft Ubuntu repository
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/microsoft.list

# Update apt-get
sudo apt-get update

# Install PowerShell
sudo apt-get install -y powershell

# Start PowerShell
powershell

Po zarejestrowaniu repozytorium Microsoft raz jako superużytkownik, odtąd wystarczy użyć sudo apt-get upgrade powershell aby go zaktualizować. Następnie uruchom powershell

Pozwól, aby skrypty przechowywane na twoim komputerze działały bez podpisu

Ze względów bezpieczeństwa program PowerShell jest domyślnie skonfigurowany tak, aby zezwalał tylko na wykonywanie podpisanych skryptów. Wykonanie następującego polecenia pozwoli ci na uruchamianie niepodpisanych skryptów (aby to zrobić, musisz uruchomić PowerShell jako Administrator).

Set-ExecutionPolicy RemoteSigned

Innym sposobem uruchamiania skryptów PowerShell jest użycie Bypass jako ExecutionPolicy :

powershell.exe -ExecutionPolicy Bypass -File "c:\MyScript.ps1"

Lub z poziomu istniejącej konsoli PowerShell lub sesji ISE, uruchamiając:

 Set-ExecutionPolicy Bypass Process

Tymczasowe obejście dla zasady wykonania można również uzyskać, uruchamiając plik wykonywalny programu PowerShell i przekazując dowolną prawidłową -ExecutionPolicy jako parametr -ExecutionPolicy . Zasada obowiązuje tylko w trakcie trwania procesu, więc nie jest potrzebny dostęp administracyjny do rejestru.

C:\>powershell -ExecutionPolicy RemoteSigned

Dostępnych jest wiele innych zasad, a witryny internetowe często zachęcają do korzystania z Set-ExecutionPolicy Unrestricted . Ta zasada pozostaje na miejscu, dopóki nie zostanie zmieniona, i obniża poziom bezpieczeństwa systemu. To nie jest wskazane. RemoteSigned jest użycie RemoteSigned ponieważ umożliwia lokalnie zapisany i zapisany kod i wymaga podpisania kodu pozyskanego zdalnie za pomocą certyfikatu z zaufanego katalogu głównego.

Należy również pamiętać, że zasady wykonywania mogą być egzekwowane przez zasady grupy, dlatego nawet jeśli zasady zostaną zmienione na Unrestricted dla całego systemu, zasady grupy mogą przywrócić to ustawienie w następnym okresie egzekwowania (zwykle 15 minut). Możesz zobaczyć zasady wykonywania ustawione w różnych zakresach za pomocą Get-ExecutionPolicy -List

Dokumentacja TechNet:
Set-ExecutionPolicy
about_Execution_Policies

Aliasy i podobne funkcje

W PowerShell istnieje wiele sposobów na osiągnięcie tego samego rezultatu. Można to dobrze zilustrować prostym i znanym przykładem Hello World :

Za pomocą Write-Host :

Write-Host "Hello World"  

Za pomocą Write-Output :

Write-Output 'Hello world'

Warto zauważyć, że chociaż Write-Output i Write-Host oba piszą na ekranie, istnieje subtelna różnica. Write-Host zapisuje tylko na standardowym wyjściu (tj. Na ekranie konsoli), podczas gdy Write-Output zapisuje zarówno na standardowym wyjściu ORAZ w strumieniu wyjściowym [sukces] pozwalającym na przekierowanie . Przekierowanie (i ogólnie strumienie) pozwala, aby dane wyjściowe jednego polecenia były kierowane jako dane wejściowe do drugiego, w tym przypisanie do zmiennej.

> $message = Write-Output "Hello World"
> $message
"Hello World"

Te podobne funkcje nie są aliasami, ale mogą dawać takie same wyniki, jeśli chce się uniknąć „zanieczyszczenia” strumienia sukcesu.

Write-Output jest aliasowane do Echo lub Write

Echo 'Hello world'
Write 'Hello world'

Lub po prostu wpisując „Hello world”!

'Hello world'

Wszystko to spowoduje oczekiwane wyjście konsoli

Hello world

Innym przykładem aliasów w programie PowerShell jest wspólne mapowanie zarówno starszych poleceń wiersza polecenia, jak i poleceń BASH na polecenia cmdlet programu PowerShell. Wszystkie z poniższych tworzą listę katalogów bieżącego katalogu.

C:\Windows> dir
C:\Windows> ls
C:\Windows> Get-ChildItem

Wreszcie możesz utworzyć własny alias za pomocą polecenia cmdlet Set-Alias! Jako przykład przyjmijmy alisas Test-NetConnection , który jest zasadniczo PowerShell równoważny z poleceniem ping wiersza poleceń, na „ping”.

Set-Alias -Name ping -Value Test-NetConnection

Teraz możesz używać ping zamiast Test-NetConnection ! Pamiętaj, że jeśli alias jest już używany, nadpisujesz powiązanie.

Alias będzie żył, dopóki sesja nie będzie aktywna. Gdy zamkniesz sesję i spróbujesz uruchomić alias utworzony podczas ostatniej sesji, nie zadziała. Aby rozwiązać ten problem, możesz zaimportować wszystkie swoje aliasy z programu Excel do sesji raz przed rozpoczęciem pracy.

Rurociąg - użycie danych wyjściowych z polecenia cmdlet programu PowerShell

Jednym z pierwszych pytań, które ludzie mają, kiedy zaczynają używać programu PowerShell do pisania skryptów, jest sposób manipulowania danymi wyjściowymi z polecenia cmdlet w celu wykonania innej akcji.

Symbol rurociągu | jest używany na końcu polecenia cmdlet, aby pobrać eksportowane dane i podać je do następnego polecenia cmdlet. Prostym przykładem jest użycie Select-Object do wyświetlenia tylko właściwości Name pliku pokazanego z Get-ChildItem:

Get-ChildItem | Select-Object Name
#This may be shortened to:
gci | Select Name

Bardziej zaawansowane wykorzystanie potoku pozwala nam przesyłać dane wyjściowe polecenia cmdlet do pętli foreach:

Get-ChildItem | ForEach-Object {
    Copy-Item -Path $_.FullName -destination C:\NewDirectory\ 
}

#This may be shortened to:
gci | % { Copy $_.FullName C:\NewDirectory\ }

Zauważ, że w powyższym przykładzie użyto zmiennej automatycznej $ _. $ _ to krótki alias $ PSItem, który jest zmienną automatyczną, która zawiera bieżący element w potoku.

Komentowanie

Aby skomentować skrypty zasilania, wstawiając wiersz za pomocą symbolu # (skrót)

# This is a comment in powershell
Get-ChildItem

Możesz także mieć komentarze wieloliniowe, używając odpowiednio <# i #> na początku i na końcu komentarza.

<#
This is a 
multi-line
comment
#>
Get-ChildItem

Wywoływanie metod biblioteki .Net

Metody biblioteki statycznej .Net można wywoływać z programu PowerShell, umieszczając pełną nazwę klasy w trzecim nawiasie, a następnie wywołując metodę za pomocą ::

#calling Path.GetFileName()
C:\> [System.IO.Path]::GetFileName('C:\Windows\explorer.exe')
explorer.exe

Metody statyczne mogą być wywoływane z samej klasy, ale wywoływanie metod niestatycznych wymaga wystąpienia klasy .Net (obiektu).

Na przykład metody AddHours nie można wywołać z samej klasy System.DateTime. Wymaga instancji klasy:

C:\> [System.DateTime]::AddHours(15)
Method invocation failed because [System.DateTime] does not contain a method named 'AddHours'.
At line:1 char:1
+ [System.DateTime]::AddHours(15)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

W takim przypadku najpierw tworzymy obiekt , na przykład:

C:\> $Object = [System.DateTime]::Now

Następnie możemy użyć metod tego obiektu, nawet metod, których nie można wywołać bezpośrednio z klasy System.DateTime, takich jak metoda AddHours:

C:\> $Object.AddHours(15)

Monday 12 September 2016 01:51:19

Tworzenie obiektów

Polecenie cmdlet New-Object służy do tworzenia obiektu.

# Create a DateTime object and stores the object in variable "$var"
$var = New-Object System.DateTime

# calling constructor with parameters
$sr = New-Object System.IO.StreamReader -ArgumentList "file path"

W wielu przypadkach zostanie utworzony nowy obiekt w celu wyeksportowania danych lub przekazania ich do innego polecenia. Można to zrobić w następujący sposób:

$newObject = New-Object -TypeName PSObject -Property @{
    ComputerName = "SERVER1"
    Role = "Interface"
    Environment = "Production"
}

Istnieje wiele sposobów tworzenia obiektu. Poniższa metoda jest prawdopodobnie najkrótszym i najszybszym sposobem utworzenia PSCustomObject :

$newObject = [PSCustomObject]@{
    ComputerName = 'SERVER1'
    Role         = 'Interface'
    Environment  = 'Production'
}

Jeśli masz już obiekt, ale potrzebujesz tylko jednej lub dwóch dodatkowych właściwości, możesz po prostu dodać tę właściwość za pomocą Select-Object :

Get-ChildItem | Select-Object FullName, Name, 
    @{Name='DateTime'; Expression={Get-Date}}, 
    @{Name='PropertieName'; Expression={'CustomValue'}}

Wszystkie obiekty mogą być przechowywane w zmiennych lub przekazywane do potoku. Możesz również dodać te obiekty do kolekcji, a następnie pokazać wyniki na końcu.

Kolekcje obiektów działają dobrze z Export-CSV (i Import-CSV). Każda linia CSV jest obiektem, każda kolumna jest właściwością.

Polecenia formatowania konwertują obiekty na strumień tekstowy do wyświetlania. Unikaj używania poleceń Format- * do ostatniego etapu przetwarzania danych, aby zachować użyteczność obiektów.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow