Condividi tramite


Informazioni sui prompt

Breve descrizione

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:\>

Il prompt di PowerShell è determinato dalla funzione predefinita Prompt . È possibile personalizzare la richiesta creando una funzione personalizzata Prompt e salvandola nel 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à Function.

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

Richiesta predefinita

La richiesta predefinita viene visualizzata solo quando la Prompt funzione genera un errore o non restituisce un oggetto.

Il prompt di PowerShell predefinito è:

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 {
    $(if (Test-Path variable:/PSDebugContext) { '[DBG]: ' }
      else { '' }) + 'PS ' + $(Get-Location) +
        $(if ($NestedPromptLevel -ge 1) { '>>' }) + '> '
}

La funzione usa il Test-Path cmdlet per determinare se la $PSDebugContext variabile automatica è popolata. Se $PSDebugContext viene popolato, si è 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. E 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 visualizzato un prompt annidato se il valore della $NestedPromptLevel variabile automatica è maggiore di 1.

Ad esempio, quando si esegue il debug in un prompt annidato, il prompt sarà simile al seguente:

[DBG] PS C:\ps-test>>>

Modifiche al prompt

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 quando PowerShell viene aperto usando 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 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

Get-Location

Enter-PSSession

Get-History

Get-Random

Write-Host

about_Profiles

about_Functions

about_Scopes

about_Debuggers

about_Automatic_Variables