ARGOMENTO about_Prompts DESCRIZIONE BREVE Descrive la funzione Prompt e illustra come creare una funzione Prompt personalizzata. DESCRIZIONE DETTAGLIATA Il prompt dei comandi di Windows PowerShell indica che Windows PowerShell è pronto ad eseguire un comando: PS C:\> Il prompt di Windows PowerShell è determinato dalla funzione Prompt. È possibile personalizzare il prompt creando la propria funzione Prompt. Quindi, è possibile salvare la funzione nel profilo di Windows PowerShell. Funzione Prompt La funzione Prompt determina l'aspetto del prompt di Windows PowerShell. Windows PowerShell è fornito con una funzione Prompt incorporata ma è possibile eseguirne l'override e definire una propria funzione Prompt. La funzione Prompt ha la sintassi seguente: function prompt { <corpo-funzione> } La funzione Prompt deve restituire un oggetto, in genere una stringa. Si consiglia di restituire una stringa o un oggetto formattato come una stringa. La stringa deve essere contenuta in una riga di 80 caratteri. Ad esempio: PS C:\> function prompt {"Hello, World > "} Hello, World > Come tutte le funzioni, la funzione Prompt viene archiviata nell'unità Function:. Per visualizzare il codice nella funzione Prompt corrente, digitare: (get-item function:prompt).definition Questo comando utilizza il cmdlet Get-Item per visualizzare la voce Prompt nell'unità Function:. Quindi, utilizza la notazione con punto per visualizzare il valore della proprietà Definition della funzione Prompt. Prompt predefinito Il prompt predefinito di Windows PowerShell è il seguente: PS> Questo prompt viene visualizzato solo quando la funzione prompt genera un errore o quando la funzione prompt non restituisce una stringa o un oggetto. PS C:\> function prompt {$null} PS> Poiché Windows PowerShell è fornito con un prompt incorporato, non viene normalmente visualizzato il prompt predefinito se non si scrive la propria funzione prompt. Prompt incorporato Windows PowerShell include una funzione prompt incorporata che crea i prompt comuni. La funzione prompt incorporata è la seguente: function prompt { $(if (test-path variable:/PSDebugContext) { '[DBG]: ' } else { '' }) + 'PS ' + $(Get-Location) ` + $(if ($nestedpromptlevel -ge 1) { '>>' }) + '> ' } La funzione utilizza il cmdlet Test-Path per determinare se la variabile automatica $PSDebugContext è compilata. Se $PSDebugContext è compilata, si è in modalità di debug e viene aggiunto "[DBG]" al prompt, come segue: [DBG] PS C:\ps-test> Se $PSDebugContext non è compilata, la funzione aggiunge "PS" al prompt e utilizza il cmdlet Get-Location per ottenere il percorso corrente della directory di file system. Quindi, aggiunge una parentesi angolare destra (>). PS C:\ps-test> Se si è in un prompt nidificato, la funzione aggiunge due parentesi angolari (>>) al prompt (si è in un prompt nidificato se il valore della variabile automatica $NestedPromptLevel è maggiore di 1). Ad esempio, quando si esegue il debug in un prompt nidificato, il prompt è analogo al seguente: [DBG] PS C:\ps-test>>> Il cmdlet Enter-PSSession antepone il nome del computer remoto alla funzione Prompt corrente. Quando si utilizza il cmdlet Enter-PSSession per avviare una sessione con un computer remoto, il prompt dei comandi viene modificato per includere il nome del computer remoto. Ad esempio: PS Hello, World> Enter-PSSession Server01 [Server01]: PS Hello, World> Altre applicazioni host di Windows PowerShell e altre shell possono presentare i loro prompt dei comandi personalizzati. Per ulteriori informazioni sulle variabili automatiche $PSDebugContext e $NestedPromptLevel, vedere about_Automatic_Var iables. Personalizzazione del prompt Per personalizzare il prompt, scrivere una nuova funzione Prompt. La funzione non è protetta, pertanto è possibile sovrascriverla. Per scrivere una funzione prompt, digitare quanto segue: function prompt { } Quindi, tra le parentesi graffe, immettere i comandi o la stringa che crea il prompt. Ad esempio, il prompt include il nome del computer: function prompt {"PS [$env:COMPUTERNAME]> "} Nel computer Server01, il prompt è analogo al seguente: PS [Server01] > La funzione prompt seguente include la data e l'ora correnti: function prompt {"$(get-date)> "} Il prompt è analogo al seguente: 01/01/2008 17:49:47> È anche possibile modificare la funzione Prompt predefinita: function prompt { $(if (test-path variable:/PSDebugContext) { '[DBG]: ' } else { '' }) + "$(get-date)" ` + $(if ($nestedpromptlevel -ge 1) { '>>' }) + '> ' } Ad esempio, la funzione Prompt modificata seguente aggiunge "[ADMIN]:" al prompt di Windows PowerShell incorporato quando Windows PowerShell viene aperto tramite l'opzione "Esegui come amministratore": function prompt { $identity = [Security.Principal.WindowsIdentity]::GetCurrent() $principal = [Security.Principal.WindowsPrincipal] $identity $(if (test-path variable:/PSDebugContext) { '[DBG]: ' } elseif($principal.IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { "[ADMIN]: " } else { '' }) + 'PS ' + $(Get-Location) + $(if ($nestedpromptlevel -ge 1) { '>>' }) + '> ' } Quando si avvia Windows PowerShell tramite l'opzione "Esegui come amministratore", viene visualizzato un prompt analogo al seguente: [ADMIN]: PS C:\ps-test> La funzione Prompt seguente visualizza l'ID cronologia del comando successivo. Per visualizzare la cronologia dei comandi, utilizzare il cmdlet Get-History. function prompt { # Il segno chiocciola crea una matrice in caso sia presente un solo elemento di cronologia. $history = @(get-history) if($history.Count -gt 0) { $lastItem = $history[$history.Count - 1] $lastId = $lastItem.Id } $nextCommand = $lastId + 1 $currentDirectory = get-location "PS: $nextCommand $currentDirectory >" } Il prompt seguente utilizza i cmdlet Write-Host e Get-Random per creare un prompt che modifica il colore in modo casuale. Poiché Write-Host scrive nell'applicazione host corrente ma non restituisce un oggetto, questa funzione include un'istruzione Return. Senza di essa , Windows PowerShell utilizza il prompt predefinito "PS>". function prompt { $color = get-random -min 1 -max 16 write-host ("PS " + $(get-location) +">") -nonewline -foregroundcolor $color return " " } Salvataggio del prompt Come qualsiasi funzione, la funzione Prompt si applica solo alla sessione corrente. Per salvare la funzione Prompt per le sessioni future, aggiungerla ai profili di Windows PowerShell. Per ulteriori informazioni sui profili, vedere about_Profiles. VEDERE ANCHE Get-Location Enter-PSSession Get-History Get-Random Write-Host about_Profiles about_Functions about_Scopes about_Debuggers about_Automatic_Variables