about_Using

Deskripsi singkat

Memungkinkan Anda menentukan namespace layanan yang akan digunakan dalam sesi.

Deskripsi panjang

Pernyataan ini using memungkinkan Anda menentukan namespace layanan untuk digunakan dalam sesi. Menambahkan namespace layanan menyederhanakan penggunaan kelas dan anggota .NET dan memungkinkan Anda mengimpor kelas dari modul dan rakitan skrip.

Pernyataan using harus datang sebelum pernyataan lain dalam skrip atau modul. Tidak ada pernyataan yang tidak berkomentar yang dapat mendahuluinya, termasuk parameter.

Pernyataan using tidak boleh berisi variabel apa pun.

Pernyataan using tidak sama dengan pengubah using: cakupan untuk variabel. Untuk informasi selengkapnya, lihat about_Remote_Variables.

Sintaks namespace

Untuk mengatasi jenis dari namespace .NET:

using namespace <.NET-namespace>

Menentukan namespace membuatnya lebih mudah untuk mereferensikan jenis dengan nama pendeknya.

Contoh - Menambahkan namespace untuk resolusi nama jenis

Skrip berikut mendapatkan hash kriptografi untuk string "Halo Dunia".

Perhatikan bagaimana using namespace System.Text dan using namespace System.IO menyederhanakan referensi ke [UnicodeEncoding] dalam System.Text dan [Stream][MemoryStream] di 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()

Sintaks modul

Untuk memuat kelas dan enumerasi dari modul PowerShell:

using module <module-name>

Nilai <module-name> dapat berupa nama modul, spesifikasi modul lengkap, atau jalur ke file modul.

Ketika <module-name> adalah jalur, jalur dapat sepenuhnya memenuhi syarat atau relatif. Jalur relatif diselesaikan relatif terhadap skrip yang memiliki using pernyataan .

Ketika <module-name> adalah spesifikasi nama atau modul, PowerShell mencari PSModulePath untuk modul yang ditentukan.

Spesifikasi modul adalah hashtable yang memiliki kunci berikut.

  • ModuleName - Diperlukan Menentukan nama modul.
  • GUID - Opsional Menentukan GUID modul.
  • Diperlukan juga untuk menentukan setidaknya salah satu dari tiga kunci di bawah ini.
    • ModuleVersion - Menentukan versi minimum modul yang dapat diterima.
    • MaximumVersion - Menentukan versi maksimum modul yang dapat diterima.
    • RequiredVersion - Menentukan versi modul yang tepat dan diperlukan. Ini tidak dapat digunakan dengan kunci Versi lainnya.

Import-Module#requires dan pernyataan hanya mengimpor fungsi modul, alias, dan variabel, seperti yang didefinisikan oleh modul. Kelas dan enumerasi tidak diimpor.

Pernyataan mengimpor using module kelas dan enumerasi dari modul akar (ModuleToProcess) modul skrip atau modul biner. Ini tidak secara konsisten mengimpor kelas atau enumerasi yang ditentukan dalam modul berlapis atau dalam skrip yang bersumber titik ke dalam modul akar. Tentukan kelas dan enumerasi yang ingin Anda sediakan untuk pengguna di luar modul langsung di modul akar.

Selama pengembangan modul skrip, umumnya untuk membuat perubahan pada kode lalu memuat versi baru modul menggunakan Import-Module dengan parameter Force . Ini hanya berfungsi untuk perubahan pada fungsi dalam modul akar. Import-Module tidak memuat ulang modul berlapis apa pun. Selain itu, tidak ada cara untuk memuat kelas atau enumerasi yang diperbarui.

Untuk memastikan bahwa Anda menjalankan versi terbaru, Anda harus memulai sesi baru. Kelas dan enumerasi yang ditentukan di PowerShell dan diimpor dengan using pernyataan tidak dapat dibongkar.

Contoh - Memuat kelas dari modul skrip

Dalam contoh ini, modul skrip PowerShell bernama CardGames menentukan kelas berikut:

  • Dek
  • Kartu

Import-Module#requires dan pernyataan hanya mengimpor fungsi modul, alias, dan variabel, seperti yang didefinisikan oleh modul. Kelas tidak diimpor. Perintah using module mengimpor modul dan juga memuat definisi kelas.

using module CardGames

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

Sintaks rakitan

Sintaks berikut memuat jenis .NET dari rakitan ke dalam skrip di awal eksekusi. Anda harus menggunakan jalur yang sepenuhnya memenuhi syarat ke file assembly.

using assembly <.NET-assembly-path>

Pernyataan using assembly ini mirip dengan menggunakan Add-Type cmdlet. Namun, Add-Type cmdlet menambahkan jenis pada saat dijalankan Add-Type , bukan pada awal eksekusi skrip. Untuk informasi selengkapnya, lihat Add-Type.

Contoh - Memuat jenis dari rakitan

Contoh ini memuat rakitan sehingga kelasnya dapat digunakan saat memproses data. Skrip berikut mengonversi data menjadi format YAML.

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