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.

Vedi anche