2015-06-16 21 views
5

Attualmente sto usando seguente struttura nel mio script:Impostare la modalità rigorosa in PowerShell per tutti i moduli

HighLevel.ps1 
    LowLevelModule1.psm1 
    LowLevelModule2.psm1 
    ... 

Ora, sto impostando la modalità rigorosa nel file di PS1 di ottenere almeno un certo tipo di sicurezza in fase di esecuzione . Sfortunatamente, cllaing Set-StrictMode -Version Latest abiliterà la modalità rigorosa solo per l'ambito corrente e tutti gli ambiti figlio (questo è in base alla progettazione Prova: https://technet.microsoft.com/en-us/library/hh849692.aspx).

Per quanto riguarda l'attuale architettura PS, la modifica della modalità rigorosa nel file ps1 modifica la configurazione del livello di script. Ma i moduli hanno il proprio ambito di script in modo che i moduli non ereditino le regole dei genitori.

Come soluzione temporanea, posso inserire Set-StrictMode in ogni file PSM1, ma non sembra l'approccio migliore perché non sarei in grado di dare una possibilità al client del mio modulo di decidere, attivare la modalità rigorosa o meno.

Lo stesso problema esiste per la configurazione $VerbosePreferences. Questa configurazione è anche abilitata per scope, quindi devo propagare queste informazioni attraverso i limiti del modulo un po 'come.

Qualche suggerimento su come modificare la modalità rigorosa e le preferenze dettagliate a livello globale?

P.S. La modifica del profilo $ per questo scopo non è un'opzione.

+1

Penso che l'impostazione '$ global: VerbosePreference' a livello globale dovrebbe funzionare per i moduli. Per quanto riguarda la modalità rigorosa, non è così. A proposito, ho aggiunto il problema della modalità rigorosa a [PowerShellTraps] (https://github.com/nightroman/PowerShellTraps), vedi * Strict-mode-is-not-propagated *. –

risposta

2

Se si tratta di moduli che si stanno scrivendo, suggerisco di impostare la modalità rigorosa desiderata all'interno del modulo. Si applicherà solo al codice all'interno del modulo, quindi l'impostazione per il codice al di fuori del modulo, impostato dal chiamante, è irrilevante.

Se questi sono moduli scritti da altri, quindi non si desidera modificare la modalità rigorosa (o la mancanza di esso) su quel codice, perché non è stato testato con la modalità rigorosa su e potrebbe interrompere in tal modo.

+0

Sto bene per cambiare la modalità rigorosa, ma hai qualche idea con $ VerbosePreferences? Questo è sicuramente che mi piacerebbe cambiare in un posto. –

+0

Qual è l'obiettivo? Se imposti '$ VerbosePreference' a (say)' 'Continue'', le funzioni esposte dal modulo agiranno come se le avessi chiamate con '-Verbose'. – briantist

+1

Sto provando ad attivare "logging" per tutti i miei moduli nello script di root ps1. Il problema è che quando la funzione dal modulo chiamerà la funzione da un altro modulo, la chiamerebbe senza il flag -Verbose. E per trasformare messaggi prolissi devo propagare questo flag su più chiamate tramite: -Verbose: ($ VerbosePreference -eq 'continua') o usando qualche altro trucco. –

Problemi correlati