Bagikan melalui


Pertimbangan penulisan modul PowerShell

Dokumen ini mencakup beberapa panduan yang terkait dengan bagaimana modul ditulis untuk performa terbaik.

Penulisan Manifes Modul

Manifes modul yang tidak menggunakan panduan berikut dapat berdampak nyata pada performa PowerShell umum meskipun modul tidak digunakan dalam sesi.

Penemuan otomatis perintah menganalisis setiap modul untuk menentukan perintah mana yang diekspor modul dan analisis ini bisa mahal. Hasil analisis modul di-cache per pengguna, tetapi cache tidak tersedia pada eksekusi pertama, yang merupakan skenario umum dengan kontainer. Selama analisis modul, jika perintah yang diekspor dapat sepenuhnya ditentukan dari manifes, analisis modul yang lebih mahal dapat dihindari.

Panduan

  • Dalam manifes modul, jangan gunakan kartubebas dalam AliasesToExportentri , , CmdletsToExportdan FunctionsToExport .

  • Jika modul tidak mengekspor perintah dari jenis tertentu, tentukan ini secara eksplisit dalam manifes dengan menentukan @(). Hilang atau $null entri setara dengan menentukan wildcard *.

Berikut ini harus dihindari jika memungkinkan:

@{
    FunctionsToExport = '*'

    # Also avoid omitting an entry, it's equivalent to using a wildcard
    # CmdletsToExport = '*'
    # AliasesToExport = '*'
}

Sebagai gantinya, gunakan:

@{
    FunctionsToExport = 'Format-Hex', 'Format-Octal'
    CmdletsToExport = @()  # Specify an empty array, not $null
    AliasesToExport = @()  # Also ensure all three entries are present
}

Hindari CDXML

Saat memutuskan cara mengimplementasikan modul Anda, ada tiga pilihan utama:

  • Biner (biasanya C#)
  • Skrip (PowerShell)
  • CDXML (file XML yang membungkus CIM)

Jika kecepatan memuat modul Anda penting, CDXML kira-kira urutan besarnya lebih lambat daripada modul biner.

Modul biner memuat yang tercepat karena dikompilasi sebelumnya dan dapat menggunakan NGen untuk kompilasi JIT sekali per komputer.

Modul skrip biasanya memuat sedikit lebih lambat daripada modul biner karena PowerShell harus mengurai skrip sebelum mengkompilasi dan mengeksekusinya.

Modul CDXML biasanya jauh lebih lambat daripada modul skrip karena harus terlebih dahulu mengurai file XML yang kemudian menghasilkan cukup sedikit skrip PowerShell yang kemudian diurai dan dikompilasi.