Udostępnij za pośrednictwem


about_Using

Krótki opis

Umożliwia wskazanie, które przestrzenie nazw są używane w sesji.

Długi opis

Instrukcja using umożliwia określenie, które przestrzenie nazw są używane w sesji. Dodawanie przestrzeni nazw upraszcza użycie klas i składowych platformy .NET i umożliwia importowanie klas z modułów skryptów i zestawów.

Instrukcje using muszą występować 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 powinna być mylona z modyfikatorem using: zakresu dla zmiennych. Aby uzyskać więcej informacji, zobacz about_Remote_Variables.

Składnia przestrzeni nazw

Aby określić przestrzenie nazw platformy .NET, z których mają być rozpoznawane typy:

using namespace <.NET-namespace>

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

Składnia modułu

Aby załadować klasy 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 zawierającego instrukcję using.

Jeśli <module-name> jest to nazwa lub specyfikacja modułu, program PowerShell przeszukuje element PSModulePath dla określonego modułu.

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

  • ModuleName - Wymagane Określa nazwę modułu.
  • GUID - Opcjonalne Określa identyfikator GUID modułu.
  • Wymagane jest również określenie jednego z trzech poniższych kluczy. Tych kluczy nie można używać razem.
    • ModuleVersion - Określa minimalną akceptowalną wersję modułu.
    • RequiredVersion - Określa dokładną, wymaganą wersję modułu.
    • MaximumVersion - Określa maksymalną akceptowalną wersję modułu.

Instrukcja using module importuje klasy z modułu głównego (ModuleToProcess) modułu skryptu lub modułu binarnego. Nie powoduje spójnego importowania klas zdefiniowanych w zagnieżdżonych modułach lub klasach zdefiniowanych w skryptach, które są dot-source do modułu. Klasy, które mają być dostępne dla użytkowników spoza modułu, powinny być zdefiniowane w module głównym.

Podczas opracowywania modułu skryptu często wprowadza się zmiany w kodzie, a następnie ładuje 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.

Aby upewnić się, że używasz najnowszej wersji, należy zwolnić moduł przy użyciu Remove-Module polecenia cmdlet . Remove-Module Usuwa moduł główny, wszystkie zagnieżdżone moduły i wszystkie klasy zdefiniowane w modułach. Następnie możesz ponownie załadować moduł i klasy przy użyciu instrukcji Import-Module i .using module

Składnia zestawu

Aby wstępnie załadować typy z zestawu .NET:

using assembly <.NET-assembly-path>

Ładowanie zestawu wstępnie ładuje typy .NET z tego zestawu do skryptu w czasie analizy. Umożliwia to tworzenie nowych klas programu PowerShell, które używają typów ze wstępnie załadowanego zestawu.

Jeśli nie tworzysz nowych klas programu PowerShell, zamiast tego użyj Add-Type polecenia cmdlet . Aby uzyskać więcej informacji, zobacz Add-Type (Dodawanie typu).

Przykłady

Przykład 1 — dodawanie przestrzeni nazw dla rozpoznawania nazw typów

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

Zwróć uwagę na to, jak metody using namespace System.Text i using namespace System.IO upraszczają odwołania do [UnicodeEncoding] poleceń w System.Text elementach i [Stream] i w [MemoryStream] pliku System.IO.

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)
$hashfromstream = Get-FileHash -InputStream $memorystream `
  -Algorithm $algorithm
$hashfromstream.Hash.ToString()

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

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

  • CardGames.Deck
  • CardGames.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
using namespace CardGames

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

Przykład 3 — ładowanie klas z zestawu

W tym przykładzie ładuje zestaw, aby można było użyć jego klas do utworzenia nowych klas programu PowerShell. Poniższy skrypt tworzy nową klasę programu PowerShell, która pochodzi z klasy DirectoryContext .

using assembly 'C:\Program Files\PowerShell\7\System.DirectoryServices.dll'
using namespace System.DirectoryServices.ActiveDirectory

class myDirectoryClass : System.DirectoryServices.ActiveDirectory.DirectoryContext
{

  [DirectoryContext]$domain

  myDirectoryClass([DirectoryContextType]$ctx) : base($ctx)
  {
    $this.domain = [DirectoryContext]::new([DirectoryContextType]$ctx)
  }

}

$myDomain = [myDirectoryClass]::new([DirectoryContextType]::Domain)
$myDomain
domain                                                    Name UserName ContextType
------                                                    ---- -------- -----------
System.DirectoryServices.ActiveDirectory.DirectoryContext                    Domain