Condividi tramite


Considerazioni sulla creazione di moduli di PowerShell

Questo documento include alcune linee guida relative al modo in cui viene creato un modulo per ottenere prestazioni ottimali.

Creazione del manifesto del modulo

Un manifesto del modulo che non usa le linee guida seguenti può avere un impatto notevole sulle prestazioni generali di PowerShell anche se il modulo non viene usato in una sessione.

L'individuazione automatica dei comandi analizza ogni modulo per determinare quali comandi esportano il modulo e questa analisi può essere costosa. I risultati dell'analisi dei moduli vengono memorizzati nella cache per utente, ma la cache non è disponibile alla prima esecuzione, che è uno scenario tipico con contenitori. Durante l'analisi dei moduli, se i comandi esportati possono essere determinati completamente dal manifesto, è possibile evitare analisi più costose del modulo.

Linee guida

  • Nel manifesto del modulo non usare caratteri jolly nelle AliasesToExportvoci , CmdletsToExporte FunctionsToExport .

  • Se il modulo non esporta i comandi di un particolare tipo, specificare in modo esplicito nel manifesto specificando @(). Una voce o $null mancante equivale a specificare il carattere jolly *.

Dove possibile, è consigliabile evitare quanto segue:

@{
    FunctionsToExport = '*'

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

In alternativa:

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

Evitare CDXML

Quando si decide come implementare il modulo, sono disponibili tre opzioni principali:

  • Binario (in genere C#)
  • Script (PowerShell)
  • CDXML (un file XML che esegue il wrapping CIM)

Se la velocità di caricamento del modulo è importante, CDXML è approssimativamente un ordine di grandezza più lento rispetto a un modulo binario.

Un modulo binario carica il più veloce perché viene compilato in anticipo e può usare NGen per la compilazione JIT una volta per ogni computer.

Un modulo script carica in genere un po' più lentamente di un modulo binario perché PowerShell deve analizzare lo script prima di compilarlo ed eseguirlo.

Un modulo CDXML è in genere molto più lento di un modulo script perché deve prima analizzare un file XML che genera quindi un po' di script di PowerShell che viene quindi analizzato e compilato.