Udostępnij za pośrednictwem


about_Using

Krótki opis

Umożliwia określenie przestrzeni nazw do użycia w sesji.

Długi opis

Instrukcja using umożliwia określenie przestrzeni nazw do użycia w sesji. Dodawanie przestrzeni nazw upraszcza korzystanie z klas i elementów członkowskich platformy .NET i umożliwia importowanie klas z modułów skryptów i zestawów.

Instrukcje using muszą znajdować się przed innymi instrukcjami w skrypcie lub module. Nie można poprzedzić instrukcji bez komentarza, w tym parametrów.

Instrukcja using nie może zawierać żadnych zmiennych.

Instrukcja using nie jest taka sama jak using: modyfikator zakresu dla zmiennych. Aby uzyskać więcej informacji, zobacz about_Remote_Variables.

Składnia przestrzeni nazw

Aby rozpoznać typy z przestrzeni nazw platformy .NET:

using namespace <.NET-namespace>

Określenie przestrzeni nazw ułatwia odwołowanie się do typów według ich krótkich nazw.

Przykład — dodawanie przestrzeni nazw dla rozpoznawania nazwy typu

Poniższy skrypt pobiera skrót kryptograficzny dla ciągu "Hello World".

Zwróć uwagę na to, jak i using namespace System.Text using namespace System.IO uprościć odwołania do [UnicodeEncoding] w System.Text elementach i [Stream] i [MemoryStream] w System.IOsystemie .

using namespace System.Text
using namespace System.IO

[string]$string = "Hello World"
## Valid values are "SHA1", "SHA256", "SHA384", "SHA512", "MD5"
[string]$algorithm = "SHA256"

[byte[]]$stringBytes = [UnicodeEncoding]::Unicode.GetBytes($string)

[Stream]$memoryStream = [MemoryStream]::new($stringBytes)
$getFileHashSplat = @{
    InputStream = $memoryStream
    Algorithm   = $algorithm
}
$hashFromStream = Get-FileHash @getFileHashSplat
$hashFromStream.Hash.ToString()

Składnia modułu

Aby załadować klasy i wyliczenia z modułu programu PowerShell:

using module <module-name>

Wartość może być nazwą modułu <module-name> , pełną specyfikacją modułu lub ścieżką do pliku modułu.

Gdy <module-name> jest ścieżką, ścieżka może być w pełni kwalifikowana lub względna. Ścieżka względna jest rozpoznawana względem skryptu, który zawiera instrukcję using .

Gdy <module-name> jest nazwą lub specyfikacją modułu, program PowerShell przeszukuje moduł PSModulePath dla określonego modułu.

Specyfikacja modułu to tabela skrótu zawierająca następujące klucze.

  • ModuleName - Required Określa nazwę modułu.
  • GUID - Opcjonalnie Określa identyfikator GUID modułu.
  • Wymagane jest również określenie co najmniej jednego z trzech poniższych kluczy.
    • ModuleVersion - Określa minimalną akceptowalną wersję modułu.
    • MaximumVersion - Określa maksymalną akceptowalną wersję modułu.
    • RequiredVersion - Określa dokładną, wymaganą wersję modułu. Nie można tego używać z innymi kluczami wersji.

Import-Module i instrukcja #requires importuje tylko funkcje modułu, aliasy i zmienne, zgodnie z definicją w module. Klasy i wyliczenia nie są importowane.

Instrukcja using module importuje klasy i wyliczenia z modułu głównego (ModuleToProcess) modułu skryptu lub modułu binarnego. Nie importuje spójnie klas ani wyliczeń zdefiniowanych w zagnieżdżonych modułach ani w skryptach, które są dot-source do modułu głównego. Zdefiniuj klasy i wyliczenia, które mają być dostępne dla użytkowników spoza modułu bezpośrednio w module głównym.

Podczas opracowywania modułu skryptu często wprowadza się zmiany w kodzie, a następnie ładują nową wersję modułu przy użyciu Import-Module parametru Force . Działa to tylko w przypadku zmian funkcji w module głównym. Import-Module nie ładuje ponownie żadnych zagnieżdżonych modułów. Ponadto nie ma możliwości załadowania zaktualizowanych klas ani wyliczenia.

Aby upewnić się, że używasz najnowszej wersji, musisz uruchomić nową sesję. Nie można zwolnić klas i wyliczenia zdefiniowanych w programie PowerShell i zaimportowanych za pomocą using instrukcji.

Przykład — ładowanie klas z modułu skryptu

W tym przykładzie moduł skryptu programu PowerShell o nazwie CardGames definiuje następujące klasy:

  • Pokład
  • Card

Import-Module i instrukcja #requires importuje tylko funkcje modułu, aliasy i zmienne, zgodnie z definicją w module. Klasy nie są importowane. Polecenie using module importuje moduł, a także ładuje definicje klas.

using module CardGames

[Deck]$deck = [Deck]::new()
$deck.Shuffle()
[Card[]]$hand1 = $deck.Deal(5)
[Card[]]$hand2 = $deck.Deal(5)
[Card[]]$hand3 = $deck.Deal(5)

Składnia zestawu

Poniższa składnia ładuje typy .NET z zestawu do skryptu na początku wykonywania. Musisz użyć w pełni kwalifikowanej ścieżki do pliku zestawu.

using assembly <.NET-assembly-path>

Instrukcja jest podobna using assembly Add-Type do użycia polecenia cmdlet . Add-Type Jednak polecenie cmdlet dodaje typ w czasie Add-Type wykonywania, a nie na początku wykonywania skryptu. Aby uzyskać więcej informacji, zobacz Add-Type (Dodawanie typu).

Przykład — ładowanie typów z zestawu

W tym przykładzie ładuje zestaw, aby jego klasy mogły być używane podczas przetwarzania danych. Poniższy skrypt konwertuje dane na format YAML.

using assembly './YamlDotNet.dll'
using namespace YamlDotNet

$yamlSerializer = [Serialization.Serializer]::new()

$info = [ordered]@{
  Inventory = @(
    @{ Name = 'Apples' ; Count = 1234 }
    @{ Name = 'Bagels' ; Count = 5678 }
  )
  CheckedAt = [datetime]'2023-01-01T01:01:01'
}

$yamlSerializer.Serialize($info)
Inventory:
- Name: Apples
  Count: 1234
- Name: Bagels
  Count: 5678
CheckedAt: 2023-01-01T01:01:01.0000000