about_Preference_Variables
Descripción breve
Variables que personalizan el comportamiento de PowerShell.
Descripción larga
PowerShell incluye un conjunto de variables que le permiten personalizar su comportamiento. Estas variables de preferencia funcionan como las opciones de los sistemas basados en GUI.
Las variables de preferencia afectan al entorno operativo de PowerShell y a todos los comandos que se ejecutan en el entorno. En muchos casos, los cmdlets tienen parámetros que puede usar para invalidar el comportamiento de preferencia de un comando específico.
En la tabla siguiente se enumeran las variables de preferencia y sus valores predeterminados.
| Variable | Valor predeterminado |
|---|---|
$ConfirmPreference |
Alto |
$DebugPreference |
SilentlyContinue |
$ErrorActionPreference |
Continuar |
$ErrorView |
ConciseView |
$FormatEnumerationLimit |
4 |
$InformationPreference |
SilentlyContinue |
$LogCommandHealthEvent |
False (no registrado) |
$LogCommandLifecycleEvent |
False (no registrado) |
$LogEngineHealthEvent |
True (registrado) |
$LogEngineLifecycleEvent |
True (registrado) |
$LogProviderLifecycleEvent |
True (registrado) |
$LogProviderHealthEvent |
True (registrado) |
$MaximumHistoryCount |
4096 |
$OFS |
(Carácter de espacio ( " " )) |
$OutputEncoding |
OBJETO UTF8Encoding |
$ProgressPreference |
Continuar |
$PSDefaultParameterValues |
(None: tabla hash vacía) |
$PSEmailServer |
(Ninguna) |
$PSModuleAutoLoadingPreference |
Todo |
$PSSessionApplicationName |
WSMan |
$PSSessionConfigurationName |
http://schemas.microsoft.com/powershell/Microsoft.PowerShell |
$PSSessionOption |
Consulte $PSSessionOption |
$Transcript |
(ninguno) |
$VerbosePreference |
SilentlyContinue |
$WarningPreference |
Continuar |
$WhatIfPreference |
False |
PowerShell incluye las siguientes variables de entorno que almacenan las preferencias del usuario. Para obtener más información sobre estas variables de entorno, vea about_Environment_Variables.
env:PSExecutionPolicyPreference$env:PSModulePath
Nota
Los cambios en la variable de preferencia solo tienen efecto en scripts y funciones si esos scripts o funciones se definen en el mismo ámbito que el ámbito en el que se usó la preferencia. Para obtener más información, vea about_Scopes.
Trabajar con variables de preferencia
En este documento se describe cada una de las variables de preferencia.
Para mostrar el valor actual de una variable de preferencia específica, escriba el nombre de la variable. Por ejemplo, el comando siguiente muestra el $ConfirmPreference valor de la variable.
$ConfirmPreference
High
Para cambiar el valor de una variable, use una instrucción de asignación. Por ejemplo, la siguiente instrucción cambia $ConfirmPreference el valor del parámetro a Medio.
$ConfirmPreference = "Medium"
Los valores que establezca son específicos de la sesión actual de PowerShell. Para que las variables sean eficaces en todas las sesiones de PowerShell, agrégrélas al perfil de PowerShell. Para obtener más información, vea about_Profiles.
Trabajo en remoto
Al ejecutar comandos en un equipo remoto, los comandos remotos solo están sujetos a las preferencias establecidas en el cliente de PowerShell del equipo remoto. Por ejemplo, cuando se ejecuta un comando remoto, el valor de la variable del equipo remoto determina cómo responde PowerShell a $DebugPreference los mensajes de depuración.
Para obtener más información sobre los comandos remotos, vea about_Remote.
$ConfirmPreference
Determina si PowerShell le pide automáticamente confirmación antes de ejecutar un cmdlet o una función.
Los $ConfirmPreference valores válidos de la variable son Alto, Medio o Bajo. A los cmdlets y funciones se les asigna un riesgo de alto, medio o bajo. Cuando el valor de la variable es menor o igual que el riesgo asignado a un cmdlet o función, PowerShell le pide confirmación automáticamente antes de ejecutar el $ConfirmPreference cmdlet o la función.
Si el valor de la variable es None , PowerShell nunca le pregunta automáticamente antes $ConfirmPreference de ejecutar un cmdlet o una función.
Para cambiar el comportamiento de confirmación de todos los cmdlets y funciones de la sesión, cambie $ConfirmPreference el valor de la variable.
Para invalidar para un solo comando, use el parámetro Confirm de un $ConfirmPreference cmdlet o de la función. Para solicitar confirmación, use -Confirm . Para suprimir la confirmación, use -Confirm:$false .
Valores válidos de $ConfirmPreference :
- Ninguno: PowerShell no se solicita automáticamente. Para solicitar la confirmación de un comando determinado, use el parámetro Confirm del cmdlet o la función.
- Bajo: PowerShell solicita confirmación antes de ejecutar cmdlets o funciones con un riesgo bajo, medio o alto.
- Medio: PowerShell solicita confirmación antes de ejecutar cmdlets o funciones con un riesgo medio o alto.
- Alto: PowerShell solicita confirmación antes de ejecutar cmdlets o funciones con un alto riesgo.
Explicación detallada
PowerShell puede solicitar confirmación automáticamente antes de realizar una acción. Por ejemplo, cuando el cmdlet o la función afectan significativamente al sistema para eliminar datos o usar una cantidad significativa de recursos del sistema.
Remove-Item -Path C:\file.txt
Confirm
Are you sure you want to perform this action?
Performing operation "Remove File" on Target "C:\file.txt".
[Y] Yes [A] Yes to All [N] No [L] No to All [?] Help (default is "Y"):
La estimación del riesgo es un atributo del cmdlet o función conocido como ConfirmImpact. Los usuarios no pueden cambiarla.
Los cmdlets y las funciones que podrían suponer un riesgo para el sistema tienen un parámetro Confirm que puede usar para solicitar o suprimir la confirmación de un solo comando.
Dado que la mayoría de los cmdlets y funciones usan el valor de riesgo predeterminado, ConfirmImpact, de Medium y el valor predeterminado de es High , la confirmación automática rara vez $ConfirmPreference se produce. Sin embargo, puede activar la confirmación automática cambiando el valor de $ConfirmPreference a Medio o Bajo.
Ejemplos
En este ejemplo se muestra el efecto del $ConfirmPreference valor predeterminado de la variable, High. El valor Alto solo confirma las funciones y cmdlets de alto riesgo. Dado que la mayoría de los cmdlets y funciones son de riesgo medio, no se confirman automáticamente y Remove-Item eliminan el archivo. Al -Confirm agregar al comando, se solicita confirmación al usuario.
$ConfirmPreference
High
Remove-Item -Path C:\temp1.txt
Use -Confirm para solicitar confirmación.
Remove-Item -Path C:\temp2.txt -Confirm
Confirm
Are you sure you want to perform this action?
Performing operation "Remove File" on Target "C:\temp2.txt".
[Y] Yes [A] Yes to All [N] No [L] No to All
[?] Help (default is "Y"):
En el ejemplo siguiente se muestra el efecto de cambiar el valor de $ConfirmPreference a Medium. Dado que la mayoría de los cmdlets y la función son de riesgo medio, se confirman automáticamente. Para suprimir el mensaje de confirmación de un solo comando, use el parámetro Confirm con un valor de $false .
$ConfirmPreference = "Medium"
Remove-Item -Path C:\temp2.txt
Confirm
Are you sure you want to perform this action?
Performing operation "Remove File" on Target "C:\temp2.txt".
[Y] Yes [A] Yes to All [N] No [L] No to All
[?] Help (default is "Y"):
Remove-Item -Path C:\temp3.txt -Confirm:$false
$DebugPreference
Determina cómo responde PowerShell a los mensajes de depuración generados por un script, cmdlet o proveedor, o por un Write-Debug comando en la línea de comandos.
Algunos cmdlets muestran mensajes de depuración, que normalmente son mensajes técnicos diseñados para programadores y profesionales de soporte técnico. De forma predeterminada, no se muestran los mensajes de depuración, pero puede mostrar los mensajes de depuración cambiando el valor de $DebugPreference .
Puede usar el parámetro común Debug de un cmdlet para mostrar u ocultar los mensajes de depuración de un comando específico. Para obtener más información, consulta about_CommonParameters.
Los valores válidos son los siguientes:
- Detener: muestra el mensaje de depuración y deja de ejecutarse. Escribe un error en la consola.
- Consultar: muestra el mensaje de depuración y le pregunta si desea continuar. Al agregar el parámetro común Debug a un comando, cuando el comando está configurado para generar un mensaje de depuración, cambia el valor de la variable a
$DebugPreferenceInquire. - Continuar: muestra el mensaje de depuración y continúa con la ejecución.
- SilentlyContinue: (Valor predeterminado) Ningún efecto. No se muestra el mensaje de depuración y la ejecución continúa sin interrupción.
Ejemplos
En los ejemplos siguientes se muestra el efecto de cambiar los valores de $DebugPreference cuando se introduce un comando en la línea de Write-Debug comandos.
El cambio afecta a todos los mensajes de depuración, incluidos los mensajes generados por cmdlets y scripts. En los ejemplos se muestra el parámetro Debug, que muestra u oculta los mensajes de depuración relacionados con un solo comando.
En este ejemplo se muestra el efecto del $DebugPreference valor predeterminado de la variable, SilentlyContinue. De forma predeterminada, el mensaje de depuración del cmdlet no se Write-Debug muestra y el procesamiento continúa. Cuando se usa el parámetro Debug, invalida la preferencia de un solo comando. Se muestra el mensaje de depuración.
$DebugPreference
SilentlyContinue
Write-Debug -Message "Hello, World"
Write-Debug -Message "Hello, World" -Debug
DEBUG: Hello, World
En este ejemplo se muestra el efecto de $DebugPreference con el valor Continue. Se muestra el mensaje de depuración y el comando continúa procesando.
$DebugPreference = "Continue"
Write-Debug -Message "Hello, World"
DEBUG: Hello, World
En este ejemplo se usa el parámetro Debug con un valor de para suprimir el mensaje de un solo $false comando. No se muestra el mensaje de depuración.
Write-Debug -Message "Hello, World" -Debug:$false
En este ejemplo se muestra el efecto $DebugPreference de establecerse en el valor Stop. Se muestra el mensaje de depuración y se detiene el comando.
$DebugPreference = "Stop"
Write-Debug -Message "Hello, World"
DEBUG: Hello, World
Write-Debug : The running command stopped because the preference variable
"DebugPreference" or common parameter is set to Stop: Hello, World
At line:1 char:1
+ Write-Debug -Message "Hello, World"
En este ejemplo se usa el parámetro Debug con un valor de para suprimir el mensaje de un solo $false comando. No se muestra el mensaje de depuración y no se detiene el procesamiento.
Write-Debug -Message "Hello, World" -Debug:$false
En este ejemplo se muestra el efecto $DebugPreference de establecerse en el valor Inquire. Se muestra el mensaje de depuración y se solicita confirmación al usuario.
$DebugPreference = "Inquire"
Write-Debug -Message "Hello, World"
DEBUG: Hello, World
Confirm
Continue with this operation?
[Y] Yes [A] Yes to All [H] Halt Command [?] Help (default is "Y"):
En este ejemplo se usa el parámetro Debug con un valor de para suprimir el mensaje de un solo $false comando. El mensaje de depuración no se muestra y el procesamiento continúa.
Write-Debug -Message "Hello, World" -Debug:$false
$ErrorActionPreference
Determina cómo Responde PowerShell a un error de no terminación, un error que no detiene el procesamiento del cmdlet. Por ejemplo, en la línea de comandos o en un script, cmdlet o proveedor, como los errores generados por el Write-Error cmdlet.
Puede usar el parámetro común ErrorAction de un cmdlet para invalidar la preferencia de un comando específico.
Los valores válidos son los siguientes:
- Interrumpir: escriba el depurador cuando se produzca un error o cuando se produzca una excepción.
- Continuar: (valor predeterminado) Muestra el mensaje de error y continúa ejecutándose.
- Omitir: suprime el mensaje de error y continúa con la ejecución del comando. El valor Omitir está pensado para su uso por comando, no para su uso como preferencia guardada. Omitir no es un valor válido para la
$ErrorActionPreferencevariable. - Inquire: muestra el mensaje de error y le pregunta si desea continuar.
- SilentlyContinue: No effect. No se muestra el mensaje de error y la ejecución continúa sin interrupción.
- Detener: muestra el mensaje de error y deja de ejecutarse. Además del error generado, el valor Stop genera un objeto ActionPreferenceStopException en la secuencia de errores. flujo
- Suspender: suspende automáticamente un trabajo de flujo de trabajo para permitir una investigación más exhaustiva. Después de la investigación, se puede reanudar el flujo de trabajo. El valor Suspender está pensado para su uso por comando, no para su uso como preferencia guardada. Suspender no es un valor válido para la
$ErrorActionPreferencevariable.
$ErrorActionPreference y el parámetro ErrorAction no afectan a la forma en que PowerShell responde a los errores de terminación que detienen el procesamiento de cmdlets. Para obtener más información sobre el parámetro común ErrorAction, vea about_CommonParameters.
Ejemplos
En estos ejemplos se muestra el efecto de los distintos valores de la $ErrorActionPreference variable. El parámetro ErrorAction se usa para invalidar el $ErrorActionPreference valor.
En este ejemplo se muestra $ErrorActionPreference el valor predeterminado, Continue. Se genera un error de no terminación. Se muestra el mensaje y el procesamiento continúa.
# Change the ErrorActionPreference to 'Continue'
$ErrorActionPreference = 'Continue'
# Generate a non-terminating error and continue processing the script.
Write-Error -Message 'Test Error' ; Write-Host 'Hello World'
Write-Error: Test Error
Hello World
En este ejemplo se muestra $ErrorActionPreference el valor predeterminado, Inquire. Se genera un error y se muestra una solicitud de acción.
# Change the ErrorActionPreference to 'Inquire'
$ErrorActionPreference = 'Inquire'
Write-Error -Message 'Test Error' ; Write-Host 'Hello World'
Confirm
Test Error
[Y] Yes [A] Yes to All [H] Halt Command [S] Suspend [?] Help (default is "Y"):
En este ejemplo se $ErrorActionPreference muestra el establecido en SilentlyContinue.
Se suprime el mensaje de error.
# Change the ErrorActionPreference to 'SilentlyContinue'
$ErrorActionPreference = 'SilentlyContinue'
# Generate an error message
Write-Error -Message 'Test Error' ; Write-Host 'Hello World'
# Error message is suppressed and script continues processing
Hello World
En este ejemplo se muestra $ErrorActionPreference el establecido en Detener. También muestra el objeto adicional generado para la $Error variable.
# Change the ErrorActionPreference to 'Stop'
$ErrorActionPreference = 'Stop'
# Error message is is generated and script stops processing
Write-Error -Message 'Test Error' ; Write-Host 'Hello World'
# Show the ActionPreferenceStopException and the error generated
$Error[0]
$Error[1]
Write-Error: Test Error
ErrorRecord : Test Error
WasThrownFromThrowStatement : False
TargetSite : System.Collections.ObjectModel.Collection`1[System.Management.Automation.PSObject]
Invoke(System.Collections.IEnumerable)
StackTrace : at System.Management.Automation.Runspaces.PipelineBase.Invoke(IEnumerable input)
at Microsoft.PowerShell.Executor.ExecuteCommandHelper(Pipeline tempPipeline,
Exception& exceptionThrown, ExecutionOptions options)
Message : The running command stopped because the preference variable "ErrorActionPreference" or
common parameter is set to Stop: Test Error
Data : {System.Management.Automation.Interpreter.InterpretedFrameInfo}
InnerException :
HelpLink :
Source : System.Management.Automation
HResult : -2146233087
Write-Error: Test Error
$ErrorView
Determina el formato de presentación de los mensajes de error en PowerShell.
Los valores válidos son los siguientes:
ConciseView: (valor predeterminado) Proporciona un mensaje de error conciso y una vista refactorizado para generadores de módulos avanzados. A partir de PowerShell 7.2, si el error es de la línea de comandos o de un módulo de script, la salida es un mensaje de error de una sola línea. De lo contrario, recibirá un mensaje de error de varias líneas que contiene el error y un puntero al error que muestra dónde se produce en esa línea. Si el terminal admite Terminal virtual, se usan códigos de color ANSI para proporcionar acentos de color. El color de acento se puede cambiar en
$Host.PrivateData.ErrorAccentColor. UseGet-Errorel cmdlet para obtener una vista detallada completa del error completo, incluidas las excepciones internas.ConciseView se agregó en PowerShell 7.
NormalView: una vista detallada diseñada para la mayoría de los usuarios. Consta de una descripción del error y el nombre del objeto implicado en el error.
CategoryView: una vista concisa y estructurada diseñada para entornos de producción. El formato es como sigue:
{Category}: ({TargetName}:{TargetType}):[{Activity}], {Reason}
Para obtener más información sobre los campos de CategoryView, vea Clase ErrorCategoryInfo.
Ejemplos
En este ejemplo se muestra cómo aparece un error cuando el valor $ErrorView de es el valor predeterminado, ConciseView. Get-ChildItem se usa para buscar un directorio inexistente.
Get-ChildItem -path 'C:\NoRealDirectory'
Get-ChildItem: Cannot find path 'C:\NoRealDirectory' because it does not exist.
En este ejemplo se muestra cómo aparece un error cuando el valor $ErrorView de es el valor predeterminado, ConciseView. Script.ps1 se ejecuta y produce un error desde la Get-Item instrucción .
./Script.ps1
Get-Item: C:\Script.ps1
Line |
11 | Get-Item -Path .\stuff
| ^ Cannot find path 'C:\demo\stuff' because it does not exist.
En este ejemplo se muestra cómo aparece un error cuando el valor de $ErrorView se cambia a NormalView. Get-ChildItem se usa para buscar un archivo inexistente.
Get-ChildItem -Path C:\nofile.txt
Get-ChildItem : Cannot find path 'C:\nofile.txt' because it does not exist.
At line:1 char:1
+ Get-ChildItem -Path C:\nofile.txt
En este ejemplo se muestra cómo aparece el mismo error cuando el valor de $ErrorView se cambia a CategoryView.
$ErrorView = "CategoryView"
Get-ChildItem -Path C:\nofile.txt
ObjectNotFound: (C:\nofile.txt:String) [Get-ChildItem], ItemNotFoundException
En este ejemplo se muestra que el valor de $ErrorView solo afecta a la presentación del error. No cambia la estructura del objeto de error almacenado en la $Error variable automática. Para obtener información sobre $Error la variable automática, vea about_automatic_variables.
El comando siguiente toma el objeto ErrorRecord asociado al error más reciente en la matriz de errores, el elemento 0, y da formato a todas las propiedades del objeto de error en una lista.
$Error[0] | Format-List -Property * -Force
PSMessageDetails :
Exception : System.Management.Automation.ItemNotFoundException:
Cannot find path 'C:\nofile.txt' because it does
not exist.
at System.Management.Automation.SessionStateInternal.
GetChildItems(String path, Boolean recurse, UInt32
depth, CmdletProviderContext context)
at System.Management.Automation.ChildItemCmdlet
ProviderIntrinsics.Get(String path, Boolean
recurse, UInt32 depth, CmdletProviderContext context)
at Microsoft.PowerShell.Commands.GetChildItemCommand.
ProcessRecord()
TargetObject : C:\nofile.txt
CategoryInfo : ObjectNotFound: (C:\nofile.txt:String) [Get-ChildItem],
ItemNotFoundException
FullyQualifiedErrorId : PathNotFound,
Microsoft.PowerShell.Commands.GetChildItemCommand
ErrorDetails :
InvocationInfo : System.Management.Automation.InvocationInfo
ScriptStackTrace : at <ScriptBlock>, <No file>: line 1
PipelineIterationInfo : {0, 1}
$FormatEnumerationLimit
Determina cuántos elementos enumerados se incluyen en una presentación. Esta variable no afecta a los objetos subyacentes, solo a la presentación. Cuando el valor de es menor que el número de elementos enumerados, PowerShell agrega puntos suspensivos ( ) para indicar los elementos que no $FormatEnumerationLimit ... se muestran.
Valores válidos: enteros ( Int32 )
Valor predeterminado: 4
Ejemplos
En este ejemplo se muestra cómo usar la $FormatEnumerationLimit variable para mejorar la presentación de los elementos enumerados.
El comando de este ejemplo genera una tabla que enumera todos los servicios que se ejecutan en el equipo en dos grupos: uno para los servicios en ejecución y otro para los servicios detenidos. Usa un comando para obtener todos los servicios y, a continuación, envía los resultados a través de la canalización al cmdlet , que agrupa los resultados Get-Service por el estado del Group-Object servicio.
El resultado es una tabla que muestra el estado de la columna Nombre y los procesos de la columna Grupo. Para cambiar las etiquetas de columna, use una tabla hash, consulte about_Hash_Tables. Para obtener más información, vea los ejemplos de Format-Table.
Busque el valor actual de $FormatEnumerationLimit .
$FormatEnumerationLimit
4
Enumera todos los servicios agrupados por Estado. Hay un máximo de cuatro servicios enumerados en la columna Grupo para cada estado porque tiene un valor $FormatEnumerationLimit de 4.
Get-Service | Group-Object -Property Status
Count Name Group
----- ---- -----
60 Running {AdtAgent, ALG, Ati HotKey Poller, AudioSrv...}
41 Stopped {Alerter, AppMgmt, aspnet_state, ATI Smart...}
Para aumentar el número de elementos enumerados, aumente el valor de $FormatEnumerationLimit a 1000. Use Get-Service y para mostrar los Group-Object servicios.
$FormatEnumerationLimit = 1000
Get-Service | Group-Object -Property Status
Count Name Group
----- ---- -----
60 Running {AdtAgent, ALG, Ati HotKey Poller, AudioSrv, BITS, CcmExec...
41 Stopped {Alerter, AppMgmt, aspnet_state, ATI Smart, Browser, CiSvc...
Use Format-Table con el parámetro Wrap para mostrar la lista de servicios.
Get-Service | Group-Object -Property Status | Format-Table -Wrap
Count Name Group
----- ---- -----
60 Running {AdtAgent, ALG, Ati HotKey Poller, AudioSrv, BITS, CcmExec,
Client for NFS, CryptSvc, DcomLaunch, Dhcp, dmserver,
Dnscache, ERSvc, Eventlog, EventSystem, FwcAgent, helpsvc,
HidServ, IISADMIN, InoRPC, InoRT, InoTask, lanmanserver,
lanmanworkstation, LmHosts, MDM, Netlogon, Netman, Nla,
NtLmSsp, PlugPlay, PolicyAgent, ProtectedStorage, RasMan,
RemoteRegistry, RpcSs, SamSs, Schedule, seclogon, SENS,
SharedAccess, ShellHWDetection, SMT PSVC, Spooler,
srservice, SSDPSRV, stisvc, TapiSrv, TermService, Themes,
TrkWks, UMWdf, W32Time, W3SVC, WebClient, winmgmt, wscsvc,
wuauserv, WZCSVC, zzInterix}
41 Stopped {Alerter, AppMgmt, aspnet_state, ATI Smart, Browser, CiSvc,
ClipSrv, clr_optimization_v2.0.50727_32, COMSysApp,
CronService, dmadmin, FastUserSwitchingCompatibility,
HTTPFilter, ImapiService, Mapsvc, Messenger, mnmsrvc,
MSDTC, MSIServer, msvsmon80, NetDDE, NetDDEdsdm, NtmsSvc,
NVSvc, ose, RasAuto, RDSessMgr, RemoteAccess, RpcLocator,
SCardSvr, SwPrv, SysmonLog, TlntSvr, upnphost, UPS, VSS,
WmdmPmSN, Wmi, WmiApSrv, xmlprov}
$InformationPreference
La $InformationPreference variable le permite establecer las preferencias de flujo de información que desea que se muestren a los usuarios. En concreto, mensajes informativos que agregó a comandos o scripts mediante la adición del cmdlet Write-Information. Si se usa el parámetro InformationAction, su valor invalida el valor de la $InformationPreference variable. Write-Information se introdujo en PowerShell 5.0.
Los valores válidos son los siguientes:
- Detener: detiene un comando o script en una aparición del
Write-Informationcomando. - Consulta: muestra el mensaje informativo que se especifica en un comando y, a continuación, pregunta
Write-Informationsi desea continuar. - Continuar: muestra el mensaje informativo y continúa ejecutándose.
- Suspender solo está disponible para flujos de trabajo que no se admiten en PowerShell 6 y versiones posteriores.
- SilentlyContinue: (Valor predeterminado) Ningún efecto. Los mensajes informativos no se muestran y el script continúa sin interrupción.
$Registro*Evento
Las variables de preferencia Log*Event determinan qué tipos de eventos se escriben en el registro de eventos de PowerShell en Visor de eventos. De forma predeterminada, solo se registran los eventos de motor y proveedor. Sin embargo, puede usar las variables de preferencia Log*Event para personalizar el registro, como el registro de eventos sobre comandos.
Las variables de preferencia Log*Event son las siguientes:
$LogCommandHealthEvent: registra errores y excepciones en la inicialización y el procesamiento de comandos. El valor predeterminado es$false(no registrado).$LogCommandLifecycleEvent: registra el inicio y la detención de comandos y canalizaciones de comandos y excepciones de seguridad en la detección de comandos. El valor predeterminado es$false(no registrado).$LogEngineHealthEvent: registra errores y errores de sesiones. El valor predeterminado es$true(registrado).$LogEngineLifecycleEvent: registra la apertura y el cierre de sesiones. El valor predeterminado es$true(registrado).$LogProviderHealthEvent: registra errores de proveedor, como errores de lectura y escritura, errores de búsqueda y errores de invocación. El valor predeterminado es$true(registrado).$LogProviderLifecycleEvent: registra la adición y eliminación de proveedores de PowerShell. El valor predeterminado es$true(registrado). Para obtener información sobre los proveedores de PowerShell, vea about_Providers.
Para habilitar un evento Log*Event, escriba la variable con un valor $true de , por ejemplo:
$LogCommandLifeCycleEvent = $true
Para deshabilitar un tipo de evento, escriba la variable con un valor de $false , por ejemplo:
$LogCommandLifeCycleEvent = $false
Los eventos que habilite solo son efectivos para la consola de PowerShell actual. Para aplicar la configuración a todas las consolas, guarde la configuración de variables en el perfil de PowerShell. Para obtener más información, vea about_Profiles.
$MaximumHistoryCount
Determina cuántos comandos se guardan en el historial de comandos de la sesión actual.
Valores válidos: 1 - 32768 ( Int32 )
Valor predeterminado: 4096
Para determinar el número de comandos guardados actualmente en el historial de comandos, escriba:
(Get-History).Count
Para ver los comandos guardados en el historial de sesiones, use el Get-History cmdlet . Para obtener más información, vea about_History.
$Ofs
El separador de campos de salida (OFS) especifica el carácter que separa los elementos de una matriz que se convierte en una cadena.
Valores válidos: cualquier cadena.
Valor predeterminado: espacio
De forma predeterminada, la variable no existe y el separador del archivo de salida es un espacio, pero puede agregar esta variable y $OFS establecerla en cualquier cadena. Puede cambiar el valor de en la sesión; para $OFS ello, escriba $OFS="<value>" .
Nota
Si espera el valor predeterminado de un espacio ( ) en la salida de script, módulo o configuración, tenga cuidado de que el valor predeterminado no se haya cambiado en ningún otro lugar " " $OFS del código.
Ejemplos
En este ejemplo se muestra que se usa un espacio para separar los valores cuando una matriz se convierte en una cadena. En este caso, una matriz de enteros se almacena en una variable y, a continuación, la variable se convierte como una cadena.
$array = 1,2,3,4
[string]$array
1 2 3 4
Para cambiar el separador, agregue $OFS la variable asignándose un valor.
La variable debe denominarse $OFS .
$OFS = "+"
[string]$array
1+2+3+4
Para restaurar el comportamiento predeterminado, puede asignar un espacio ( ) al " " valor de o eliminar la $OFS variable. Los siguientes comandos eliminan la variable y, a continuación, comprueban que el separador es un espacio.
Remove-Variable OFS
[string]$array
1 2 3 4
$OutputEncoding
Determina el método de codificación de caracteres que PowerShell usa cuando envía texto a otras aplicaciones.
Por ejemplo, si una aplicación devuelve cadenas Unicode a PowerShell, es posible que tenga que cambiar el valor a UnicodeEncoding para enviar los caracteres correctamente.
Los valores válidos son los siguientes: Objetos derivados de una clase Encoding, como ASCIIEncoding, SBCSCodePageEncoding, UTF7Encoding, UTF8Encoding, UTF32Encoding y UnicodeEncoding.
Valor predeterminado: objeto UTF8Encoding (System.Text.UTF8Encoding)
Ejemplos
En este ejemplo se muestra cómo hacer que el comando de Windows findstr.exe funcione en PowerShell en un equipo localizado para un idioma que usa caracteres Unicode, como el chino.
El primer comando busca el valor de $OutputEncoding . Dado que el valor es un objeto de codificación, muestra solo su propiedad EncodingName.
$OutputEncoding.EncodingName
En este ejemplo, sefindstr.exe comando para buscar dos caracteres en chino que están presentes en el Test.txt archivo. Cuando este findstr.exe comando se ejecuta en el símbolo del sistema de Windows ( cmd.exe), findstr.exe encuentra los caracteres en el archivo de texto. Sin embargo, al ejecutar el mismo comando findstr.exe en PowerShell, los caracteres no se encuentran porque PowerShell los envía findstr.exe en texto ASCII, en lugar de en texto Unicode.
findstr <Unicode-characters>
Para que el comando funcione en PowerShell, establezca el valor de en el valor de la propiedad $OutputEncoding OutputEncoding de la consola, que se basa en la configuración regional seleccionada para Windows. Dado que OutputEncoding es una propiedad estática de la consola, use dos puntos y comas ( :: ) en el comando .
$OutputEncoding = [console]::OutputEncoding
$OutputEncoding.EncodingName
OEM United States
Después del cambio de codificación, findstr.exe comando busca los caracteres Unicode.
findstr <Unicode-characters>
test.txt: <Unicode-characters>
$ProgressPreference
Determina cómo Responde PowerShell a las actualizaciones de progreso generadas por un script, cmdlet o proveedor, como las barras de progreso generadas por el cmdlet Write-Progress.
El Write-Progress cmdlet crea barras de progreso que muestran el estado de un comando.
Los valores válidos son los siguientes:
- Detener: no muestra la barra de progreso. En su lugar, muestra un mensaje de error y deja de ejecutarse.
- Preguntar: no muestra la barra de progreso. Solicita permiso para continuar. Si responde con
Yo , se muestra la barra deAprogreso. - Continuar:(valor predeterminado) Muestra la barra de progreso y continúa con la ejecución.
- SilentlyContinue: ejecuta el comando, pero no muestra la barra de progreso.
$PSEmailServer
Especifica el servidor de correo electrónico predeterminado que se usa para enviar mensajes de correo electrónico. Los cmdlets que envían correo electrónico usan esta variable de preferencia, como el cmdlet Send-MailMessage.
$PSDefaultParameterValues
Especifica los valores predeterminados para los parámetros de cmdlets y funciones avanzadas.
El valor de es una tabla hash donde la clave consta del nombre del cmdlet y el nombre del parámetro $PSDefaultParameterValues separados por dos puntos ( : ). El valor es un valor predeterminado personalizado que especifique.
$PSDefaultParameterValues se introdujo en PowerShell 3.0.
Para obtener más información sobre esta variable de preferencia, vea about_Parameters_Default_Values.
$PSModuleAutoloadingPreference
Habilita y deshabilita la importación automática de módulos en la sesión. All es el valor predeterminado. Independientemente del valor de la variable, puede usar Import-Module para importar un módulo.
Los valores válidos son:
- Todos: los módulos se importan automáticamente en el primer uso. Para importar un módulo, obtenga o use cualquier comando del módulo. Por ejemplo, use
Get-Command. - ModuleQualified: los módulos se importan automáticamente solo cuando un usuario usa el nombre calificado por el módulo de un comando en el módulo. Por ejemplo, si el usuario escribe
MyModule\MyCommand, PowerShell importa el módulo MyModule. - Ninguno: la importación automática de módulos está deshabilitada en la sesión. Para importar un módulo, use el
Import-Modulecmdlet .
Para obtener más información sobre la importación automática de módulos, vea about_Modules.
$PSSessionApplicationName
Especifica el nombre de aplicación predeterminado para un comando remoto que usa la tecnología servicios web para administración (WS-Management). Para obtener más información, vea Acerca de Administración remota de Windows.
El nombre de aplicación predeterminado del sistema es WSMAN , pero puede usar esta variable de preferencia para cambiar el valor predeterminado.
El nombre de la aplicación es el último nodo de un URI de conexión. Por ejemplo, el nombre de la aplicación en el siguiente URI de ejemplo es WSMAN .
http://Server01:8080/WSMAN
El nombre de aplicación predeterminado se usa cuando el comando remoto no especifica un URI de conexión ni un nombre de aplicación.
El servicio WinRM usa el nombre de la aplicación para seleccionar un agente de escucha para dar servicio a la solicitud de conexión. El valor del parámetro debe coincidir con el valor de la propiedad URLPrefix de un agente de escucha en el equipo remoto.
Para invalidar el valor predeterminado del sistema y el valor de esta variable, y seleccionar un nombre de aplicación diferente para una sesión determinada, use los parámetros ConnectionURI o ApplicationName de los cmdlets New-PSSession, Enter-PSSessiono Invoke-Command.
La $PSSessionApplicationName variable de preferencia se establece en el equipo local, pero especifica un agente de escucha en el equipo remoto. Si el nombre de la aplicación que especifique no existe en el equipo remoto, se produce un error en el comando para establecer la sesión.
$PSSessionConfigurationName
Especifica la configuración de sesión predeterminada que se usa para las PSSessions creadas en la sesión actual.
Esta variable de preferencia se establece en el equipo local, pero especifica una configuración de sesión que se encuentra en el equipo remoto.
El valor de la $PSSessionConfigurationName variable es un URI de recurso completo.
El valor predeterminado http://schemas.microsoft.com/PowerShell/microsoft.PowerShell indica la configuración de sesión de Microsoft.PowerShell en el equipo remoto.
Si solo especifica un nombre de configuración, se antepone el siguiente URI de esquema:
http://schemas.microsoft.com/PowerShell/
Puede invalidar el valor predeterminado y seleccionar una configuración de sesión diferente para una sesión determinada mediante el parámetro ConfigurationName de los New-PSSession Enter-PSSession cmdlets , o Invoke-Command .
Puede cambiar el valor de esta variable en cualquier momento. Cuando lo haga, recuerde que la configuración de sesión que seleccione debe existir en el equipo remoto. Si no es así, se produce un error en el comando para crear una sesión que usa la configuración de sesión.
Esta variable de preferencia no determina qué configuraciones de sesión local se usan cuando los usuarios remotos crean una sesión que se conecta a este equipo. Sin embargo, puede usar los permisos para las configuraciones de sesión local para determinar qué usuarios pueden usarlas.
$PSSessionOption
Establece los valores predeterminados para las opciones avanzadas de usuario en una sesión remota. Estas preferencias de opción invalidan los valores predeterminados del sistema para las opciones de sesión.
La $PSSessionOption variable contiene un objeto PSSessionOption. Para obtener más información, vea System.Management.Automation.Remoting.PSSessionOption.
Cada propiedad del objeto representa una opción de sesión. Por ejemplo, la propiedad NoCompression cambia la compresión de datos durante la sesión.
De forma predeterminada, $PSSessionOption la variable contiene un objeto PSSessionOption con los valores predeterminados para todas las opciones, como se muestra a continuación.
MaximumConnectionRedirectionCount : 5
NoCompression : False
NoMachineProfile : False
ProxyAccessType : None
ProxyAuthentication : Negotiate
ProxyCredential :
SkipCACheck : False
SkipCNCheck : False
SkipRevocationCheck : False
OperationTimeout : 00:03:00
NoEncryption : False
UseUTF16 : False
IncludePortInSPN : False
OutputBufferingMode : None
Culture :
UICulture :
MaximumReceivedDataSizePerCommand :
MaximumReceivedObjectSize : 209715200
ApplicationArguments :
OpenTimeout : 00:03:00
CancelTimeout : 00:01:00
IdleTimeout : -00:00:00.0010000
Para obtener descripciones de estas opciones y más información, vea New-PSSessionOption. Para obtener más información sobre las sesiones y comandos remotos, vea about_Remote y about_PSSessions.
Para cambiar el valor de la variable de preferencia, use el cmdlet para crear un objeto $PSSessionOption New-PSSessionOption PSSessionOption con los valores de opción que prefiera. Guarde la salida en una variable denominada $PSSessionOption .
$PSSessionOption = New-PSSessionOption -NoCompression
Para usar la $PSSessionOption variable de preferencia en cada sesión de PowerShell, agregue un comando que cree la variable al perfil de New-PSSessionOption $PSSessionOption PowerShell. Para obtener más información, vea about_Profiles.
Puede establecer opciones personalizadas para una sesión remota determinada. Las opciones que establezca tienen prioridad sobre los valores predeterminados del sistema y el valor de la $PSSessionOption variable de preferencia.
Para establecer opciones de sesión personalizadas, use New-PSSessionOption el cmdlet para crear un objeto PSSessionOption. A continuación, use el objeto PSSessionOption como valor del parámetro SessionOption en los cmdlets que crean una sesión, como New-PSSession , y Enter-PSSession Invoke-Command .
$Transcript
Lo usa Start-Transcript para especificar el nombre y la ubicación del archivo de transcripción. Si no especifica un valor para el parámetro Path, usa la ruta de acceso Start-Transcript en el valor de la variable $Transcript global. Si no ha creado esta variable, Start-Transcript almacena las transcripciones en el $Home\My Documents directorio como \PowerShell_transcript.<time-stamp>.txt archivos.
$VerbosePreference
Determina cómo Responde PowerShell a los mensajes detallados generados por un script, cmdlet o proveedor, como los mensajes generados por el cmdlet Write-Verbose. Los mensajes detallados describen las acciones realizadas para ejecutar un comando.
De forma predeterminada, no se muestran los mensajes detallados, pero puede cambiar este comportamiento cambiando el valor de $VerbosePreference .
Puede usar el parámetro Común detallado de un cmdlet para mostrar u ocultar los mensajes detallados de un comando específico. Para obtener más información, consulta about_CommonParameters.
Los valores válidos son los siguientes:
- Detener: muestra el mensaje detallado y un mensaje de error y, a continuación, deja de ejecutarse.
- Consultar: muestra el mensaje detallado y, a continuación, muestra un mensaje que le pregunta si desea continuar.
- Continuar: muestra el mensaje detallado y, a continuación, continúa con la ejecución.
- SilentlyContinue: (valor predeterminado) No muestra el mensaje detallado. Continúa ejecutándose.
Ejemplos
En estos ejemplos se muestra el efecto de los distintos valores de $VerbosePreference y el parámetro Verbose para invalidar el valor de preferencia.
En este ejemplo se muestra el efecto del valor SilentlyContinue, que es el valor predeterminado. El comando usa el parámetro Message, pero no escribe un mensaje en la consola de PowerShell.
Write-Verbose -Message "Verbose message test."
Cuando se usa el parámetro Verbose, se escribe el mensaje.
Write-Verbose -Message "Verbose message test." -Verbose
VERBOSE: Verbose message test.
En este ejemplo se muestra el efecto del valor Continue. La $VerbosePreference variable se establece en Continue y se muestra el mensaje.
$VerbosePreference = "Continue"
Write-Verbose -Message "Verbose message test."
VERBOSE: Verbose message test.
En este ejemplo se usa el parámetro Verbose con un valor de $false que invalida el valor Continue. No se muestra el mensaje.
Write-Verbose -Message "Verbose message test." -Verbose:$false
En este ejemplo se muestra el efecto del valor Stop. La $VerbosePreference variable se establece en Stop y se muestra el mensaje. El comando se detiene.
$VerbosePreference = "Stop"
Write-Verbose -Message "Verbose message test."
VERBOSE: Verbose message test.
Write-Verbose : The running command stopped because the preference variable
"VerbosePreference" or common parameter is set to Stop: Verbose message test.
At line:1 char:1
+ Write-Verbose -Message "Verbose message test."
En este ejemplo se usa el parámetro Verbose con un valor de $false que invalida el valor Stop. No se muestra el mensaje.
Write-Verbose -Message "Verbose message test." -Verbose:$false
En este ejemplo se muestra el efecto del valor Inquire. La $VerbosePreference variable se establece en Inquire. Se muestra el mensaje y se solicita confirmación al usuario.
$VerbosePreference = "Inquire"
Write-Verbose -Message "Verbose message test."
VERBOSE: Verbose message test.
Confirm
Continue with this operation?
[Y] Yes [A] Yes to All [H] Halt Command [?] Help (default is "Y"):
En este ejemplo se usa el parámetro Verbose con un valor de $false que invalida el valor Inquire. No se solicita al usuario y no se muestra el mensaje.
Write-Verbose -Message "Verbose message test." -Verbose:$false
$WarningPreference
Determina cómo Responde PowerShell a los mensajes de advertencia generados por un script, cmdlet o proveedor, como los mensajes generados por el cmdlet Write-Warning.
De forma predeterminada, se muestran los mensajes de advertencia y la ejecución continúa, pero puede cambiar este comportamiento cambiando el valor de $WarningPreference .
Puede usar el parámetro común WarningAction de un cmdlet para determinar cómo responde PowerShell a las advertencias de un comando determinado. Para obtener más información, consulta about_CommonParameters.
Los valores válidos son los siguientes:
- Detener: muestra el mensaje de advertencia y un mensaje de error y, a continuación, deja de ejecutarse.
- Consulta: muestra el mensaje de advertencia y, a continuación, solicita permiso para continuar.
- Continuar: (valor predeterminado) Muestra el mensaje de advertencia y, a continuación, continúa ejecutándose.
- SilentlyContinue: no muestra el mensaje de advertencia. Continúa ejecutándose.
Ejemplos
Estos ejemplos muestran el efecto de los distintos valores de $WarningPreference .
El parámetro WarningAction invalida el valor de preferencia.
En este ejemplo se muestra el efecto del valor predeterminado, Continue.
$m = "This action can delete data."
Write-Warning -Message $m
WARNING: This action can delete data.
En este ejemplo se usa el parámetro WarningAction con el valor SilentlyContinue para suprimir la advertencia. No se muestra el mensaje.
$m = "This action can delete data."
Write-Warning -Message $m -WarningAction SilentlyContinue
En este ejemplo se $WarningPreference cambia la variable al valor SilentlyContinue. No se muestra el mensaje.
$WarningPreference = "SilentlyContinue"
$m = "This action can delete data."
Write-Warning -Message $m
En este ejemplo se usa el parámetro WarningAction para detenerse cuando se genera una advertencia.
$m = "This action can delete data."
Write-Warning -Message $m -WarningAction Stop
WARNING: This action can delete data.
Write-Warning : The running command stopped because the preference variable
"WarningPreference" or common parameter is set to Stop:
This action can delete data.
At line:1 char:1
+ Write-Warning -Message $m -WarningAction Stop
En este ejemplo se $WarningPreference cambia la variable al valor Inquire. Se solicita confirmación al usuario.
$WarningPreference = "Inquire"
$m = "This action can delete data."
Write-Warning -Message $m
WARNING: This action can delete data.
Confirm
Continue with this operation?
[Y] Yes [A] Yes to All [H] Halt Command [?] Help (default is "Y"):
En este ejemplo se usa el parámetro WarningAction con el valor SilentlyContinue. El comando continúa ejecutándose y no se muestra ningún mensaje.
$m = "This action can delete data."
Write-Warning -Message $m -WarningAction SilentlyContinue
En este ejemplo se cambia $WarningPreference el valor a Detener.
$WarningPreference = "Stop"
$m = "This action can delete data."
Write-Warning -Message $m
WARNING: This action can delete data.
Write-Warning : The running command stopped because the preference variable
"WarningPreference" or common parameter is set to Stop:
This action can delete data.
At line:1 char:1
+ Write-Warning -Message $m
En este ejemplo se usa WarningAction con el valor Inquire. Cuando se produce una advertencia, se solicita al usuario.
$m = "This action can delete data."
Write-Warning -Message $m -WarningAction Inquire
WARNING: This action can delete data.
Confirm
Continue with this operation?
[Y] Yes [A] Yes to All [H] Halt Command [?] Help (default is "Y"):
$WhatIfPreference
Determina si WhatIf se habilita automáticamente para cada comando que lo admita. Cuando WhatIf está habilitado, el cmdlet notifica el efecto esperado del comando, pero no ejecuta el comando.
Los valores válidos son los siguientes:
- False (0, no habilitado): (valor predeterminado) WhatIf no está habilitado automáticamente. Para habilitarla manualmente, use el parámetro WhatIf del cmdlet.
- True (1, habilitado): WhatIf se habilita automáticamente en cualquier comando que lo admita. Los usuarios pueden usar el parámetro WhatIf con el valor False para deshabilitarlo manualmente, como
-WhatIf:$false.
Ejemplos
Estos ejemplos muestran el efecto de los distintos valores de $WhatIfPreference .
Muestran cómo usar el parámetro WhatIf para invalidar el valor de preferencia de un comando específico.
En este ejemplo se muestra el efecto de $WhatIfPreference la variable establecida en el valor predeterminado, False. Use Get-ChildItem para comprobar que el archivo existe.
Remove-Item elimina el archivo. Una vez eliminado el archivo, puede comprobar la eliminación con Get-ChildItem .
Get-ChildItem -Path .\test.txt
Remove-Item -Path ./test.txt
Directory: C:\Test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 9/13/2019 10:53 10 test.txt
Get-ChildItem -Path .\test.txt
Get-ChildItem : Cannot find path 'C:\Test\test.txt' because it does not exist.
At line:1 char:1
+ Get-ChildItem -File test.txt
En este ejemplo se muestra el efecto de usar el parámetro WhatIf cuando el valor $WhatIfPreference de es False.
Compruebe si el archivo existe.
Get-ChildItem -Path .\test2.txt
Directory: C:\Test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2/28/2019 17:06 12 test2.txt
Use el parámetro WhatIf para determinar el resultado de intentar eliminar el archivo.
Remove-Item -Path .\test2.txt -WhatIf
What if: Performing the operation "Remove File" on target "C:\Test\test2.txt".
Compruebe que el archivo no se ha eliminado.
Get-ChildItem -Path .\test2.txt
Directory: C:\Test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2/28/2019 17:06 12 test2.txt
En este ejemplo se muestra el efecto de $WhatIfPreference la variable establecida en el valor True. Cuando se usa para eliminar un archivo, se muestra la ruta de acceso del archivo, pero no Remove-Item se elimina.
Intente eliminar un archivo. Se muestra un mensaje sobre lo que ocurriría si Remove-Item se ejecutara, pero el archivo no se elimina.
$WhatIfPreference = "True"
Remove-Item -Path .\test2.txt
What if: Performing the operation "Remove File" on target "C:\Test\test2.txt".
Use Get-ChildItem para comprobar que el archivo no se ha eliminado.
Get-ChildItem -Path .\test2.txt
Directory: C:\Test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2/28/2019 17:06 12 test2.txt
En este ejemplo se muestra cómo eliminar un archivo cuando el valor de $WhatIfPreference es True. Usa el parámetro WhatIf con un valor de $false . Use Get-ChildItem para comprobar que el archivo se eliminó.
Remove-Item -Path .\test2.txt -WhatIf:$false
Get-ChildItem -Path .\test2.txt
Get-ChildItem : Cannot find path 'C:\Test\test2.txt' because it does not exist.
At line:1 char:1
+ Get-ChildItem -Path .\test2.txt
A continuación se muestran ejemplos del Get-Process cmdlet que no admite WhatIf y Stop-Process que admite WhatIf. El $WhatIfPreference valor de la variable es True.
Get-Process no admite WhatIf. Cuando se ejecuta el comando, muestra el proceso winword.
Get-Process -Name Winword
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
130 119.84 173.38 8.39 15024 4 WINWORD
Stop-Process admite WhatIf. El proceso de Winword no se detiene.
Stop-Process -Name Winword
What if: Performing the operation "Stop-Process" on target "WINWORD (15024)".
Puede invalidar el Stop-Process comportamiento WhatIf mediante el parámetro WhatIf con un valor de $false . El proceso de Winword se detiene.
Stop-Process -Name Winword -WhatIf:$false
Para comprobar que se ha detenido el proceso de Winword, use Get-Process .
Get-Process -Name Winword
Get-Process : Cannot find a process with the name "Winword".
Verify the process name and call the cmdlet again.
At line:1 char:1
+ Get-Process -Name Winword