about_Prompts
Descripción breve
Describe la Prompt
función y muestra cómo crear una función personalizada Prompt
.
Descripción larga
El símbolo del sistema de PowerShell indica que PowerShell está listo para ejecutar un comando:
PS C:\>
PowerShell tiene una función integrada Prompt
. Puede definir su propia función personalizada Prompt
en el script de perfil de PowerShell.
Acerca de la función Prompt
La Prompt
función determina la apariencia del símbolo del sistema de PowerShell.
PowerShell incluye una función integrada Prompt
, pero puede invalidarlo definiendo su propia Prompt
función.
La Prompt
función tiene la siguiente sintaxis:
function Prompt { <function-body> }
La Prompt
función debe devolver un objeto . Como procedimiento recomendado, devuelva una cadena o un objeto con formato de cadena. La longitud máxima recomendada es de 80 caracteres.
Por ejemplo, la función siguiente Prompt
devuelve una cadena "Hello, World" seguida de un corchete angular derecho (>
).
PS C:\> function prompt {"Hello, World > "}
Hello, World >
Obtención de la función Prompt
Para obtener la Prompt
función, use el Get-Command
cmdlet o use el Get-Item
cmdlet en la unidad de función.
Por ejemplo:
PS C:\> Get-Command Prompt
CommandType Name ModuleName
----------- ---- ----------
Function prompt
Para obtener el script que establece el valor del símbolo del sistema, use el método dot para obtener la propiedad ScriptBlock de la Prompt
función.
Por ejemplo:
(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
Al igual que todas las funciones, la Prompt
función se almacena en la Function:
unidad.
Para mostrar el script que crea la función actual Prompt
, escriba:
(Get-Item function:prompt).ScriptBlock
El símbolo del sistema predeterminado
El símbolo del sistema predeterminado solo aparece cuando la Prompt
función genera un error o no devuelve un objeto .
El símbolo del sistema de PowerShell predeterminado es:
PS>
Por ejemplo, el siguiente comando establece la Prompt
función $null
en , que no es válida. Como resultado, aparece el símbolo del sistema predeterminado.
PS C:\> function prompt {$null}
PS>
Dado que PowerShell incluye un símbolo del sistema integrado, normalmente no ve el símbolo del sistema predeterminado.
Mensaje integrado
PowerShell incluye una función integrada 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 función usa el Test-Path
cmdlet para probar si la $PSDebugContext
variable automática tiene un valor. Si $PSDebugContext
tiene un valor, se ejecuta en modo de depuración y [DBG]:
se agrega al símbolo del sistema, como se indica a continuación:
[DBG]: PS C:\ps-test>
Si $PSDebugContext
no se rellena, la función se agrega PS
al símbolo del sistema.
Además, la función usa el Get-Location
cmdlet para obtener la ubicación actual del directorio del sistema de archivos. A continuación, agrega un corchete angular derecho (>
).
Por ejemplo:
PS C:\ps-test>
Si está en un símbolo del sistema anidado, la función agrega dos corchetes angulares (>>
) al símbolo del sistema. Se encuentra en un símbolo del sistema anidado si el valor de la $NestedPromptLevel
variable automática es mayor que 0.
Por ejemplo, cuando se depura en un símbolo del sistema anidado, el mensaje es similar al siguiente:
[DBG] PS C:\ps-test>>>
Cambios en el símbolo del sistema
El Enter-PSSession
cmdlet antepone el nombre del equipo remoto a la función actual Prompt
. Cuando se usa el Enter-PSSession
cmdlet para iniciar una sesión con un equipo remoto, el símbolo del sistema cambia para incluir el nombre del equipo remoto. Por ejemplo:
PS Hello, World> Enter-PSSession Server01
[Server01]: PS Hello, World>
Otras aplicaciones host de PowerShell y shells alternativos pueden tener sus propios símbolos del sistema personalizados.
Para obtener más información sobre las $PSDebugContext
variables automáticas y $NestedPromptLevel
, consulte about_Automatic_Variables.
Personalización del mensaje
Para personalizar el símbolo del sistema, escriba una función nueva Prompt
. La función no está protegida, por lo que puede sobrescribirla.
Para escribir una Prompt
función, escriba lo siguiente:
function prompt { }
A continuación, entre las llaves, escriba los comandos o la cadena que crea el símbolo del sistema.
Por ejemplo, el siguiente mensaje incluye el nombre del equipo:
function prompt {"PS [$env:COMPUTERNAME]> "}
En el equipo Server01, el símbolo del sistema es similar al siguiente:
PS [Server01] >
La función siguiente Prompt
incluye la fecha y hora actuales:
function prompt {"$(Get-Date)> "}
El mensaje es similar al siguiente símbolo del sistema:
03/15/2012 17:49:47>
También puede cambiar la función predeterminada Prompt
:
Por ejemplo, la siguiente función modificada Prompt
se agrega [ADMIN]:
al símbolo del sistema integrado de PowerShell cuando se ejecuta en una sesión con privilegios elevados.
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) { '>>' }) + '> '
}
Al iniciar PowerShell mediante la opción Ejecutar como administrador , aparece un símbolo del sistema similar al siguiente:
[ADMIN]: PS C:\ps-test>
La siguiente Prompt
función muestra el identificador de historial del siguiente comando. Para ver el historial de comandos, use el 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 >"
}
En el símbolo del sistema siguiente se usan los Write-Host
cmdlets y Get-Random
para crear un símbolo del sistema que cambia el color de forma aleatoria. Dado que Write-Host
escribe en la aplicación host actual, pero no devuelve un objeto , esta función incluye una Return
instrucción . Sin él, PowerShell usa el símbolo del sistema predeterminado, PS>
.
function prompt {
$color = Get-Random -Min 1 -Max 16
Write-Host ("PS " + $(Get-Location) +">") -NoNewLine `
-ForegroundColor $Color
return " "
}
Guardar la función Prompt
Al igual que cualquier función, la Prompt
función solo existe en la sesión actual. Para guardar la Prompt
función para sesiones futuras, agréguela a los perfiles de PowerShell. Para obtener más información sobre los perfiles, consulte about_Profiles.