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