tentang_Menggunakan

Deskripsi singkat

Memungkinkan Anda menunjukkan namespace mana yang digunakan dalam sesi.

Deskripsi panjang

Pernyataan ini using memungkinkan Anda menentukan namespace mana yang digunakan dalam sesi. Menambahkan namespace 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 tidak using boleh disamakan dengan pengubah cakupan using: untuk variabel. Untuk informasi selengkapnya, lihat about_Remote_Variables.

Sintaks namespace

Untuk menentukan namespace .NET dari mana akan menyelesaikan jenis:

using namespace <.NET-namespace>

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

Sintaks modul

Untuk memuat kelas 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 berisi pernyataan penggunaan.

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

Spesifikasi modul adalah tabel hash yang memiliki kunci berikut.

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

Pernyataan mengimpor using module kelas dari modul akar (ModuleToProcess) dari modul skrip atau modul biner. Itu tidak secara konsisten mengimpor kelas yang ditentukan dalam modul berlapis atau kelas yang ditentukan dalam skrip yang bersumber titik ke dalam modul. Kelas yang Anda inginkan tersedia untuk pengguna di luar modul harus ditentukan dalam modul root.

Selama pengembangan modul skrip, adalah umum untuk membuat perubahan pada kode kemudian memuat versi baru modul menggunakan Import-Module 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 yang diperbarui.

Untuk memastikan bahwa Anda menjalankan versi terbaru, Anda harus membongkar modul menggunakan Remove-Module cmdlet. Remove-Module menghapus modul root, semua modul berlapis, dan kelas apa pun yang ditentukan dalam modul. Kemudian Anda dapat memuat ulang modul dan kelas menggunakan Import-Module dan pernyataan using module .

Sintaks rakitan

Untuk memuat jenis pra-muat dari rakitan .NET:

using assembly <.NET-assembly-path>

Memuat rakitan memuat jenis .NET dari rakitan tersebut ke dalam skrip pada waktu penguraian. Ini memungkinkan Anda membuat kelas PowerShell baru yang menggunakan jenis dari rakitan yang dimuat sebelumnya.

Jika Anda tidak membuat kelas PowerShell baru, gunakan cmdlet sebagai Add-Type gantinya. Untuk informasi selengkapnya, lihat Add-Type.

Contoh

Contoh 1 - Menambahkan namespace untuk resolusi typename

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

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

Contoh 2 - Muat kelas dari modul skrip

Dalam contoh ini, kami memiliki modul skrip PowerShell bernama CardGames yang mendefinisikan kelas berikut:

  • Permainan Kartu.Dek
  • Permainan Kartu.Kartu

Import-Module dan pernyataan #requires 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
using namespace CardGames

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

Contoh 3 - Memuat kelas dari rakitan

Contoh ini memuat rakitan sehingga kelasnya dapat digunakan untuk membuat kelas PowerShell baru. Skrip berikut membuat kelas PowerShell baru yang berasal dari kelas 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