ARGOMENTO about_Command_Precedence DESCRIZIONE BREVE Descrive la modalità in cui in Windows PowerShell viene determinato quale comando eseguire. DESCRIZIONE DETTAGLIATA In questo argomento viene illustrata la modalità in cui in Windows PowerShell viene determinato quale comando eseguire, in particolare quando una sessione contiene più di un comando con lo stesso nome. Viene inoltre illustrato come eseguire comandi che non vengono eseguiti per impostazione predefinita e come evitare i conflitti nome-comando nella sessione. PRECEDENZA DEI COMANDI Quando una sessione include comandi con lo stesso nome, in Windows PowerShell vengono utilizzate le regole seguenti per determinare quale comando eseguire. Queste regole diventano molto importanti quando si aggiungono alla sessione comandi da moduli, snap-in e altre sessioni. -- Se si specifica il percorso di un comando, Windows PowerShell esegue il comando nella posizione specificata dal percorso. Ad esempio, tramite il comando seguente viene eseguito lo script FindDocs.ps1 incluso nella directory C:\TechDocs: C:\TechDocs\FindDocs.ps1 Come funzionalità di sicurezza, Windows PowerShell non esegue comandi eseguibili (nativi), inclusi gli script di Windows PowerShell, a meno che il comando non si trovi in un percorso elencato nella variabile di ambiente Path ($env:path) o si specifichi il percorso del file di script. Per eseguire uno script che si trova nella directory corrente, specificare il percorso completo oppure digitare un punto (.) per rappresentarla. Ad esempio, per eseguire il file FindDocs.ps1 nella directory corrente, digitare: .\FindDocs.ps1 -- Se non si specifica un percorso, in Windows PowerShell viene utilizzato il seguente ordine di precedenza quando vengono eseguiti i comandi: 1. Alias 2. Function 3. Cmdlet 4. Comandi di Windows nativi Pertanto, se si digita "help", Windows PowerShell cerca innanzitutto un alias denominato "help", quindi una funzione denominata "Help" e infine un cmdlet denominato "Help". Verrà eseguito il primo elemento "help" trovato. Si supponga, ad esempio, di disporre di una funzione denominata Get-Map. Quindi, di aggiungere o importare un cmdlet denominato Get-Map. Per impostazione predefinita, Windows PowerShell esegue la funzione quando si digita "Get-Map". -- Quando la sessione contiene elementi dello stesso tipo con lo stesso nome, ad esempio due cmdlet con lo stesso nome, Windows PowerShell esegue l'elemento aggiunto più recentemente alla sessione. Ad esempio, si supponga di disporre di un cmdlet denominato Get-Date. Quindi, si importa un altro cmdlet denominato Get-Date. Quando si digita "Get-Date", Windows PowerShell esegue il cmdlet importato più recentemente per impostazione predefinita. ELEMENTI NASCOSTI E SOSTITUITI Come conseguenza di queste regole, gli elementi possono essere sostituiti o nascosti da elementi con lo stesso nome. -- Gli elementi vengono "nascosti" o "ombreggiati" se è ancora possibile accedere all'elemento originale, ad esempio indicando il nome dell'elemento con il nome di un modulo o di uno snap-in. Se si importa, ad esempio, una funzione con lo stesso nome di un cmdlet della sessione, il cmdlet viene nascosto (ma non sostituito) poiché è stato importato da uno snap-in o un modulo. -- Gli elementi vengono "sostituiti" o "sovrascritti" se non è più possibile accedere all'elemento originale. Se si importa, ad esempio, una variabile con lo stesso nome di una variabile della sessione, la variabile originale viene sostituita e non è più accessibile. Non è possibile qualificare una variabile con il nome di un modulo. Inoltre, se si digita una funzione nella riga di comando e si importa una funzione con lo stesso nome, la funzione originale viene sostituita e non è più accessibile. ESECUZIONE DI COMANDI NASCOSTI È possibile eseguire determinati comandi specificando le proprietà degli elementi che consentono di distinguere il comando dagli altri comandi che potrebbero avere lo stesso nome. È possibile utilizzare questo metodo per eseguire qualsiasi comando, ma è particolarmente utile per l'esecuzione di comandi nascosti. Utilizzare questo metodo come procedura consigliata durante la scrittura di script da distribuire poiché non è possibile stimare quali comandi potrebbero essere presenti nella sessione in cui è in esecuzione lo script. NOMI QUALIFICATI È possibile eseguire comandi importati da uno snap-in, un modulo o un'altra sessione di Windows PowerShell, indicando il nome del comando con il nome del modulo o lo snap-in in cui ha avuto origine. È possibile qualificare i comandi, ma non le variabili o gli alias. Ad esempio, se il cmdlet Get-Date dallo snap-in Microsoft.PowerShell.Utility è nascosto da un alias, una funzione o un cmdlet con lo stesso nome, è possibile eseguirlo utilizzando il nome qualificato come snap-in del cmdlet: Microsoft.PowerShell.Utility\Get-Date Per eseguire un comando New-Map aggiunto dal modulo MapFunctions, utilizzare il nome qualificato come modulo: MapFunctions\New-Map Per trovare lo snap-in o il modulo da cui è stato importato un comando, utilizzare il formato di comando Get-Command seguente: get-command <nome-comando> | format-list -property Name, PSSnapin, Module Ad esempio, per trovare l'origine del cmdlet Get-Date, digitare: get-command get-date | format-list -property Name, PSSnapin, Module Name : Get-Date PSSnapIn: Microsoft.PowerShell.Utility modulo: OPERATORE DI CHIAMATA È inoltre possibile utilizzare anche l'operatore di chiamata (&) per eseguire qualsiasi comando che è possibile ottenere tramite un comando Get-ChildItem (l'alias è "dir"), Get-Command o Get-Module. Per eseguire un comando, racchiudere il comando Get-Command tra parentesi e utilizzare l'operatore di chiamata (&) per eseguire il comando. &(get-command ...) - oppure &(dir ... ) Ad esempio, se si dispone di una funzione denominata Map nascosta da un alias denominato Map, utilizzare il comando seguente per eseguire la funzione. &(get-command -name map -type function) - oppure &(dir function:\map) È inoltre possibile salvare il comando nascosto in una variabile per renderne più semplice l'esecuzione. Il comando seguente, ad esempio, salva la funzione Map nella variabile $myMap, quindi utilizza l'operatore di chiamata per l'esecuzione. $myMap = (get-command -name map -type function) &($myMap) Se un comando ha avuto origine in un modulo, è possibile utilizzare il formato seguente per l'esecuzione. & <PSModuleInfo-object> <comando> Ad esempio, per eseguire il cmdlet Add-File nel modulo FileCommands, utilizzare la seguente sequenza di comandi: $FileCommands = get-module -name FileCommands & $FileCommands Add-File ELEMENTI SOSTITUITI Gli elementi che non sono stati importati da un modulo o uno snap-in, ad esempio funzioni, variabili e alias creati nella sessione o aggiunti mediante un profilo, possono essere sostituiti da comandi con lo stesso nome. Se vengono sostituiti, non è possibile accedervi. Le variabili e gli alias vengono sempre sostituiti, anche se sono stati importati da un modulo o uno snap-in, perché non è possibile utilizzare un operatore di chiamata o un nome qualificato per eseguirli. Se si digita, ad esempio, una funzione Get-Map nella sessione e si importa una funzione denominata Get-Map, la funzione originale viene sostituita. Non è possibile recuperarla nella sessione corrente. EVITARE I CONFLITTI DI NOMI Il modo migliore per gestire i conflitti di nomi di comando è impedirli. Quando si assegna un nome ai comandi, utilizzare un nome molto specifico o univoco. Ad esempio, aggiungere le proprie iniziali o l'acronimo del nome della società ai nomi nei comandi. Inoltre, durante l'importazione di comandi nella sessione da un modulo di Windows PowerShell o da un'altra sessione, utilizzare il parametro Prefix del cmdlet Import-Module o Import-PSSession per aggiungere un prefisso ai nomi dei comandi. Nel comando seguente, ad esempio, viene evitato qualsiasi conflitto con i cmdlet Get-Date e Set-Date disponibili in Windows PowerShell quando si importa il modulo DateFunctions. import-module -name DateFunctions -prefix ZZ Per ulteriori informazioni, vedere Import-Module e Import-PSSession. VEDERE ANCHE about_Path_Syntax about_Aliases about_Functions Alias (provider) Function (provider) Get-Command Import-Module Import-PSSession