about_Prompts
Descrizione breve
Descrive la Prompt
funzione e illustra come creare una funzione personalizzata Prompt
.
Descrizione lunga
Il prompt dei comandi di PowerShell indica che PowerShell è pronto per eseguire un comando:
PS C:\>
PowerShell ha una funzione predefinita Prompt
. È possibile definire una funzione personalizzata Prompt
nello script del profilo di PowerShell.
Informazioni sulla funzione Prompt
La Prompt
funzione determina l'aspetto del prompt di PowerShell.
PowerShell include una funzione predefinita Prompt
, ma è possibile eseguirne l'override definendo la propria Prompt
funzione.
La Prompt
funzione ha la sintassi seguente:
function Prompt { <function-body> }
La Prompt
funzione deve restituire un oggetto . Come procedura consigliata, restituire una stringa o un oggetto formattato come stringa. La lunghezza massima consigliata è di 80 caratteri.
Ad esempio, la funzione seguente Prompt
restituisce una stringa "Hello, World" seguita da una parentesi uncinata destra (>
).
PS C:\> function prompt {"Hello, World > "}
Hello, World >
Recupero della funzione Prompt
Per ottenere la Prompt
funzione, usare il Get-Command
cmdlet o usare il Get-Item
cmdlet nell'unità Funzione.
Ad esempio:
PS C:\> Get-Command Prompt
CommandType Name ModuleName
----------- ---- ----------
Function prompt
Per ottenere lo script che imposta il valore del prompt, usare il metodo dot per ottenere la proprietà ScriptBlock della Prompt
funzione.
Ad esempio:
(Get-Command Prompt).ScriptBlock
"PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "
# .Link
# https://go.microsoft.com/fwlink/?LinkID=225750
# .ExternalHelp System.Management.Automation.dll-help.xml
Come tutte le funzioni, la Prompt
funzione viene archiviata nell'unità Function:
.
Per visualizzare lo script che crea la funzione corrente Prompt
, digitare:
(Get-Item function:prompt).ScriptBlock
Prompt predefinito
Il prompt predefinito viene visualizzato solo quando la Prompt
funzione genera un errore o non restituisce un oggetto.
Il prompt predefinito di PowerShell è:
PS>
Ad esempio, il comando seguente imposta la Prompt
funzione su $null
, che non è valida. Di conseguenza, viene visualizzata la richiesta predefinita.
PS C:\> function prompt {$null}
PS>
Poiché PowerShell include un prompt predefinito, in genere non viene visualizzato il prompt predefinito.
Richiesta predefinita
PowerShell include una funzione predefinita Prompt
.
function prompt {
"PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) ";
# .Link
# https://go.microsoft.com/fwlink/?LinkID=225750
# .ExternalHelp System.Management.Automation.dll-help.xml
}
La funzione usa il Test-Path
cmdlet per verificare se la $PSDebugContext
variabile automatica ha un valore . Se $PSDebugContext
ha un valore, è in esecuzione in modalità di debug e [DBG]:
viene aggiunto al prompt, come indicato di seguito:
[DBG]: PS C:\ps-test>
Se $PSDebugContext
non viene popolato, la funzione aggiunge PS
al prompt.
Inoltre, la funzione usa il Get-Location
cmdlet per ottenere il percorso della directory del file system corrente. Aggiunge quindi una parentesi uncinata destra (>
).
Ad esempio:
PS C:\ps-test>
Se si è in un prompt annidato, la funzione aggiunge due parentesi angolari (>>
) al prompt. Viene chiesto se il valore della $NestedPromptLevel
variabile automatica è maggiore di 0.
Ad esempio, quando si esegue il debug in un prompt annidato, il prompt sarà simile al prompt seguente:
[DBG] PS C:\ps-test>>>
Modifiche alla richiesta
Il Enter-PSSession
cmdlet antepone il nome del computer remoto alla funzione corrente Prompt
. Quando si usa il Enter-PSSession
cmdlet per avviare una sessione con un computer remoto, il prompt dei comandi cambia per includere il nome del computer remoto. Ad esempio:
PS Hello, World> Enter-PSSession Server01
[Server01]: PS Hello, World>
Altre applicazioni host di PowerShell e shell alternative potrebbero avere prompt dei comandi personalizzati.
Per altre informazioni sulle $PSDebugContext
variabili automatiche e $NestedPromptLevel
, vedere about_Automatic_Variables.
Come personalizzare la richiesta
Per personalizzare il prompt, scrivere una nuova Prompt
funzione. La funzione non è protetta, quindi è possibile sovrascriverla.
Per scrivere una Prompt
funzione, digitare quanto segue:
function prompt { }
Quindi, tra le parentesi graffe, immettere i comandi o la stringa che crea il prompt.
Ad esempio, il prompt seguente include il nome del computer:
function prompt {"PS [$env:COMPUTERNAME]> "}
Nel computer Server01 il prompt è simile al prompt seguente:
PS [Server01] >
La funzione seguente Prompt
include la data e l'ora correnti:
function prompt {"$(Get-Date)> "}
Il prompt è simile al prompt seguente:
03/15/2012 17:49:47>
È anche possibile modificare la funzione predefinita Prompt
:
Ad esempio, la funzione modificata Prompt
seguente aggiunge [ADMIN]:
al prompt di PowerShell predefinito durante l'esecuzione in una sessione con privilegi elevati.
function prompt {
$identity = [Security.Principal.WindowsIdentity]::GetCurrent()
$principal = [Security.Principal.WindowsPrincipal] $identity
$adminRole = [Security.Principal.WindowsBuiltInRole]::Administrator
$(if (Test-Path variable:/PSDebugContext) { '[DBG]: ' }
elseif($principal.IsInRole($adminRole)) { "[ADMIN]: " }
else { '' }
) + 'PS ' + $(Get-Location) +
$(if ($NestedPromptLevel -ge 1) { '>>' }) + '> '
}
Quando si avvia PowerShell usando l'opzione Esegui come amministratore , viene visualizzato un prompt simile al seguente:
[ADMIN]: PS C:\ps-test>
La funzione seguente Prompt
visualizza l'ID cronologia del comando successivo. Per visualizzare la cronologia dei comandi, usare il Get-History
cmdlet .
function prompt {
# The at sign creates an array in case only one history item exists.
$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 usa i Write-Host
cmdlet 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 esso, PowerShell usa il prompt predefinito, PS>
.
function prompt {
$color = Get-Random -Min 1 -Max 16
Write-Host ("PS " + $(Get-Location) +">") -NoNewLine `
-ForegroundColor $Color
return " "
}
Salvataggio della funzione Prompt
Come qualsiasi funzione, la Prompt
funzione esiste solo nella sessione corrente. Per salvare la Prompt
funzione per le sessioni future, aggiungerla ai profili di PowerShell. Per altre informazioni sui profili, vedere about_Profiles.