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