Udostępnij za pośrednictwem


3. Podstawowe pojęcia

Notatka redakcyjna

Ważny

Specyfikacja języka Windows PowerShell 3.0 została opublikowana w grudniu 2012 r. i jest oparta na programie Windows PowerShell 3.0. Ta specyfikacja nie odzwierciedla bieżącego stanu programu PowerShell. Nie ma planu aktualizacji tej dokumentacji w celu odzwierciedlenia bieżącego stanu. Ta dokumentacja jest przedstawiona tutaj w celu uzyskania informacji historycznych.

Dokument specyfikacji jest dostępny jako dokument programu Microsoft Word z Centrum pobierania Microsoft pod adresem: https://www.microsoft.com/download/details.aspx?id=36389 Dokument programu Word został przekonwertowany na prezentację tutaj w witrynie Microsoft Learn. Podczas konwersji wprowadzono pewne zmiany redakcyjne w celu dostosowania formatowania dla platformy Docs. Usunięto niektóre literówki i drobne błędy.

3.1 Dostawcy i dyski

Dostawca umożliwia dostęp do danych i składników, które w przeciwnym razie nie byłyby łatwo dostępne w wierszu polecenia. Dane są prezentowane w spójnym formacie przypominającym dysk systemu plików.

Dane udostępniane przez dostawcę są wyświetlane na dysku , a dane są dostępne za pośrednictwem ścieżki tak samo jak na dysku. Wbudowane polecenia cmdlet dla każdego dostawcy służą do zarządzania danymi na dysku tego dostawcy.

Program PowerShell obejmuje następujący zestaw wbudowanych dostawców w celu uzyskania dostępu do różnych typów magazynów danych:

dostawca nazwa dysku Opis ref.
Pseudonim Pseudonim: Aliasy programu PowerShell §3.1.1
Środowisko Env: Zmienne środowiskowe §3.1.2
System plików A:, B:, C:, ... Dyski, katalogi i pliki §3.1.3
Funkcja Funkcja: Funkcje programu PowerShell §3.1.4
Zmienna Zmienna: Zmienne programu PowerShell §3.1.5

Windows PowerShell:

dostawca nazwa dysku Opis
Certyfikat Certyfikat Certyfikaty x509 dla podpisów cyfrowych
Rejestr HKLM: (HKEY_LOCAL_MACHINE), HKCU: (HKEY_CURRENT_USER) Rejestr systemu Windows
WSMan WSMan: informacje o konfiguracji WS-Management

Następujące polecenia cmdlet dotyczą dostawców i napędów.

  • Get-PSProvider: pobiera informacje o co najmniej jednym dostawcy
  • get-PSDrive: pobiera informacje o co najmniej jednym dysku

Typ obiektu reprezentującego dostawcę jest opisany w §4.5.1. Typ obiektu reprezentującego dysk jest opisany w §4.5.2.

3.1.1 Aliasy

Alias jest alternatywną nazwą polecenia. Polecenie może mieć wiele aliasów, a oryginalna nazwa i wszystkie jego aliasy mogą być używane zamiennie. Alias można przypisać na nowo. Alias to przedmiot (§3.3).

Alias można przypisać do innego aliasu; jednak nowy alias nie jest aliasem oryginalnego polecenia.

Alias w systemie dostawcy to płaska przestrzeń nazw, która zawiera jedynie obiekty reprezentujące aliasy. Zmienne nie mają elementów podrzędnych.

Program PowerShell zawiera zestaw wbudowanych aliasów.

Następujące polecenia cmdlet dotyczą aliasów:

  • New-Alias: Tworzy alias
  • Set-Alias: tworzy lub zmienia jeden lub więcej aliasów
  • Get-Alias: pobiera informacje o jednym lub większej liczbie aliasów
  • Eksportuj-alias: eksportuje jeden lub więcej aliasów do pliku

Po utworzeniu aliasu dla polecenia przy użyciu New-Aliasparametrów tego polecenia nie można uwzględnić w tym aliasie. Jednak bezpośrednie przypisanie do zmiennej w przestrzeni nazw Alias: zezwala na uwzględnienie parametrów.

Notatka

Jednak prosta sprawa polega na utworzeniu funkcji, która nie robi nic poza zawieraniem wywołania tego polecenia z wszystkimi żądanymi parametrami, i przypisaniu tej funkcji aliasu.

Typ obiektu, który reprezentuje alias, jest opisany w §4.5.4.

Obiekty aliasu są przechowywane na dysku alias: (§3.1).

3.1.2 Zmienne środowiskowe

Dostawca środowiska programu PowerShell umożliwia pobieranie, dodawanie, zmianę, wyczyszczenie i usunięcie zmiennych środowiskowych systemu operacyjnego.

Środowisko dostawcy to płaska przestrzeń nazw zawierająca tylko obiekty reprezentujące zmienne środowiskowe. Zmienne nie mają elementów podrzędnych.

Nazwa zmiennej środowiskowej nie może zawierać znaku równości (=).

Zmiany zmiennych środowiskowych mają wpływ tylko na bieżącą sesję.

Zmienna środowiskowa jest elementem (§3.3).

Typ obiektu reprezentującego zmienną środowiskową jest opisany w §4.5.6.

Obiekty zmiennych środowiskowych są przechowywane na dysku Env: (§3.1).

3.1.3 System plików

Dostawca systemu plików programu PowerShell umożliwia tworzenie, otwieranie, zmianę i usuwanie katalogów i plików.

Dostawca systemu plików to hierarchiczna przestrzeń nazw zawierająca obiekty reprezentujące bazowy system plików.

Pliki są przechowywane na dyskach o nazwach takich jak A:, B:, C:, itd. (§3.1). Dostęp do katalogów i plików jest uzyskiwany przy użyciu notacji ścieżki (§3.4).

Katalog lub plik jest elementem (§3.3).

Funkcje 3.1.4

Dostawca funkcji programu PowerShell umożliwia pobieranie, dodawanie, zmianę, wyczyszczenie i usunięcie funkcji (§8.10) oraz filtrów (§8.10.1).

Funkcja dostawcy to płaska przestrzeń nazw, która zawiera tylko obiekty funkcji i filtry. Ani funkcje, ani filtry nie mają elementów podrzędnych.

Zmiany funkcji mają wpływ tylko na bieżącą sesję.

Funkcja jest elementem (§3.3).

Typ obiektu reprezentującego funkcję jest opisany w §4.5.10. Typ obiektu reprezentującego filtr jest opisany w §4.5.11.

Obiekty funkcji są przechowywane na dysku Funkcja: (§3.1).

3.1.5 Zmienne

Zmienne można definiować i manipulować bezpośrednio w języku programu PowerShell.

Przestrzeń nazw Variable jest płaska i zawiera tylko obiekty, które reprezentują zmienne. Zmienne nie mają elementów podrzędnych.

Następujące polecenia cmdlet dotyczą również zmiennych:

  • new-variable: Tworzy zmienną
  • Set-Variable: nadaje lub zmienia cechy co najmniej jednej zmiennej
  • get-variable: pobiera informacje o co najmniej jednej zmiennej
  • Clear-Variable: usuwa wartość jednej lub kilku zmiennych
  • Remove-Variable: Usuwa jedną lub więcej zmiennych

Ponieważ zmienna jest elementem (§3.3), może być manipulowana przez większość poleceń cmdlet związanych z elementami.

Typ obiektu, który reprezentuje zmienną, jest opisany w §4.5.3.

Obiekty zmiennych są przechowywane na dysku o nazwie Variable: (§3.1).

3.2 Lokalizacje robocze

Bieżąca lokalizacja robocza to domyślna lokalizacja, do której wskazują polecenia. Jest to lokalizacja używana, jeśli jawna ścieżka (§3.4) nie jest dostarczana po wywołaniu polecenia. Ta lokalizacja obejmuje bieżący dysk.

Host programu PowerShell może mieć wiele dysków, w tym przypadku każdy dysk ma własną bieżącą lokalizację.

Jeśli nazwa dysku jest określona bez katalogu, bieżąca lokalizacja dla tego dysku jest implikowana.

Bieżącą lokalizację roboczą można zapisać na stosie, a następnie ustawić na nową lokalizację. Później zapisaną lokalizację można przywrócić z tego stosu i uczynić ją bieżącą lokalizacją roboczą. Istnieją dwa rodzaje stosów lokalizacji: domyślny stos lokalizacji roboczeji zero lub więcej zdefiniowanych przez użytkownika nazwanych stosów lokalizacji roboczych. Po rozpoczęciu sesji domyślna kolejka lokalizacji roboczej jest również bieżącą kolejką lokalizacji roboczej. Jednak każdy nazwany stos lokalizacji roboczej może stać się bieżącym stosem lokalizacji roboczej.

Następujące polecenia cmdlet odnoszą się do lokalizacji:

  • Set-Location: ustanawia bieżącą lokalizację roboczą
  • Get-Location: Określa bieżącą lokalizację roboczą dla określonych dysków lub określonych stosów.
  • Push-Location : Zapisuje bieżącą lokalizację roboczą na górze określonego stosu lokalizacji
  • Pop-Location: Przywraca bieżącą lokalizację roboczą z wierzchołka określonego stosu lokalizacji

Typy obiektów reprezentujące lokalizację roboczą i stos lokalizacji roboczych są opisane w §4.5.5.

3.3 Elementy

Element jest aliasem (§3.1.1), zmienną (§3.1.5), funkcją (§1 3.1.4), zmienna środowiskowa (§3.1.2) lub plik lub katalog w systemie plików (§3.1.3).

Następujące polecenia cmdlet dotyczą elementów:

Następujące polecenia cmdlet dotyczą zawartości elementów:

  • Get-Content : pobiera zawartość elementu
  • Add-Content : Dodawanie zawartości do określonych elementów
  • Set-Content: zapisuje lub zastępuje zawartość w elemencie
  • clear-content: usuwa zawartość elementu

Typ obiektu reprezentującego katalog jest opisany w §4.5.17. Typ obiektu reprezentującego plik jest opisany w §4.5.18.

3.4 Nazwy ścieżek

Wszystkie elementy w magazynie danych dostępne za pośrednictwem dostawcy programu PowerShell mogą być identyfikowane unikatowo według ich nazw ścieżek. Nazwa ścieżki jest kombinacją nazwy elementu, kontenera i podkontenerów, w których znajduje się element, oraz dysku programu PowerShell, za pomocą którego uzyskuje się dostęp do kontenerów.

Nazwy ścieżek są podzielone na jeden z dwóch typów: w pełni kwalifikowane i względne. w pełni kwalifikowana nazwa ścieżki składa się ze wszystkich elementów tworzących ścieżkę. Poniższa składnia przedstawia elementy w pełni kwalifikowanej nazwy ścieżki:

Napiwek

Notacja ~opt~ w definicjach składni wskazuje, że jednostka leksykalna jest opcjonalna w składni.

path:
    provider~opt~   drive~opt~   containers~opt~   item

provider:
    module~opt~   provider   ::

module:
    module-name   \

drive:
    drive-name   :

containers:
    container   \
    containers container   \

nazwa modułu odnosi się do modułu nadrzędnego.

dostawca odwołuje się do dostawcy programu PowerShell, za pośrednictwem którego uzyskuje się dostęp do magazynu danych.

dysk odnosi się do dysku PowerShell obsługiwanego przez określonego dostawcę PowerShell.

Kontener może zawierać inne kontenery, które z kolei mogą zawierać dalsze kontenery, i tak dalej, przy czym końcowy kontener przechowuje przedmiot. Kontenery muszą być określone w kolejności hierarchicznej, w której istnieją w magazynie danych.

Oto przykład nazwy ścieżki:

E:\Accounting\InvoiceSystem\Production\MasterAccount\MasterFile.dat

Jeśli ostatni element w ścieżce zawiera inne elementy, jest to element kontenera; w przeciwnym razie jest to element liścia.

W niektórych przypadkach nie jest wymagana w pełni kwalifikowana nazwa ścieżki; wystarczy nazwa ścieżki względnej. Nazwa ścieżki względnej jest oparta na bieżącej lokalizacji roboczej. Program PowerShell umożliwia zidentyfikowanie elementu na podstawie jego lokalizacji względem bieżącej lokalizacji roboczej. Nazwa ścieżki względnej obejmuje użycie niektórych znaków specjalnych. W poniższej tabeli opisano każdy z tych znaków i przedstawiono przykłady względnych nazw ścieżek i w pełni kwalifikowanych nazw ścieżek. Przykłady w tabeli są oparte na bieżącym katalogu roboczym ustawionym na C:\Windows:

symbol Opis ścieżka względna pełna ścieżka kwalifikowana
. Bieżąca lokalizacja robocza .\System C:\Windows\System
.. Rodzic aktualnej lokalizacji roboczej ..\Program Files C:\Program Files
\ Główna ścieżka dysku bieżącej lokalizacji roboczej \Program Files C:\Program Files
żaden Brak znaków specjalnych System C:\Windows\System

Aby użyć nazwy ścieżki w poleceniu, wprowadź tę nazwę jako w pełni kwalifikowaną lub względną nazwę ścieżki.

Następujące polecenia cmdlet dotyczą ścieżek:

  • convert-path: konwertuje ścieżkę ze ścieżki programu PowerShell na ścieżkę dostawcy programu PowerShell
  • Join-Path: Łączy ścieżkę i ścieżkę podrzędną w jedną ścieżkę
  • Resolve-Path: Rozpoznaje symbole wieloznaczne w ścieżce
  • Split-Path: Zwraca określoną część ścieżki
  • Test-Path: Określa, czy elementy ścieżki istnieją lub czy ścieżka jest prawidłowo skonstruowana.

Niektóre polecenia cmdlet (takie jak Add-Content i Copy-Item) używają filtrów plików. filtr plików to mechanizm określania kryteriów wyboru z zestawu ścieżek.

Typ obiektu reprezentujący rozpoznaną ścieżkę jest opisany w §4.5.5. Ścieżki są często manipulowane jako ciągi.

3.5 Zakresy

3.5.1 Wprowadzenie

Nazwa może oznaczać zmienną, funkcję, alias, zmienną środowiskową lub dysk. Ta sama nazwa może oznaczać różne elementy w różnych miejscach skryptu. Dla każdego innego elementu, który nazwa oznacza, ta nazwa jest widoczna tylko w obrębie skryptu tekstu nazwanego jego zakresem . Różne elementy oznaczone tą samą nazwą mają różne zakresy lub znajdują się w różnych przestrzeniach nazw.

Zakresy mogą się zagnieżdżać, w takim przypadku zakres zewnętrzny jest określany jako zakres nadrzędny , a wszystkie zagnieżdżone zakresy są zakresami podrzędnymi tego nadrzędnego. Zakres nazwy to jego zakres, w którym jest zdefiniowany, oraz wszystkie zakresy podrzędne, chyba że jest oznaczony jako prywatny. W zakresie podrzędnym zdefiniowana nazwa ukrywa wszystkie elementy zdefiniowane przy użyciu tej samej nazwy w zakresach nadrzędnych.

O ile nie jest używana notacja źródła kropkowego (§3.5.5), każdy z poniższych elementów tworzy nowy zakres:

  • Plik skryptu
  • Blok skryptu
  • Funkcja lub filtr

Rozważmy następujący przykład:

# Start of script
$x = 2; $y = 3
Get-Power $x $y

# Function defined in script
function Get-Power([int]$x, [int]$y) {
    if ($y -gt 0) {
        return $x * (Get-Power $x (--$y))
    } else {
        return 1
    }
}
# End of script

Zakres zmiennych $x i $y utworzony w skry skryptie jest treścią tego skryptu, w tym funkcją zdefiniowaną wewnątrz. Funkcja Get-Power definiuje dwa parametry o tych samych nazwach. Ponieważ każda funkcja ma własny zakres, te zmienne różnią się od tych zdefiniowanych w zakresie nadrzędnym i ukrywają je przed zakresem nadrzędnym. Zakres funkcji jest zagnieżdżony wewnątrz zakresu skryptu.

Należy pamiętać, że funkcja wywołuje się rekursywnie. Za każdym razem, gdy to robi, tworzy kolejny zagnieżdżony zakres, każdy z własnymi zmiennymi $x i $y.

Oto bardziej złożony przykład, który pokazuje również zagnieżdżone zakresy i ponowne użycie nazw:

# start of script scope
$x = 2              # top-level script-scope $x created
                    # $x is 2
F1                  # create nested scope with call to function F1
                    # $x is 2
F3                  # create nested scope with call to function F3
                    # $x is 2

function F1 {       # start of function scope
                    # $x is 2
    $x = $true      # function-scope $x created
                    # $x is $true

    & {             # create nested scope with script block
                    # $x is $true
        $x = 12.345 # scriptblock-scope $x created
                    # $x is 12.345
    }               # end of scriptblock scope, local $x goes away

                    # $x is $true
    F2              # create nested scope with call to function F2
                    # $x is $true
}                   # end of function scope, local $x goes away

function F2 {       # start of function scope
                    # $x is $true
    $x = "red"      # function-scope $x created
                    # $x is "red"
}                   # end of function scope, local $x goes away

function F3 {       # start of function scope
                    # $x is 2
    if ($x -gt 0) {
                    # $x is 2
        $x = "green"
                    # $x is "green"
    }               # end of block, but not end of any scope
                    # $x is still "green"
}                   # end of function scope, local $x goes away
# end of script scope

3.5.2 Nazwy i liczby zakresów

Program PowerShell obsługuje następujące zakresy:

  • Globalny: jest to zakres najwyższego poziomu. Wszystkie zmienne automatyczne i preferencji są zdefiniowane w tym zakresie. Zakres globalny jest zakresem nadrzędnym wszystkich innych zakresów, a wszystkie inne zakresy są zakresami podrzędnymi zakresu globalnego.

  • Lokalny: Jest to bieżący zakres w dowolnym momencie wykonania skryptu, bloku skryptu lub funkcji. Dowolny zakres może być zakresem lokalnym.

  • Skrypt: ten zakres istnieje dla każdego wykonywanego pliku skryptu. Zakres skryptu jest zakresem nadrzędnym wszystkich zakresów utworzonych na jego podstawie. Blok skryptu nie ma własnego zakresu skryptu; zamiast tego jego zasięg jest zakresem najbliższego nadrzędnego pliku skryptu. Chociaż nie ma czegoś takiego jak zakres modułu, zakres skryptu zapewnia odpowiednik.

Nazwy mogą być deklarowane jako prywatne, w tym przypadku nie są widoczne poza zakresem nadrzędnym, nawet w zakresach podrzędnych. Pojęcie 'prywatny' nie jest oddzielnym zakresem; jest to alias dla zakresu lokalnego, wraz z dodatkiem ukrywania nazwy, jeśli jest używane jako miejsce do zapisu.

Zakresy mogą być odwoływane za pomocą liczby, która opisuje względną pozycję jednego zakresu względem innego. Zakres 0 oznacza zakres lokalny, zakres 1 oznacza zakres nadrzędny pierwszej generacji, zakres 2 oznacza zakres nadrzędny drugiej generacji, i tak dalej. (Liczby zakresów są używane przez cmdlety do manipulacji zmiennymi).

3.5.3 Zakres nazwy zmiennej

Jak pokazano w poniższym fragmencie kodu, nazwę zmiennej można określić za pomocą jednego z sześciu różnych zakresów:

variable-scope:
    Global:
    Local:
    Private:
    Script:
    Using:
    Workflow:
    variable-namespace

Zakres jest opcjonalny. W poniższej tabeli przedstawiono znaczenie każdego z nich we wszystkich możliwych kontekstach. Pokazuje również zakres, gdy nie określono jawnie zakresu:

Modyfikator Zakresu W pliku skryptu W Bloku Skryptu w funkcji
Światowy Zakres globalny Zakres globalny Zakres globalny
Skrypt Zakres pliku skryptu najbliższego przodka lub zakres globalny, jeśli nie ma pliku skryptu najbliższego przodka. Zakres pliku skryptu najbliższego przodka lub zakres globalny, jeśli nie ma pliku skryptu najbliższego przodka. Zakres pliku skryptu najbliższego przodka lub zakres globalny, jeśli nie ma pliku skryptu najbliższego przodka.
Prywatne Zakres globalny/skrypt/lokalny Zakres lokalny Zakres lokalny
Lokalny Zakres globalny/skrypt/lokalny Zakres lokalny Zakres lokalny
Używanie Zdefiniowano implementację Zdefiniowano implementację Zdefiniowano implementację
Przepływ pracy Zdefiniowano implementację Zdefiniowano implementację Zdefiniowano implementację
Żaden Zakres globalny/skrypt/lokalny Zakres lokalny Zakres lokalny

Informacje o zakresie zmiennych można również określić, używając poleceń cmdlet z rodziny wymienionej w (§3.1.5). W szczególności zapoznaj się z parametrem Scopei parametrami Option Private i Option AllScope, aby uzyskać więcej informacji.

Modyfikator zakresu jest używany do uzyskiwania Using: dostępu do zmiennych zdefiniowanych w innym zakresie podczas uruchamiania skryptów za pomocą poleceń cmdlet, takich jak Start-Job, Invoke-Commandlub w instrukcji wbudowanej. Na przykład:

$a = 42
Invoke-Command --ComputerName RemoteServer { $Using:a } # returns 42
workflow foo
{
    $b = "Hello"
    inlinescript { $Using:b }
}
foo # returns "Hello"

Przepływ pracy zakresu jest używany z instrukcją równoległą lub instrukcją sekwencji , aby uzyskać dostęp do zmiennej zdefiniowanej w ramach przepływu pracy.

3.5.4 Zakres nazwy funkcji

Nazwa funkcji może również mieć jeden z czterech różnych zakresów, a widoczność tej nazwy jest taka sama jak w przypadku zmiennych (§3.5.3).

Notacja kropki źródłowej 3.5.5

Gdy plik skryptu, blok skryptu lub funkcja jest wykonywana z poziomu innego pliku skryptu, bloku skryptu lub funkcji, wykonany plik skryptu tworzy nowy zagnieżdżony zakres. Na przykład

Script1.ps1
& "Script1.ps1"
& { ... }
FunctionA

Jednak gdy używana jest notacja źródła kropkowego , nowy zakres nie zostaje utworzony przed wykonaniem polecenia, więc dodatki lub zmiany, które zostałby wprowadzone do własnego lokalnego zakresu, są wprowadzane do bieżącego zakresu. Na przykład

. Script2.ps1
. "Script2.ps1"
. { ... }
. FunctionA

3.5.6 Moduły

Podobnie jak plik skryptu najwyższego poziomu znajduje się u podstawy hierarchicznego drzewa zagnieżdżonych zakresów, podobnie jest z każdym modułem (§3.14). Jednak domyślnie tylko te nazwy wyeksportowane przez moduł są dostępne po nazwie w kontekście importowania. Globalny parametr polecenia cmdlet Import-Module umożliwia zwiększenie widoczności wyeksportowanych nazw.

3.6 Właściwości Tylko do Odczytu i Stałe

Zmienne i aliasy są opisywane przez obiekty zawierające wiele właściwości. Te właściwości są ustawiane i manipulowane przez dwie rodziny poleceń cmdlet (§3.1.5, §3.1.1). Jedną z takich właściwości jest Opcja, którą można ustawić na ReadOnly lub Constant (przy użyciu parametru Opcja). Można usunąć zmienną lub alias oznaczony jako ReadOnly, a jego właściwości mogą ulec zmianie, pod warunkiem określenia parametru Force. Nie można jednak usunąć zmiennej lub aliasu oznaczonych jako Stała ani zmienić ich właściwości.

3.7 Przeciążenia metod i rozwiązywanie wywołań

3.7.1 Wprowadzenie

Jak określono w §1, zewnętrzna procedura udostępniona przez środowisko wykonywania (i napisana w innym języku niż program PowerShell) jest nazywana metodą .

Nazwa metody wraz z liczbą i typami jej parametrów jest zbiorczo nazywana sygnaturą tej metody. (Pamiętaj, że podpis nie zawiera zwracanego typu metody). Środowisko wykonywania może zezwalać typowi na posiadanie wielu metod o tej samej nazwie, pod warunkiem, że każdy z nich ma inny podpis. Jeśli zdefiniowano wiele wersji niektórych metod, ta metoda jest określana jako przeciążona. Na przykład typ Math (§4.3.8) zawiera zestaw metod o nazwie Abs, który oblicza wartość bezwzględną określonej liczby, gdzie określona liczba może mieć jedną z wielu typów. Metody w tym zestawie mają następujące podpisy:

Abs(decimal)
Abs(float)
Abs(double)
Abs(int)
Abs(long)
Abs(SByte)
Abs(Int16)

W tym przypadku wszystkie metody mają taką samą liczbę argumentów; ich podpisy różnią się tylko typem argumentu.

Inny przykład obejmuje typ Array (§4.3.2), który zawiera zestaw metod o nazwie Copy, który kopiuje zakres elementów z jednej tablicy do innej, począwszy od początku każdej tablicy (domyślnie) lub w niektórych wyznaczonych elementach. Metody w tym zestawie mają następujące podpisy:

Copy(Array, Array, int)
Copy(Array, Array, long)
Copy(Array, int, Array, int, int)
Copy(Array, long, Array, long, long)

W takim przypadku podpisy różnią się od typu argumentu i, w niektórych przypadkach, według liczby argumentów.

W większości wywołań do metod przeciążonych liczba i typ przekazanych argumentów są dokładnie zgodne z jednym z przeciążeń, a wybrana metoda jest oczywista. Jeśli jednak tak nie jest, należy określić, którą przeciążoną wersję wywołać, jeśli istnieje. Na przykład

[Math]::Abs([byte]10) # no overload takes type byte
[array]::Copy($source, 3, $dest, 5L, 4) # both int and long indexes

Inne przykłady obejmują ciąg typu (tj. System.String), który ma wiele przeciążonych metod.

Mimo że program PowerShell ma reguły rozpoznawania wywołań metod, które nie pasują dokładnie do przeciążonego podpisu, program PowerShell nie zapewnia sposobu definiowania przeciążonych metod.

Notatka

Uwaga edytora: program PowerShell 5.0 dodał możliwość definiowania klas opartych na skryptach. Te klasy mogą zawierać metody przeciążone.

3.7.2 Rozpoznawanie przeciążenia metody

Biorąc pod uwagę wywołanie metody (§7.1.3) z listą wyrażeń argumentów i zestawem metody kandydujące (tj. metodami, które można wywołać), mechanizm wybierania najlepszej metody jest nazywany rozwiązywanie przeciążenia.

Biorąc pod uwagę zestaw metod kandydujących (§3.7.3), wybierana jest najlepsza metoda w tym zestawie. Jeśli zestaw zawiera tylko jedną metodę, ta metoda jest najlepszą metodą. W przeciwnym razie najlepszą metodą jest jedna metoda, która jest lepsza niż wszystkie inne metody w odniesieniu do danej listy argumentów przy użyciu reguł pokazanych w §3.7.4. Jeśli nie ma dokładnie jednej metody, która jest lepsza niż wszystkie inne metody, wywołanie metody jest niejednoznaczne i zgłaszany jest błąd.

Najlepsza metoda musi być dostępna w kontekście, w którym jest wywoływana. Na przykład skrypt programu PowerShell nie może wywołać metody, która jest prywatna lub chroniona.

Najlepszą metodą wywołania metody statycznej powinna być metoda statyczna, a najlepszą metodą wywołania metody instancji powinna być metoda instancji.

3.7.3 Odpowiednia metoda

Metoda jest zastosowalna w odniesieniu do listy argumentów A, gdy jedno z poniższych stwierdzeń jest prawdziwe:

  • Liczba argumentów w A jest identyczna z liczbą parametrów akceptowanych przez metodę.
  • Metoda ma wymagane parametry M i N parametrów opcjonalnych, a liczba argumentów w A jest większa lub równa M, ale mniejsza niż N.
  • Metoda akceptuje zmienną liczbę argumentów, a liczba argumentów w A jest większa niż liczba parametrów akceptowanych przez metodę.

Oprócz posiadania odpowiedniej liczby argumentów każdy argument w A musi być zgodny z trybem przekazywania parametrów argumentu, a typ argumentu musi być zgodny z typem parametru lub musi istnieć konwersja z typu argumentu na typ parametru.

Jeśli typ argumentu to ref (§4.3.6), odpowiedni parametr musi być również ref, a typ argumentu do celów konwersji jest typem właściwości Wartość z argumentu ref.

Jeśli typ argumentu jest ref, odpowiedni parametr może być out zamiast ref.

Jeśli metoda akceptuje zmienną liczbę argumentów, metoda może być stosowana w postaci normalnej lub postaci rozszerzonej. Jeśli liczba argumentów w A jest identyczna z liczbą parametrów akceptowanych przez metodę, a ostatni parametr jest tablicą, formularz zależy od rangi jednej z dwóch możliwych konwersji:

  • Ranga konwersji z typu ostatniego argumentu w A do typu tablicy dla ostatniego parametru.
  • Ranga konwersji z typu ostatniego argumentu w A do typu elementu typu tablicy dla ostatniego parametru.

Jeśli pierwsza konwersja (do typu tablicy) jest lepsza niż druga konwersja (do typu elementu tablicy), metoda ma zastosowanie w postaci normalnej, w przeciwnym razie ma zastosowanie w postaci rozszerzonej.

Jeśli istnieje więcej argumentów niż parametry, metoda może być stosowana tylko w formularzu rozszerzonym. Aby mieć zastosowanie w formularzu rozszerzonym, ostatni parametr musi mieć typ tablicy. Metoda jest zastępowana równoważną metodą, która ma ostatni parametr zastąpiony wystarczającymi parametrami, aby uwzględnić każdy niedopasowany argument w A. Każdy dodatkowy typ parametru jest typem elementu typu tablicy dla ostatniego parametru w oryginalnej metodzie. Powyższe reguły dla odpowiedniej metody są stosowane do tej nowej metody i listy argumentów A.

3.7.4 Lepsza metoda

Biorąc pod uwagę listę argumentów A z zestawem wyrażeń argumentów { E~1~, E~2~, ..., E~N~ } i dwie metody aplikacji M~P~ i M~Q~ z typami parametrów { P~1~, P~2~, ..., P~N~ } i { Q~1~, Q~2~, ..., Q~N~ }, M~P~ jest zdefiniowana jako lepsza metoda niż M~Q~, jeśli skumulowany ranking konwersji dla M~P~ jest lepszy niż w przypadku M~Q~.

Skumulowany ranking konwersji jest obliczany w następujący sposób. Każda konwersja ma inną wartość w zależności od liczby parametrów, gdzie konwersja E~1~ jest warta N, E~2~ jest warta N-1, a E~N~ jest warta 1. Jeśli konwersja z E~X~ na P~X~ jest lepsza niż z E~X~ na Q~X~, M~P~ gromadzi N-X+1; w przeciwnym razie M~Q~ gromadzi N-X+1. Jeśli M~P~ i M~Q~ mają taką samą wartość, zostaną zastosowane następujące zasady rozstrzygania remisów, w kolejności:

  • Skumulowany ranking konwersji między typami parametrów (ignorując typy argumentów) jest obliczany w sposób podobny do poprzedniego rankingu, więc P~1~ jest porównywany z Q~1~, P~2~ względem Q~2~, ..., i P~N~ względem Q~N~. Porównanie jest pomijane, jeśli argument został $null, lub jeśli typy parametrów nie są typami liczbowymi. Porównanie jest również pomijane, jeśli konwersja argumentów E~X~ traci informacje podczas konwersji na P~X~, ale nie traci informacji podczas konwersji na Q~X~lub odwrotnie. Jeśli typy konwersji parametrów są porównywane, to jeśli konwersja z P~X~ na Q~X~ jest lepsza niż z Q~X~ do P~X~, M~P~ gromadzi N-X+1; w przeciwnym razie M~Q~ gromadzi N-X+1. Ta reguła rozstrzygania ma preferować najbardziej specyficzną metodę (tj. metodę z parametrami o najmniejszych typach danych), jeśli żadne informacje nie zostaną utracone w konwersjach, lub preferować metodę najbardziej ogólną (tj. metodę z parametrami o największych typach danych), jeśli konwersje spowodują utratę informacji.
  • Jeśli obie metody używają swojej rozszerzonej formy, to metoda z większą liczbą parametrów jest lepszą metodą.
  • Jeśli jedna z metod używa rozszerzonego formularza, a druga używa formularza normalnego, metoda używająca formularza normalnego jest lepszą metodą.

3.7.5 Lepsza konwersja

Poniższy tekst oznaczony w następujący sposób jest specyficzny dla środowiska Windows PowerShell.

Konwersje są klasyfikowane w następujący sposób, od najniższego do najwyższego:

  • T~1~[] do T~2~[], w której między T~1~ a T~2~ nie istnieje żadna przypisana konwersja
  • T do ciągu, w którym T jest dowolnym typem
  • T~1~ do T~2~, gdzie T~1~ lub T~2~ definiuje konwersję niestandardową w sposób zdefiniowany przez implementację
  • T~1~ do T~2~, gdzie T~1~ implementuje IConvertible
  • T~1~ do T~2~, gdzie T~1~ lub T~2~ implementują metodę T~2~ op_Implicit(T1)
  • T~1~ do T~2~, gdzie T~1~ lub T~2~ implementują metodę T~2~ op_Explicit(T1)
  • T~1~ T~2~, w którym T~2~ implementuje konstruktor przyjmujący jeden argument typu T~1~
  • Jedną z następujących konwersji:
    • Przekształć ciąg na T, gdzie T implementuje metodę statyczną T Parse(string) lub T Parse(string, IFormatProvider).
    • T~1~ do T~2~, gdzie T~2~ jest dowolnym wyliczeniem, a T~1~ jest ciągiem lub kolekcją obiektów, które można przekonwertować na ciąg
  • T do obiektu PSObject, w którym T jest dowolnym typem
  • Dowolna z następujących konwersji: Language
    • T do wartości logicznej, gdzie T jest dowolnym typem liczbowym
    • ciąg do T, w którym T to regex, wmisearcher, wmi, wmiclass, adsi, adsisearcherlub type
    • T do bool
    • T~1~ do Nullable[T~2~], gdzie istnieje konwersja z T~1~ na T~2~
    • T do unieważnienia
    • T~1~[] do T~2~[], gdzie istnieje przypisywalna konwersja między T~1~ a T~2~
    • T~1~ do T~2~[], gdzie T~1~ jest zbiorem
    • IDictionary do Hashtable
    • T do ref
    • T do xml
    • scriptblock do delegate
    • T~1~ do T~2~, gdzie T~1~ jest typem całkowitym, a T~2~ jest typem wyliczeniowym
  • $null do T, gdzie T jest dowolnym typem wartości
  • Od $null do T, gdzie T jest dowolnym typem odwołania
  • Dowolna z następujących konwersji:
    • bajt dla T, gdzie T jest SByte

    • UInt16 T, w którym T jest SByte, bytelub Int16

    • Int16 do T, gdzie T jest SByte lub byte

    • UInt32 do T, gdzie T jest SByte, byte, Int16, UInt16lub int

    • int T, gdzie T jest SByte, byte, Int16 lub UInt16

    • UInt64 T, gdzie T jest SByte, byte, Int16, UInt16, int, UInt32lub long

    • long do T, gdzie T jest SByte, byte, Int16, UInt16, intlub UInt32

    • float T, gdzie T jest dowolnym typem całkowitym lub decimal

    • double T, gdzie T jest dowolnym typem całkowitym lub decimal

    • decimal do T, gdzie T jest dowolnym typem liczby całkowitej

  • Dowolna z następujących konwersji:
    • SByte T, gdzie T jest byte, uint6, UInt32 lub UInt64
    • Int16 T, w którym T jest UInt16, UInt32 lub UInt64
    • int do T, gdzie T jest UInt32 lub UInt64
    • long do UInt64
    • decimal do T, gdzie T jest float lub double
  • Dowolna z następujących konwersji:
    • T do string, gdzie T jest dowolnym typem liczbowym
    • T do char, gdzie T jest dowolnym typem liczbowym
    • string do T, gdzie T jest dowolnym typem liczbowym
  • Każda z następujących konwersji, te konwersje są uznawane za konwersje możliwe do przypisania:
    • byte T, gdzie T jest Int16, UInt16, int, UInt32, long, UInt64, single, doublelub decimal
    • SByte T, gdzie T jest Int16, UInt16, int, UInt32, long, UInt64, single, doublelub decimal
    • UInt16 T, w którym T jest int, UInt32, longlub UInt64, lub single, doublelub decimal
    • Int16 T, w którym T jest int, UInt32, longlub UInt64, lub single, doublelub decimal
    • UInt32 do T, gdzie T jest long, lub UInt64, single, doublelub decimal
    • int do T, gdzie T jest long, UInt64, single, doublelub decimal
    • single do double
  • T~1~ do T~2~, gdzie T~2~ jest klasą bazową lub interfejsem T~1~. Ta konwersja jest uważana za konwersję z możliwością przypisania.
  • string do char[]
  • T do T — ta konwersja jest uznawana za konwersję z możliwością przypisania.

Dla każdej konwersji formularza T~1~ do T~2~[], w której T~1~ nie jest tablicą i nie ma zastosowania żadna inna konwersja, jeśli istnieje konwersja z T~1~ do T~2~, ranga konwersji jest gorsza niż konwersja z T~1~ na T~2~, ale lepsza niż jakakolwiek konwersja sklasyfikowana mniej niż konwersja z T~1~ do T~2~

3.8 Wyszukiwanie nazw

Istnieje możliwość posiadania poleceń różnych rodzajów o tej samej nazwie. Kolejność, w której wyszukiwanie nazw jest wykonywane w takim przypadku, to alias, funkcja, polecenie cmdlet i zewnętrzne polecenie.

3.9 Wyszukiwanie nazwy typu

§7.1.10 zawiera stwierdzenie "literał typu jest reprezentowany w implementacji przez nieokreślony bazowy typ ". W rezultacie nazwa typu jest synonimem jego typu bazowego. Przykładowe typy to int, double, long[]i Hashtable.

Nazwy typów są dopasowywane w następujący sposób: Porównaj nazwę danego typu z listą wbudowanych akceleratorów typów , takich jak int, long, double. Jeśli zostanie znalezione dopasowanie, jest to typ. W przeciwnym razie przyjmij, że nazwa typu jest w pełni kwalifikowana i sprawdź, czy taki typ istnieje w systemie operacyjnym hosta. Jeśli zostanie znalezione dopasowanie, jest to typ. W przeciwnym razie dodaj prefiks przestrzeni nazw System.. Jeśli zostanie znalezione dopasowanie, jest to typ. W przeciwnym razie nazwa typu jest błędna. Ten algorytm jest stosowany dla każdego argumentu typu dla typów ogólnych. Nie ma jednak potrzeby określania wartości arity (liczby argumentów lub operandów pobieranych przez funkcję lub operator).

3.10 Automatyczne zarządzanie pamięcią

Różne operatory i cmdlety powodują alokację pamięci dla obiektów typów referencyjnych, takich jak ciągi i tablice. Alokacja i zwalnianie tej pamięci jest zarządzane przez system środowiska uruchomieniowego programu PowerShell. Oznacza to, że program PowerShell zapewnia automatyczne zbieranie śmieci.

3.11 Kolejność wykonywania

efekt uboczny jest zmianą stanu środowiska wykonawczego polecenia. Zmiana wartości zmiennej (za pośrednictwem operatorów przypisania lub operatorów przed i po przyrostie i dekrementacji) jest efektem ubocznym, podobnie jak zmiana zawartości pliku.

O ile nie określono inaczej, instrukcje są wykonywane w kolejności leksykalnej.

Z wyjątkiem niektórych operatorów, kolejność obliczania elementów w wyrażeniu oraz kolejność występowania efektów ubocznych są nieokreślone.

Wyrażenie, które wywołuje polecenie, obejmuje wyrażenie, które wyznacza polecenie, oraz zero lub więcej wyrażeń, które wyznaczają argumenty, których wartości mają być przekazywane do tego polecenia. Kolejność oceniania tych wyrażeń względem siebie jest nieokreślona.

3.12 Obsługa błędów

Gdy polecenie zakończy się niepowodzeniem, jest to uznawane za błąd , a informacje o tym błędzie są rejestrowane w rekordzie błędu , którego typ jest nieokreślony (§4.5.15); ten typ obsługuje jednak indeks dolny.

Błąd należy do jednej z dwóch kategorii. Kończy operację (błąd kończący ) lub nie (błąd niekończący). W przypadku błędu zakończenia błąd jest rejestrowany, a operacja zostaje zatrzymana. W przypadku błędu, który nie kończy się, błąd jest rejestrowany, a operacja jest kontynuowana.

Błędy, które nie powodują zakończenia, są zapisywane w strumieniu błędów. Chociaż te informacje można przekierować do pliku, obiekty błędów są najpierw konwertowane na ciągi i ważne informacje w tych obiektach nie zostaną przechwycone, co utrudnia diagnozę, jeśli nie jest niemożliwe. Zamiast tego można przekierować tekst błędu (§7.12) i zapisać obiekt błędu w zmiennej, jak w $Error1 = command 2>&1.

Zmienna automatyczna $Error zawiera kolekcję rekordów błędów reprezentujących ostatnie błędy, a ostatni błąd znajduje się w $Error[0]. Ta kolekcja jest przechowywana w buforze, tak aby stare rekordy zostały odrzucone w miarę dodawania nowych rekordów. Zmienna automatyczna $MaximumErrorCount kontroluje liczbę rekordów, które mogą być przechowywane.

$Error zawiera wszystkie błędy, zebrane z wszystkich poleceń w jednej kolekcji. Aby zebrać błędy z określonego polecenia, użyj wspólnego parametru ErrorVariable, który umożliwia określenie zmiennej zdefiniowanej przez użytkownika w celu przechowywania kolekcji.

3.13 Potoki

Rurociąg to seria jednego lub więcej poleceń, z których każde jest oddzielone operatorem | (U+007C). Każde polecenie odbiera dane wejściowe od poprzednika i zapisuje dane wyjściowe do jego następcy. Jeśli dane wyjściowe na końcu potoku nie zostaną odrzucone lub przekierowane do pliku, zostaną wysłane do środowiska hosta, które może zdecydować się na zapisanie ich do standardowego wyjścia. Polecenia w potoku mogą również otrzymywać dane wejściowe z parametrów. Rozważmy na przykład następujące użycie poleceń Get-ChildItem, Sort-Objecti Process-File, które tworzą listę nazw plików w danym katalogu systemu plików, posortuj zestaw rekordów tekstowych i przeprowadź pewne przetwarzanie odpowiednio na rekordzie tekstowym:

Get-ChildItem
Get-ChildItem E:*.txt | Sort-Object -CaseSensitive | Process-File >results.txt

W pierwszym przypadku Get-ChildItem tworzy kolekcję nazw plików w katalogu bieżącym/domyślnym. Ta kolekcja jest wysyłana do środowiska hosta, które domyślnie zapisuje wartość każdego elementu do standardowych danych wyjściowych.

W drugim przypadku Get-ChildItem tworzy kolekcję nazw plików w określonym katalogu przy użyciu argumentu E:*.txt. Ta kolekcja jest zapisywana do polecenia Sort-Object, które domyślnie sortuje je w kolejności rosnącej, uwzględniając wielkość liter (dzięki argumentowi CaseSensitive). Wynikowa kolekcja jest następnie zapisywana w poleceniu Process-File, co wykonuje pewne (nieznane) przetwarzanie. Dane wyjściowe tego polecenia są następnie przekierowywane do pliku results.txt.

Jeśli polecenie zapisuje pojedynczy obiekt, jego następca otrzymuje ten obiekt, a następnie kończy działanie po zapisaniu własnych obiektów do swojego następcy. Jeśli jednak polecenie zapisuje wiele obiektów, są one dostarczane pojedynczo do następnika polecenia, które wykonuje raz na obiekt. To zachowanie jest nazywane streamingiem. W przetwarzaniu strumienia obiekty są zapisywane wzdłuż potoku, gdy tylko staną się dostępne, a nie po utworzeniu całej kolekcji.

Podczas przetwarzania kolekcji można napisać polecenie, aby można było wykonać specjalne przetwarzanie przed elementem początkowym i po ostatnim elemercie.

3.14 Moduły

Moduł to samodzielna jednostka wielokrotnego użytku, która umożliwia partycjonowanie, organizowanie i abstrakcję kodu programu PowerShell. Moduł może zawierać polecenia (takie jak polecenia cmdlet i funkcje) oraz elementy (takie jak zmienne i aliasy), które mogą być używane jako pojedyncza jednostka.

Po utworzeniu modułu należy go zaimportować do sesji, zanim polecenia i elementy w nim będą mogły być używane. Po zaimportowaniu polecenia i elementy zachowują się tak, jakby były zdefiniowane lokalnie. Moduł jest importowany jawnie za pomocą polecenia Import-Module. Moduł może być również importowany automatycznie zgodnie z definicją implementacji.

Typ obiektu reprezentującego moduł został opisany w §4.5.12.

Moduły zostały szczegółowo omówione w §11.

3.15 Wyrażenia wieloznaczne

Wyrażenie wieloznaczne może zawierać zero lub więcej z następujących elementów:

Pierwiastek Opis
Znak inny niż *, ?, lub [ Pasuje do tego jednego znaku
* Dopasuje zero lub więcej znaków. Aby dopasować znak *, użyj znaku [*].
? Pasuje do dowolnego znaku. Aby dopasować ? znak, użyj znaku [?].
zestaw

Dopasuje dowolny znak z zestawu , który nie może być pusty.

Jeśli zestaw zaczyna się od ], ten prawy nawias kwadratowy jest uznawany za część zestawu , a następny prawy nawias kwadratowy kończy zestaw; w przeciwnym razie pierwszy prawy nawias kwadratowy kończy zestaw.

Jeśli zestaw rozpoczyna się lub kończy znakiem myślnika-minus, ten myślnik-minus jest uważany za część zestawu . W przeciwnym razie wskazuje on zakres kolejnych punktów kodu Unicode, gdzie znaki po obu jego stronach pełnią rolę ograniczników tego zakresu. Na przykład A-Z wskazuje 26 wielkich liter w języku angielskim, a 0–9 oznacza 10 cyfr dziesiętnych.

Notatka

Więcej informacji można znaleźć w The Open Group Base Specifications: Pattern Matching", IEEE Std 1003.1, 2004 Edition.. Jednak w programie PowerShell znakiem escape jest "backtick", a nie ukośnik odwrotny.

3.16 Wyrażenia regularne

Wyrażenie regularne może zawierać zero lub więcej z następujących elementów:

Pierwiastek Opis
Znak inny niż ., [, ^, *, $lub \ Pasuje do tego jednego znaku
. Pasuje do dowolnego znaku. Aby dopasować element do czegoś. znak, użyj \..
zestaw
[^ustawić]

Forma [set] pasuje do dowolnego znaku z zestawu . Wyrażenie [^zbiór] nie odpowiada żadnym znakom z zestawu . zestaw nie może być pusty.

Jeśli zestaw zaczyna się od ] lub ^], to prawy nawias kwadratowy uważa się za część zestawu , a następny prawy nawias kwadratowy kończy zestaw; w przeciwnym razie pierwszy prawy nawias kwadratowy kończy zestaw.

Jeśli zestaw zaczyna się od - lub ^-, lub kończy się na -, to ten łącznik minus jest traktowany jako część zestawu ; w przeciwnym razie wskazuje na zakres kolejnych punktów kodu Unicode, przy czym znaki po obu stronach znaku łącznika minus są ogranicznikami przedziału łącznie. Na przykład A-Z wskazuje 26 wielkich liter w języku angielskim, a 0–9 oznacza 10 cyfr dziesiętnych.

* Dopasowuje zero lub więcej wystąpień poprzedniego elementu.
+ Pasuje do jednego z większej liczby wystąpień poprzedniego elementu.
? Pasuje do zera lub jednego wystąpienia poprzedniego elementu.
^ Pasuje na początku ciągu. Aby dopasować znak ^, użyj \^.
$ Pasuje na końcu ciągu. Aby dopasować znak $, użyj $.
\ c Unika znaku c, więc nie jest rozpoznawany jako element wyrażenia regularnego.

Windows PowerShell: klasy znaków dostępne w wyrażeniach regularnych programu Microsoft .NET Framework są obsługiwane w następujący sposób:

Pierwiastek Opis
\p{name} Pasuje do dowolnego znaku w nazwanej klasie znaków określonej przez nazwę. Obsługiwane nazwy to grupy Unicode i zakresy bloków, takie jak Ll, Nd, Z, IsGreek i IsBoxDrawing.
\P{name} Dopasowuje tekst niewchodzący w skład grup i zakresów bloków określonych w nazwie .
\w Pasuje do dowolnego znaku wyrazu. Odpowiednik kategorii znaków Unicode [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}]. Jeśli zachowanie zgodne ze standardem ECMAScript jest określone z opcją ECMAScript, \w jest odpowiednikiem [a-zA-Z_0-9].
\W Pasuje do dowolnego znaku niebędącego częścią słowa. Odpowiednik kategorii Unicode [\^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}].
\s Pasuje do dowolnego znaku białej spacji. Odpowiednik kategorii znaków Unicode [\f\n\r\t\v\x85\p{Z}].
\S Dopasowuje dowolny znak inny niż biały znak. Odpowiednik kategorii znaków Unicode [\^\f\n\r\t\v\x85\p{Z}].
\d Dopasowuje dowolną cyfrę dziesiętną. Odpowiednik \p{Nd} dla Unicode i [0-9] dla zachowań non-Unicode.
\D Dopasuje dowolny znak niebędący cyfrą. Odpowiednik \P{Nd} dla Unicode i [\^0-9] dla zachowań non-Unicode.

Kwantyfikatory dostępne w wyrażeniach regularnych programu Microsoft .NET Framework są obsługiwane w następujący sposób:

Pierwiastek Opis
* Określa zero lub więcej dopasowań; na przykład \w* lub (abc)*. są równoważne z {0,}.
+ Dopasowuje powtarzające się wystąpienia znaków poprzedzających.
? Określa zero lub jedno dopasowanie; na przykład \w? lub (abc)?. Odpowiednik {0,1}.
{n} Określa dokładnie n dopasowań; na przykład (pizza){2}.
{n,} Określa co najmniej n dopasowania; na przykład (abc){2,}.
{n,m} Określa co najmniej n, ale nie więcej niż m, pasuje.