Megosztás a következőn keresztül:


about_Használat

Rövid leírás

Lehetővé teszi, hogy jelezze, mely névtereket használja a munkamenet.

Hosszú leírás

Az using utasítás lehetővé teszi annak megadását, hogy mely névtereket használja a rendszer a munkamenetben. A névterek hozzáadása leegyszerűsíti a .NET osztályok és tagok használatát, és lehetővé teszi osztályok importálását szkriptmodulokból és szerelvényekből.

A using utasításoknak a szkriptben vagy modulban lévő többi utasítás előtt kell lenniük. A nem kívánt utasítás nem előzheti meg, beleértve a paramétereket is.

A using utasítás nem tartalmazhat változókat.

Az using utasítást nem szabad összetéveszteni a using: változók hatókör-módosítójával. A további információkért lásd: about_Remote_Variables.

Névtér szintaxisa

NET-névterek megadása, amelyekből a típusokat fel kell oldani:

using namespace <.NET-namespace>

A névtér megadása megkönnyíti a típusok rövid nevük alapján történő hivatkozását.

Modulszintaxis

Osztályok betöltése PowerShell-modulból:

using module <module-name>

A <module-name> értéke lehet modulnév, teljes modulspecifikáció vagy egy modulfájl elérési útja.

Ha <module-name> egy elérési út, az elérési út teljes mértékben minősített vagy relatív lehet. A relatív elérési út feloldása a használandó utasítást tartalmazó szkripthez képest történik.

Ha <module-name> egy név vagy modul specifikációja, a PowerShell megkeresi a megadott modul PSModulePath.

A modulspecifikációk olyan kivonattáblák, amelyek a következő kulcsokat tartalmazzák.

  • ModuleName - Kötelező A modul nevét adja meg.
  • GUID - Nem kötelező A modul GUID azonosítóját adja meg.
  • Az alábbi három kulcs egyikét is meg kell adnia. Ezek a billentyűk nem használhatók együtt.
    • ModuleVersion – A modul minimálisan elfogadható verzióját adja meg.
    • RequiredVersion – A modul pontos, kötelező verzióját adja meg.
    • MaximumVersion – A modul maximálisan elfogadható verzióját adja meg.

Az using module utasítás osztályokat importál egy szkriptmodul vagy bináris modul gyökérmoduljából (ModuleToProcess). Nem importál konzisztensen a beágyazott modulokban definiált osztályokat vagy a pontforrásból származó szkriptekben definiált osztályokat a modulba. Azokat az osztályokat, amelyeket a modulon kívüli felhasználók számára elérhetővé szeretne tenni, a gyökérmodulban kell meghatározni.

A szkriptmodulok fejlesztése során gyakori, hogy módosítja a kódot, majd betölti a modul Import-Module új verzióját a Force paraméterrel. Ez csak a gyökérmodul függvényeinek módosítására használható. Import-Module nem tölti be újra a beágyazott modulokat. Ezenkívül nincs mód frissített osztályok betöltésére.

Annak érdekében, hogy a legújabb verziót fussa, el kell távolítania a modult a Remove-Module parancsmag használatával. Remove-Module Eltávolítja a gyökérmodult, az összes beágyazott modult és a modulokban definiált osztályokat. Ezután újratöltheti a modult és az osztályokat az utasítás használatával Import-Moduleusing module .

Szerelvény szintaxisa

Típusok előzetes betöltése egy .NET szerelvényből:

using assembly <.NET-assembly-path>

A szerelvény betöltése előre betölti a .NET típusokat a szerelvényből egy szkriptbe az elemzéskor. Ez lehetővé teszi olyan új PowerShell-osztályok létrehozását, amelyek az előre betöltött szerelvény típusait használják.

Ha nem hoz létre új PowerShell-osztályokat, használja inkább a Add-Type parancsmagot. További információ: Add-Type.

Példák

1. példa – Névterek hozzáadása a typename feloldásához

A következő szkript lekéri a "Hello World" sztring titkosítási kivonatát.

Figyelje meg, hogy a using namespace System.Text és egyszerűsítse a hivatkozásokat az using namespace System.IO in [UnicodeEncoding] és System.Text a .[Stream][MemoryStream]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()

2. példa – Osztályok betöltése szkriptmodulból

Ebben a példában egy CardGames nevű PowerShell-szkriptmodullal rendelkezünk, amely a következő osztályokat határozza meg:

  • CardGames.Deck
  • CardGames.Card

Import-Module és az #requires utasítás csak a modul által meghatározott modulfüggvényeket, aliasokat és változókat importálja. Az osztályok nem lesznek importálva. A using module parancs importálja a modult, és betölti az osztálydefiníciókat is.

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)

3. példa – Osztályok betöltése egy szerelvényből

Ez a példa betölt egy szerelvényt, hogy az osztályai új PowerShell-osztályok létrehozásához használhatók. Az alábbi szkript létrehoz egy új PowerShell-osztályt, amely a DirectoryContext osztályból származik.

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