about_Prompts

Mis à jour: mai 2014

S'applique à: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

RUBRIQUE

about_Prompts

DESCRIPTION COURTE

Décrit la fonction Prompt et montre comment créer une fonction Prompt personnalisée.

DESCRIPTION DÉTAILLÉE

L'invite de commandes Windows PowerShell indique que Windows PowerShell est prêt à exécuter une commande :

        PS C:\>

L'invite de commandes Windows PowerShell est déterminée par la fonction Prompt intégrée. Vous pouvez personnaliser l'invite de commandes en créant votre propre fonction Prompt et en l'enregistrant dans votre profil Windows PowerShell.

À PROPOS DE LA FONCTION PROMPT

La fonction Prompt détermine l'apparence de l'invite de commandes Windows PowerShell. Windows PowerShell est fourni avec une fonction Prompt intégrée, mais vous pouvez la remplacer en définissant votre propre fonction Prompt.

La fonction Prompt a la syntaxe suivante :

        function Prompt { <function-body> }

La fonction Prompt doit retourner un objet. Il est recommandé de retourner une chaîne ou un objet qui est mis en forme en tant que chaîne. La longueur maximale recommandée est de 80 caractères.

Par exemple, la fonction d'invite suivante retourne une chaîne « Hello, World » suivie d'un signe insertion (>).

        PS C:\> function prompt {"Hello, World > "}
        Hello, World > 

OBTENTION DE LA FONCTION PROMPT

Pour obtenir la fonction Prompt, utilisez l'applet de commande Get-Command ou l'applet de commande Get-Item dans le lecteur Function.

Les fonctions sont des commandes. Par conséquent, vous pouvez utiliser l'applet de commande Get-Command pour obtenir des fonctions, y compris la fonction Prompt.

Par exemple :

        PS C:\>Get-Command Prompt

        CommandType     Name                                               ModuleName
        -----------     ----                                               ----------
        Function        prompt
        

Pour obtenir le script qui définit la valeur de l'invite de commandes, utilisez la méthode du point pour obtenir la propriété ScriptBlock de la fonction Prompt.

Par exemple :

        PS C:\>(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

Comme toutes les fonctions, la fonction Prompt est stockée dans le lecteur Function: . Pour afficher le script qui crée la fonction Prompt active, tapez :

        (Get-Item function:prompt).ScriptBlock

INVITE PAR DÉFAUT

L'invite par défaut s'affiche uniquement quand la fonction Prompt génère une erreur ou ne retourne pas d'objet.

L'invite de commandes Windows PowerShell par défaut est :

        PS>

Par exemple, la commande suivante définit la fonction Prompt sur $null, ce qui n'est pas valide. Par conséquent, l'invite par défaut s'affiche.

        PS C:\> function prompt {$null}
        PS>

Étant donné que Windows PowerShell est fourni avec une invite de commandes intégrée, vous ne voyez généralement pas l'invite par défaut.

INVITE DE COMMANDES INTÉGRÉE

Windows PowerShell inclut une fonction d'invite intégrée.

Dans Windows PowerShell 3.0, la fonction d'invite intégrée est :

        function prompt
        {
            "PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "
        }

Cette invite simplifiée commence par « PS », suivi de l'emplacement actuel et d'un « > » pour chaque niveau d'invite imbriqué.

Dans Windows PowerShell 2.0, la fonction d'invite intégrée est :

        function prompt
        {
            $(if (test-path variable:/PSDebugContext) { '[DBG]: ' } 
            else { '' }) + 'PS ' + $(Get-Location) `
            + $(if ($nestedpromptlevel -ge 1) { '>>' }) + '> '
        } 

La fonction utilise l'applet de commande Test-Path pour déterminer si la variable automatique $PSDebugContext est renseignée. Si $PSDebugContext est renseignée, vous êtes en mode débogage et « [DBG] » est ajouté à l'invite de commandes, comme suit :

        [DBG] PS C:\ps-test>

Si $PSDebugContext n'est pas renseignée, la fonction ajoute « PS » à l'invite de commandes. Par ailleurs, la fonction utilise l'applet de commande Get-Location pour obtenir l'emplacement de répertoire de système de fichiers actuel. Elle ajoute ensuite un signe supérieur (>).

    For example:        
        PS C:\ps-test>

Si vous êtes dans une invite de commandes imbriquée, la fonction ajoute deux crochets pointus (>>) à l'invite de commandes. (Vous êtes dans une invite de commandes imbriquée si la valeur de la variable automatique $NestedPromptLevel est supérieure à 1.)

Par exemple, quand vous déboguez dans une invite de commandes imbriquée, l'invite de commandes ressemble à la suivante :

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

MODIFICATIONS APPORTÉES À L'INVITE DE COMMANDES

L'applet de commande Enter-PSSession ajoute le nom de l'ordinateur distant à la fonction Prompt active. Quand vous utilisez l'applet de commande Enter-PSSession pour démarrer une session avec un ordinateur distant, l'invite de commandes est modifiée pour inclure le nom de l'ordinateur distant. Par exemple :

          PS Hello, World> Enter-PSSession Server01
          [Server01]: PS Hello, World>

D'autres environnements et applications hôtes Windows PowerShell peuvent avoir leurs propres invites de commandes personnalisées.

Pour plus d'informations sur les variables automatiques $PSDebugContext et $NestedPromptLevel, consultez about_Automatic_Variables.

COMMENT PERSONNALISER L'INVITE DE COMMANDES

Pour personnaliser l'invite de commandes, écrivez une nouvelle fonction Prompt. La fonction n'étant pas protégée, vous pouvez la remplacer.

Pour écrire une fonction d'invite, tapez la commande suivante :

        function prompt { }

Ensuite, entre les accolades, entrez les commandes ou la chaîne permettant de créer votre invite de commandes.

Par exemple, l'invite suivante inclut le nom de votre ordinateur :

        function prompt {"PS [$env:COMPUTERNAME]> "}

Sur l'ordinateur Server01, l'invite de commandes ressemble à la suivante :

        PS [Server01] >

La fonction d'invite de commandes suivante inclut la date et l'heure actuelles :

        function prompt {"$(get-date)> "}

L'invite de commandes ressemble à la suivante :

        03/15/2012 17:49:47>

Vous pouvez également modifier la fonction Prompt par défaut :

Par exemple, la fonction Prompt modifiée suivante ajoute « [ADMIN]: » à l'invite de commandes Windows PowerShell intégrée quand Windows PowerShell est ouvert à l'aide de l'option « Exécuter en tant qu'administrateur » :

        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) { '>>' }) + '> '
        }

Quand vous démarrez Windows PowerShell à l'aide de l'option « Exécuter en tant qu'administrateur », une invite de commandes semblable à l'invite suivante s'affiche :

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

La fonction Prompt suivante affiche l'ID d'historique de la commande suivante. Pour afficher l'historique des commandes, utilisez l'applet de commande Get-History.

          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 >"
          }

L'invite suivante utilise les applets de commande Write-Host et Get-Random pour créer une invite qui change de couleur de manière aléatoire. Étant donné que Write-Host écrit dans l'application hôte actuelle, mais ne retourne pas d'objet, cette fonction inclut une instruction Return. Sans cela, Windows PowerShell utilise l'invite par défaut, « PS> ».

        function prompt
        {
            $color = Get-Random -Min 1 -Max 16
            Write-Host ("PS " + $(Get-Location) +">") -NoNewLine -ForegroundColor $Color
            return " "
        }

ENREGISTREMENT DE LA FONCTION PROMPT

Comme toute fonction, la fonction Prompt existe uniquement dans la session active. Pour enregistrer la fonction Prompt pour les sessions futures, ajoutez-la à vos profils Windows PowerShell. Pour plus d'informations sur les profils, consultez about_Profiles.

VOIR AUSSI

Get-Location

Enter-PSSession

Get-History

Get-Random

Write-Host

about_Profiles

about_Functions

about_Scopes

about_Debuggers

about_Automatic_Variables