about_Preference_Variables

Descripción breve

Variables que personalizan el comportamiento de PowerShell.

Descripción larga

PowerShell incluye un conjunto de variables que permiten personalizar su comportamiento. Estas variables de preferencia funcionan como las opciones en 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. Algunos cmdlets tienen parámetros que permiten 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 High
$DebugPreference SilentlyContinue
$ErrorActionPreference Continue
$ErrorView ConciseView
$FormatEnumerationLimit 4
$InformationPreference SilentlyContinue
$LogCommandHealthEvent $false (no registrado)
$LogCommandLifecycleEvent $false (no registrado)
$LogEngineHealthEvent $true (registrado)
$LogEngineLifecycleEvent $true (registrado)
$LogProviderHealthEvent $true (registrado)
$LogProviderLifecycleEvent $true (registrado)
$MaximumHistoryCount 4096
$OFS Carácter de espacio (" ")
$OutputEncoding Objecto UTF8Encoding
$ProgressPreference Continue
$PSDefaultParameterValues @{} (tabla hash vacía)
$PSEmailServer $null (ninguno)
$PSModuleAutoLoadingPreference All
$PSNativeCommandArgumentPassing Windows en Windows, Standard en no Windows
$PSNativeCommandUseErrorActionPreference $false
$PSSessionApplicationName 'wsman'
$PSSessionConfigurationName 'http://schemas.microsoft.com/powershell/Microsoft.PowerShell'
$PSSessionOption Objecto PSSessionOption
$PSStyle Objecto PSStyle
$Transcript $null (ninguno)
$VerbosePreference SilentlyContinue
$WarningPreference Continue
$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, consulte about_Environment_Variables.

  • env:PSExecutionPolicyPreference
  • $env:PSModulePath

Nota:

Los cambios en la variable de preferencia solo surten 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, consulte 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 siguiente comando muestra el valor de la $ConfirmPreference variable.

 $ConfirmPreference
High

Para cambiar el valor de una variable, use una instrucción de asignación. Por ejemplo, la siguiente instrucción cambia el $ConfirmPreference valor del parámetro a Medium.

$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éguelas al perfil de PowerShell. Para obtener más información, consulte 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, al ejecutar un comando remoto, el valor de la variable del $DebugPreference equipo remoto determina cómo Responde PowerShell a los mensajes de depuración.

Para obtener más información sobre los comandos remotos, consulte about_Remote.

$ConfirmPreference

Determina si PowerShell le pide automáticamente confirmación antes de ejecutar un cmdlet o una función.

La $ConfirmPreference variable toma uno de los ConfirmImpact valores de enumeración: High, Medium, Low o None.

A los cmdlets y funciones se les asigna un riesgo de alto, medio o bajo. Cuando el valor de la $ConfirmPreference variable es menor o igual que el riesgo asignado a un cmdlet o función, PowerShell le pedirá automáticamente confirmación antes de ejecutar el cmdlet o la función.

Si el valor de la $ConfirmPreference variable es None, PowerShell nunca le pedirá automáticamente antes 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 $ConfirmPreference parámetro Confirm de un cmdlet o una función. Para solicitar confirmación, use -Confirm. Para suprimir la confirmación, use -Confirm:$false.

Valores válidos de $ConfirmPreference:

  • Ninguno: PowerShell no solicita automáticamente. Para solicitar 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 automáticamente confirmación 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 cambiarlo.

Los cmdlets y 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 $ConfirmPreference es High, la confirmación automática rara vez 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 valor predeterminado de la $ConfirmPreference variable, High. El valor Alto solo confirma las funciones y los 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 agregar -Confirm al sistema se le pide 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, un cmdlet o un proveedor, o por un Write-Debug comando en la línea de comandos.

La $DebugPreference variable toma uno de los ActionPreference valores de enumeración: SilentlyContinue, Stop, Continue, Inquire, Ignore, Suspend o Break.

Algunos cmdlets muestran mensajes de depuración, que suelen ser mensajes técnicos diseñados para programadores y profesionales de soporte técnico. De forma predeterminada, los mensajes de depuración no se muestran, pero puede mostrar mensajes de depuración cambiando el valor de $DebugPreference.

Puede usar el parámetro común Depurar 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:

  • Interrumpir : escriba el depurador cuando se produzca un error o cuando se produzca una excepción.
  • Detener: muestra el mensaje de depuración y deja de ejecutarse. Escribe un error en la consola.
  • Inquire: muestra el mensaje de depuración y le pregunta si desea continuar.
  • Continuar: muestra el mensaje de depuración y continúa con la ejecución.
  • SilentlyContinue: (Valor predeterminado) No hay ningún efecto. El mensaje de depuración no se muestra y la ejecución continúa sin interrupción.

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 $DebugPreference variable a Continue.

Ejemplos

En los ejemplos siguientes se muestra el efecto de cambiar los valores de $DebugPreference cuando se escribe un Write-Debug comando en la línea de comandos. El cambio afecta a todos los mensajes de depuración, incluidos los mensajes generados por cmdlets y scripts. Los ejemplos muestran 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 valor predeterminado de la $DebugPreference variable, SilentlyContinue. De forma predeterminada, el Write-Debug mensaje de depuración del cmdlet no se 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 $false para suprimir el mensaje de un solo comando. No se muestra el mensaje de depuración.

Write-Debug -Message "Hello, World" -Debug:$false

En este ejemplo se muestra el efecto de $DebugPreference 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 $false para suprimir el mensaje de un solo comando. El mensaje de depuración no se muestra y no se detiene el procesamiento.

Write-Debug -Message "Hello, World" -Debug:$false

En este ejemplo se muestra el efecto de $DebugPreference establecerse en el valor de 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 $false para suprimir el mensaje de un solo 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.

La $ErrorActionPreference variable toma uno de los ActionPreference valores de enumeración: SilentlyContinue, Stop, Continue, Inquire, Ignore, Suspend o Break.

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 ejecutando el comando. El valor Ignore está pensado para uso por comando, no para usarlo como preferencia guardada. Ignore no es un valor válido para la $ErrorActionPreference variable.
  • Inquire: muestra el mensaje de error y le pregunta si desea continuar.
  • SilentlyContinue: Sin efecto. El mensaje de error no se muestra 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 al flujo de error.
  • Suspender: suspende automáticamente un trabajo de flujo de trabajo para permitir una investigación adicional. Después de la investigación, se puede reanudar el flujo de trabajo. El valor Suspend está pensado para uso por comando, no para usarlo como preferencia guardada. Suspender no es un valor válido para la $ErrorActionPreference variable.

$ErrorActionPreference y el parámetro ErrorAction no afectan a cómo Responde PowerShell 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 , consulte about_CommonParameters.

Muchos comandos nativos escriben en stderr a modo de secuencia alternativa para obtener información adicional. Este comportamiento puede llevar a confusión cuando se examinan los errores; también, se puede perder la información de salida adicional para el usuario si $ErrorActionPreference se establece en un estado que silencia la salida.

A partir de PowerShell 7.2, los registros de error redirigidos desde comandos nativos, como cuando se usan operadores de redireccionamiento (2>&1), no se escriben en la $Error variable y la variable $ErrorActionPreference de preferencia no afecta a la salida redirigida.

PowerShell 7.3 ha agregado una característica experimental que permite controlar cómo se controlan los mensajes escritos en stderr .

Para obtener más información, consulte $PSNativeCommandUseErrorActionPreference.

Ejemplos

Estos ejemplos muestran 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 el $ErrorActionPreference valor predeterminado Continue. Se genera un error de no terminación. El mensaje se muestra y continúa el procesamiento.

# 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 el $ErrorActionPreference 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 muestra el conjunto en $ErrorActionPreferenceSilentlyContinue. 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 el $ErrorActionPreference conjunto en Detener. También muestra el objeto adicional generado en la $Error variable.

# Change the ErrorActionPreference to 'Stop'
$ErrorActionPreference = 'Stop'
# Error message 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.

La $ErrorView variable toma uno de los ErrorView valores de enumeración: NormalView, CategoryView o ConciseView.

Los valores válidos son los siguientes:

  • ConcisoView: (valor predeterminado) Proporciona un mensaje de error conciso y una vista refactorizado para los generadores de módulos avanzados. A partir de PowerShell 7.2, si el error procede de la línea de comandos o 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, los códigos de color ANSI se usan para proporcionar énfasis de color. El color de énfasis se puede cambiar en $Host.PrivateData.ErrorAccentColor. Use Get-Error el cmdlet para obtener una vista detallada completa del error completo, incluidas las excepciones internas.

    ConcisoView 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: vista concisa y estructurada diseñada para entornos de producción. El formato es el siguiente:

    {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 de $ErrorView es el valor predeterminado, ConcisoView. Get-ChildItem se usa para buscar un directorio inexistente.

Get-ChildItem -path 'C:\NoRealDirectory'
Get-ChildItem: Can't find path 'C:\NoRealDirectory' because it doesn't exist.

En este ejemplo se muestra cómo aparece un error cuando el valor de $ErrorView es el valor predeterminado, ConcisoView. Script.ps1 se ejecuta y produce un error de la Get-Item instrucción .

./Script.ps1
Get-Item: C:\Script.ps1
Line |
  11 | Get-Item -Path .\stuff
     | ^ Can't find path 'C:\demo\stuff' because it doesn't exist.

En este ejemplo se muestra cómo aparece un error cuando se cambia el valor de $ErrorView a NormalView. Get-ChildItem se usa para buscar un archivo no existente.

Get-ChildItem -Path C:\nofile.txt
Get-ChildItem : Can't find path 'C:\nofile.txt' because it doesn't exist.
At line:1 char:1
+ Get-ChildItem -Path C:\nofile.txt

En este ejemplo se muestra cómo aparece el mismo error cuando se cambia el valor de $ErrorView 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 de errores. No cambia la estructura del objeto de error almacenado en la $Error variable automática. Para obtener información sobre la $Error variable automática, consulte about_automatic_variables.

El siguiente comando toma el objeto ErrorRecord asociado al error más reciente en la matriz de errores, el elemento 0 y da formato a las propiedades del objeto de 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 pantalla. Esta variable no afecta a los objetos subyacentes, solo la pantalla. Cuando el valor de $FormatEnumerationLimit es menor que el número de elementos enumerados, PowerShell agrega puntos suspensivos (...) para indicar los elementos que no 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 visualización de 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 ejecutar servicios y otro para los servicios detenidos . Usa un Get-Service comando para obtener todos los servicios y, a continuación, envía los resultados a través de la canalización al Group-Object cmdlet , que agrupa los resultados por el estado del servicio.

El resultado es una tabla que enumera el estado en 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 $FormatEnumerationLimit tiene un valor 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 Group-Object para mostrar los 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 preferencias de flujo de información que desea mostrar a los usuarios. En concreto, los 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.

La $InformationPreference variable toma uno de los ActionPreference valores de enumeración: SilentlyContinue, Stop, Continue, Inquire, Ignore, Suspend o Break.

Los valores válidos son los siguientes:

  • Interrumpir : escriba el depurador al escribir en el flujo de información.
  • Detener: detiene un comando o script en una aparición del Write-Information comando.
  • Inquire: muestra el mensaje informativo que especifique en un Write-Information comando y, a continuación, pregunta si desea continuar.
  • Continuar: muestra el mensaje informativo y continúa ejecutándose.
  • SilentlyContinue: (Valor predeterminado) No hay ningún efecto. Los mensajes informativos no se muestran y el script continúa sin interrupción.

$Log*Evento

Las variables de preferencias 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 preferencias Log*Event para personalizar el registro, como registrar 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 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 cierre de las sesiones. El valor predeterminado es $true (registrado).
  • $LogProviderHealthEvent: registra errores de proveedor, como errores de lectura y escritura, errores de búsqueda e 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, consulte about_Providers.

Para habilitar un evento Log*, escriba la variable con un valor de $true, 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, consulte 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, consulte about_History.

$OFS

El separador de campo 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 $OFS variable no existe y el separador de archivos de salida es un espacio, pero puede agregar esta variable y establecerla en cualquier cadena. Puede cambiar el valor de $OFS en la sesión escribiendo $OFS="<value>".

Nota:

Si espera el valor predeterminado de un espacio (" ") en el script, el módulo o la salida de configuración, tenga cuidado de que el $OFS valor predeterminado no se haya cambiado en otro lugar 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 la $OFS variable asignando un valor a ella. La variable debe denominarse $OFS.

$OFS = "+"
[string]$array
1+2+3+4

Para restaurar el comportamiento predeterminado, puede asignar un espacio (" ") al valor de $OFS o eliminar la 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 al canalización de datos en aplicaciones nativas.

Nota:

En la mayoría de los escenarios, el valor de $OutputEncoding debe alinearse con el valor de [Console]::InputEncoding.

Los valores válidos son los siguientes: Objetos derivados de una clase de codificación, como ASCIIEncoding, UTF7Encoding, UTF8Encoding, UTF32Encoding y UnicodeEncoding.

Valor predeterminado: objeto UTF8Encoding .

Ejemplos

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 los ejemplos restantes se usa el siguiente script de PowerShell guardado como hexdump.ps1 para ilustrar el comportamiento de $OutputEncoding.

$inputStream = [Console]::OpenStandardInput()
try {
    $buffer = [byte[]]::new(1024)
    $read = $inputStream.Read($buffer, 0, $buffer.Length)
    Format-Hex -InputObject $buffer -Count $read
} finally {
    $inputStream.Dispose()
}

En el ejemplo siguiente se muestra cómo el valor café de cadena se codifica en bytes cuando se canaliza en hexdump.ps1 creado anteriormente. Muestra que el valor de cadena se codifica mediante el esquema UTF8Encoding.

'café' | pwsh -File ./hexdump.ps1
   Label: Byte[] (System.Byte[]) <28873E25>

          Offset Bytes                                           Ascii
                 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
          ------ ----------------------------------------------- -----
0000000000000000 63 61 66 C3 A9 0D 0A                            caf�

En el ejemplo siguiente se muestra cómo cambian los bytes al cambiar la codificación a UnicodeEncoding.

$OutputEncoding = [System.Text.Encoding]::Unicode
'café' | pwsh -File ./hexdump.ps1
   Label: Byte[] (System.Byte[]) <515A7DC3>

          Offset Bytes                                           Ascii
                 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
          ------ ----------------------------------------------- -----
0000000000000000 FF FE 63 00 61 00 66 00 E9 00 0D 00 0A 00       ÿþc a f é � �

$ProgressPreference

Determina cómo PowerShell responde 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.

La $ProgressPreference variable toma uno de los ActionPreference valores de enumeración: SilentlyContinue, Stop, Continue, Inquire, Ignore, Suspend o Break.

Los valores válidos son los siguientes:

  • Interrumpir : escriba el depurador al escribir en el flujo de progreso.
  • Detener: no muestra la barra de progreso. En su lugar, muestra un mensaje de error y deja de ejecutarse.
  • Inquire: no muestra la barra de progreso. Solicita permiso para continuar. Si responde con Y o A, muestra la barra de progreso.
  • 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.

$PSDefaultParameterValues

Especifica valores predeterminados para los parámetros de cmdlets y funciones avanzadas. El valor de $PSDefaultParameterValues es una tabla hash donde la clave consta del nombre del cmdlet y el nombre del parámetro 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, consulte about_Parameters_Default_Values.

$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 .

$PSModuleAutoloadingPreference

Habilita y deshabilita la importación automática de módulos en la sesión. La $PSModuleAutoloadingPreference variable no existe de forma predeterminada. El comportamiento predeterminado cuando la variable no está definida es la misma que $PSModuleAutoloadingPreference = 'All'.

Para importar automáticamente un módulo, obtenga o use un comando incluido en el módulo.

La $PSModuleAutoloadingPreference variable toma uno de los PSModuleAutoLoadingPreference valores de enumeración:

  • All: los módulos se importan automáticamente en el primer uso.
  • ModuleQualified: los módulos solo se importan automáticamente cuando un usuario usa el nombre completo del módulo de un comando en el módulo. Por ejemplo, si el usuario escribe MyModule\MyCommand, PowerShell importa el módulo MyModule .
  • None: deshabilita la importación automática de módulos. Para importar un módulo, use el Import-Module cmdlet .

Para obtener más información sobre la importación automática de módulos, consulte about_Modules.

$PSNativeCommandArgumentPassing

PowerShell 7.3 cambió la forma en que analiza la línea de comandos para los comandos nativos. La nueva $PSNativeCommandArgumentPassing variable de preferencia controla este comportamiento.

Precaución

El nuevo comportamiento es un cambio importante del comportamiento anterior. Puede provocar la interrupción de los scripts y la automatización que se usan como soluciones alternativas para diferentes problemas al invocar aplicaciones nativas.

La variable $PSNativeCommandArgumentPassing automática permite seleccionar el comportamiento en tiempo de ejecución. Los valores válidos son Legacy, Standard y Windows. Legacy es el comportamiento que se ha usado hasta ahora.

La $PSNativeCommandArgumentPassing variable se define de forma predeterminada, pero el valor es específico de la plataforma.

  • En Windows, la preferencia se establece Windowsen .
  • En plataformas que no son de Windows, la preferencia se establece Standarden .
  • Si ha quitado la $PSNativeCommandArgumentPassing variable, PowerShell usa el Standard comportamiento.

El comportamiento de Windows y Standard el modo son los mismos, excepto en Windows modo , PowerShell usa el Legacy comportamiento del argumento pasando al ejecutar los archivos siguientes.

  • cmd.exe
  • cscript.exe
  • find.exe
  • sqlcmd.exe
  • wscript.exe
  • Archivos que terminan con:
    • .bat
    • .cmd
    • .js
    • .vbs
    • .wsf

Si $PSNativeCommandArgumentPassing se establece en Legacy o Standard, el analizador no comprueba estos archivos. Para obtener ejemplos del nuevo comportamiento, consulte about_Parsing.

PowerShell 7.3 también agregó la capacidad de realizar un seguimiento del enlace de parámetros para comandos nativos. Para más información, vea Trace-Command.

$PSNativeCommandUseErrorActionPreference

Cuando $PSNativeCommandUseErrorActionPreference es $true, los comandos nativos con códigos de salida distintos de cero emiten errores según $ErrorActionPreference.

Algunos comandos nativos, como robocopy , usan códigos de salida distintos de cero para representar información que no sea errores. En estos casos, puede deshabilitar temporalmente el comportamiento y evitar que los códigos de salida distintos de cero emita errores.

& {
    # Disable $PSNativeCommandUseErrorActionPreference for this scriptblock
    $PSNativeCommandUseErrorActionPreference = $false
    robocopy.exe D:\reports\operational "\\reporting\ops" CY2022Q4.md
    if ($LASTEXITCODE -gt 8) {
        throw "robocopy failed with exit code $LASTEXITCODE"
    }
}

En este ejemplo, la $PSNativeCommandUseErrorActionPreference variable se cambia dentro de un scriptblock. El cambio es local para el scriptblock. Cuando se cierra el scriptblock, la variable vuelve a su valor anterior.

$PSSessionApplicationName

Especifica el nombre de aplicación predeterminado para un comando remoto que usa servicios web para la tecnología de administración (WS-Management). Para obtener más información, consulte Acerca de la 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 atender 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 Conectar ionURI o ApplicationName de los cmdlets New-PSSession, Enter-PSSession o 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 crear nuevas sesiones 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 http://schemas.microsoft.com/PowerShell/microsoft.PowerShell predeterminado indica la configuración de sesión de Microsoft.PowerShell en el equipo remoto.

Si especifica solo 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-PSSessioncmdlets , Enter-PSSessiono 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 use 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 usarlos.

$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 gira de compresión de datos durante la sesión.

De forma predeterminada, la $PSSessionOption 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, consulte New-PSSessionOption. Para obtener más información sobre los comandos y sesiones remotos, consulte about_Remote y about_PSSessions.

Para cambiar el valor de la $PSSessionOption variable de preferencia, use el New-PSSessionOption cmdlet para crear un objeto 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 New-PSSessionOption comando que cree la variable en el $PSSessionOption perfil de PowerShell. Para obtener más información, consulte 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 el New-PSSessionOption cmdlet para crear un objeto PSSessionOption . A continuación, use el objeto PSSessionOption como valor del parámetro SessionOption en cmdlets que crean una sesión, como New-PSSession, Enter-PSSessiony Invoke-Command.

$PSStyle

A partir de PowerShell 7.2, ahora puede acceder a la $PSStyle variable automática para ver y cambiar la representación de la salida de la cadena ANSI. $PSStyle es una instancia de la clase PSStyle . Los miembros de esta clase definen cadenas que contienen secuencias de escape ANSI que controlan la representación del texto en el terminal.

Los miembros base devuelven cadenas de secuencias de escape de ANSI asignadas a sus nombres. Los valores se pueden configurar para permitir la personalización. Los nombres de propiedad facilitan la creación de cadenas decoradas mediante la finalización de tabulación. Por ejemplo:

"$($PSStyle.Background.BrightCyan)Power$($PSStyle.Underline)$($PSStyle.Bold)Shell$($PSStyle.Reset)"

Los miembros Background y Foreground también tienen un FromRgb() método para especificar el color de 24 bits.

Para más información sobre $PSStyle, consulte Acerca de los terminales ANSI.

$Transcript

Usado por 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 , Start-Transcript usa la ruta de acceso en el valor de la $Transcript variable global. Si no ha creado esta variable, Start-Transcript almacena las transcripciones en la siguiente ubicación con el nombre predeterminado:

  • En Windows: $HOME\Documents
  • En Linux o macOS: $HOME

El nombre de archivo predeterminado es : PowerShell_transcript.<computername>.<random>.<timestamp>.txt.

$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, los mensajes detallados no se muestran, pero puede cambiar este comportamiento cambiando el valor de $VerbosePreference.

La $VerbosePreference variable toma uno de los ActionPreference valores de enumeración: SilentlyContinue, Stop, Continue, Inquire, Ignore, Suspend o Break.

Los valores válidos son los siguientes:

  • Interrumpir : escriba el depurador al escribir en la secuencia detallada.
  • Detener: muestra el mensaje detallado y un mensaje de error y, a continuación, deja de ejecutarse.
  • Inquire: 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.

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.

Ejemplos

Estos ejemplos muestran 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 (Continuar ) 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 Detener 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 le pide 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, un cmdlet o un proveedor, como los mensajes generados por el cmdlet Write-Warning .

De forma predeterminada, los mensajes de advertencia se muestran y la ejecución continúa, pero puede cambiar este comportamiento cambiando el valor de $WarningPreference.

La $WarningPreference variable toma uno de los ActionPreference valores de enumeración: SilentlyContinue, Stop, Continue, Inquire, Ignore, Suspend o Break.

Los valores válidos son los siguientes:

  • Interrumpir : escriba el depurador cuando se escriba un mensaje de advertencia.
  • Detener: muestra el mensaje de advertencia y un mensaje de error y, a continuación, deja de ejecutarse.
  • Inquire: 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.

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.

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 cambia la $WarningPreference 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 detener 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 cambia la $WarningPreference variable al valor de 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 el $WarningPreference 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 . Se le solicita al usuario cuando se produce una advertencia.

$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 está habilitado 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 habilitarlo 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 un valor falsepara 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 la $WhatIfPreference 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 de $WhatIfPreference 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 eliminó.

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 la $WhatIfPreference variable establecida en el valor True. Cuando se usa Remove-Item para eliminar un archivo, se muestra la ruta de acceso del archivo, pero el archivo no se elimina.

Intente eliminar un archivo. Se muestra un mensaje sobre lo que sucedería si Remove-Item se ejecutase, 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 eliminó.

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 se eliminó el archivo.

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 de 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-Processadmite WhatIf. No se detiene el proceso de Winword .

Stop-Process -Name Winword
What if: Performing the operation "Stop-Process" on target "WINWORD (15024)".

Puede invalidar el Stop-Processcomportamiento de 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

Consulte también