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 perintah otomatis menganalisis setiap modul untuk menentukan perintah mana yang diekspor oleh modul, dan analisis ini bisa berbiaya tinggi. 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.

Pedoman

  • Dalam manifes modul, jangan gunakan kartubebas di entri AliasesToExport, CmdletsToExport, dan FunctionsToExport.

  • Jika modul tidak mengekspor perintah dari jenis tertentu, tentukan ini secara eksplisit dalam manifes dengan menentukan @(). Entri yang hilang atau $null setara dengan menentukan kartu bebas *.

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 sekitar sepuluh kali lebih lambat dibandingkan modul biner.

Modul biner memuat paling cepat karena telah dikompilasi sebelumnya dan dapat menggunakan NGen untuk melakukan kompilasi JIT sekali per mesin.

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.