about_Using

Rövid leírás

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

Hosszú leírás

Az 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.

Az using utasításoknak a szkriptben vagy modulban lévő bármely más 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.

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

Az using utasítás nem ugyanaz, mint a using: változók hatókör-módosítója. További információ: 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 ""Helló világ!" alkalmazás" sztring titkosítási kivonatát.

Figyelje meg, using namespace System.Textusing namespace System.IO hogyan és hogyan egyszerűsítheti a be- és [MemoryStream][Stream] be System.IOmutató hivatkozásokat [UnicodeEncoding]System.Text.

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>

Ennek értéke <module-name> lehet egy modul neve, egy teljes modul specifikációja 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 az utasítást tartalmazó using szkripthez képest feloldható.

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

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

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

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 és az enumerálások nincsenek importálva.

Az 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 Force paraméterrelImport-Module. 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 utasítással using importált osztályok és enumerálások 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 az #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>

Az using assembly utasítás hasonló a Add-Type parancsmag használatához. A parancsmag azonban nem Add-Type a szkript végrehajtásakor, hanem a végrehajtás időpontjában Add-Type 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