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


about_Használat

Rövid leírás

Lehetővé teszi a munkamenetben használandó névterek megadását.

Hosszú leírás

A using utasítás lehetővé teszi a munkamenetben használni kívánt névterek megadását. A névterek hozzáadása leegyszerűsíti a .NET-osztályok és -tagok használatát, és lehetővé teszi az 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.

A using utasítás nem ugyanaz, mint a változók using: hatókör-módosítója. A további információkért lásd: about_Remote_Variables.

Névtér szintaxisa

Típusok feloldása .NET-névtérből:

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.

Példa – Névterek hozzáadása a típusnévfeloldáshoz

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

Figyelje meg, hogy a using namespace System.Text és a using namespace System.IO hogyan egyszerűsítik a [UnicodeEncoding]System.Text, [Stream] és [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)
$getFileHashSplat = @{
    InputStream = $memoryStream
    Algorithm   = $algorithm
}
$hashFromStream = Get-FileHash @getFileHashSplat
$hashFromStream.Hash.ToString()

Modulszintaxis

Osztályok és számbavételek 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 a using utasítással rendelkező szkripthez képest oldható fel.

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

A modulspecifikáció egy kivonatoló, amely a következő kulcsokkal rendelkezik.

  • ModuleName - Kötelező A modul nevét adja meg.
  • GUID - Nem kötelező A modul GUID azonosítóját adja meg.
  • Emellett Kötelező megadni az alábbi három kulcs közül legalább egyet.
    • ModuleVersion – A modul minimálisan elfogadható verzióját adja meg.
    • MaximumVersion – A modul maximálisan elfogadható verzióját adja meg.
    • RequiredVersion – A modul pontos, kötelező verzióját adja meg. Ez nem használható a többi Verzió billentyűvel.

Import-Module és a #requires utasítás csak a modul által meghatározott modulfüggvényeket, aliasokat és változókat importálja. Az osztályok és az enumerálások nincsenek importálva.

A using module utasítás osztályokat és számbavételeket importál egy szkriptmodul vagy bináris modul gyökérmoduljából (ModuleToProcess). Nem importálja következetesen a beágyazott modulokban vagy szkriptekben definiált osztályokat vagy enumerációkat a gyökérmodulba. Definiálja azokat az osztályokat és enumerálásokat, amelyeket a modulon kívüli felhasználók közvetlenül a gyökérmodulban szeretnének elérhetővé tenni.

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

Ahhoz, hogy a legújabb verziót futtassa, új munkamenetet kell indítania. A PowerShellben definiált és using utasítással importált osztályok és enumerációk nem távolíthatók el.

Példa – Osztályok betöltése szkriptmodulból

Ebben a példában egy CardGames nevű PowerShell-szkriptmodul a következő osztályokat határozza meg:

  • Fedélzet
  • kártya

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

using module CardGames

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

Szerelvény szintaxisa

Az alábbi szintaxis betölti a .NET-típusokat egy szerelvényből egy szkriptbe a végrehajtás elején. A szerelvényfájl teljes elérési útját kell használnia.

using assembly <.NET-assembly-path>

A using assembly utasítás a Add-Type parancsmaghoz hasonló. A Add-Type parancsmag azonban nem a szkript végrehajtásakor, hanem a Add-Type végrehajtásakor adja hozzá a típust. További információ: Add-Type.

Példa – Szerelvényből származó betöltési típusok

Ez a példa betölt egy szerelvényt, hogy az osztályai felhasználhatók legyenek az adatok feldolgozásakor. Az alábbi szkript YAML formátumúvá alakítja az adatokat.

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