Búsqueda de sitios web

acerca de la compatibilidad con Windows PowerShell


Breve descripción

Describe la funcionalidad de compatibilidad de Windows PowerShell para PowerShell 7.

Descripción larga

A menos que el manifiesto del módulo indique que el módulo es compatible con PowerShell Core, los módulos en la carpeta %windir%\system32\WindowsPowerShell\v1.0\Modules se cargan en un proceso en segundo plano de Windows PowerShell 5.1 mediante compatibilidad con Windows PowerShell. característica.

Uso de la función de compatibilidad

Cuando se importa el primer módulo mediante la función de compatibilidad de Windows PowerShell, PowerShell crea una sesión remota denominada WinPSCompatSession que se ejecuta en un proceso de Windows PowerShell 5.1 en segundo plano. Este proceso se crea cuando la función Compatibilidad importa el primer módulo. El proceso se cierra cuando se elimina el último módulo de este tipo (usando Remove-Module) o cuando se cierra el proceso de PowerShell.

Los módulos cargados en la sesión WinPSCompatSession se utilizan mediante comunicación remota implícita y se reflejan en la sesión actual de PowerShell. Este es el mismo método de transporte que se utiliza para los trabajos de PowerShell.

Cuando se importa un módulo a la sesión WinPSCompatSession, la comunicación remota implícita genera un módulo proxy en el directorio $env:Temp del usuario e importa este módulo proxy a la sesión actual de PowerShell. Esto permite que PowerShell detecte que el módulo se cargó mediante la funcionalidad de compatibilidad de Windows PowerShell.

Una vez creada la sesión, se puede utilizar para operaciones que no funcionan correctamente en objetos deserializados. Toda la canalización se ejecuta en Windows PowerShell y solo se devuelve el resultado final. Por ejemplo:

$s = Get-PSSession -Name WinPSCompatSession
Invoke-Command -Session $s -ScriptBlock {
  "Running in Windows PowerShell version $($PSVersionTable.PSVersion)"
}

La característica de Compatibilidad se puede invocar de dos maneras:

  • Explícitamente importando un módulo usando el parámetro UseWindowsPowerShell

    Import-Module -Name ScheduledTasks -UseWindowsPowerShell
    
  • Implícitamente importando un módulo de Windows PowerShell por nombre de módulo, ruta o carga automática mediante descubrimiento de comandos.

    Import-Module -Name ServerManager
    Get-AppLockerPolicy -Local
    

    Si aún no está cargado, el módulo AppLocker se carga automáticamente cuando ejecuta Get-AppLockerPolicy.

La compatibilidad con Windows PowerShell bloquea la carga de módulos que se enumeran en la configuración WindowsPowerShellCompatibilityModuleDenyList en el archivo de configuración de PowerShell.

El valor predeterminado de esta configuración es:

"WindowsPowerShellCompatibilityModuleDenyList":  [
   "PSScheduledJob","BestPractices","UpdateServices"
]

Gestionar la carga de módulos implícitos

Para deshabilitar el comportamiento de importación implícita de la característica de compatibilidad de Windows PowerShell, use la configuración DisableImplicitWinCompat en un archivo de configuración de PowerShell. Esta configuración se puede agregar al archivo powershell.config.json. Para obtener más información, consulte about_powershell_config.

Este ejemplo muestra cómo crear un archivo de configuración que deshabilita la función de carga de módulo implícita de compatibilidad con Windows PowerShell.

$ConfigPath = "$PSHOME\DisableWinCompat.powershell.config.json"
$ConfigJSON = ConvertTo-Json -InputObject @{
  "DisableImplicitWinCompat" = $true
  "Microsoft.PowerShell:ExecutionPolicy" = "RemoteSigned"
}
$ConfigJSON | Out-File -Force $ConfigPath
pwsh -settingsFile $ConfigPath

Para obtener más información sobre la compatibilidad de módulos, consulte la lista de compatibilidad de módulos de PowerShell 7.

Administrar la manipulación de cmdlets

La característica de compatibilidad de Windows PowerShell utiliza comunicación remota implícita para cargar módulos en modo de compatibilidad. El resultado es que los comandos exportados por el módulo tienen prioridad sobre los comandos del mismo nombre en la sesión actual de PowerShell 7. En la versión PowerShell 7.0.0, esto incluía los módulos principales que se incluyen con PowerShell.

En PowerShell 7.1, se cambió el comportamiento para que los siguientes módulos principales de PowerShell no se vean afectados:

  • Microsoft.PowerShell.ConsoleHost
  • Microsoft.PowerShell.Diagnostics
  • Microsoft.PowerShell.Host
  • Microsoft.PowerShell.Management
  • Microsoft.PowerShell.Security
  • Microsoft.PowerShell.Utility
  • Microsoft.WSMan.Management

PowerShell 7.1 también agregó la capacidad de enumerar módulos adicionales que no deberían verse afectados por el modo de compatibilidad.

Puede agregar la configuración WindowsPowerShellCompatibilityNoClobberModuleList al archivo de configuración de PowerShell. El valor de esta configuración es una lista de nombres de módulos separados por comas. El valor predeterminado de esta configuración es:

"WindowsPowerShellCompatibilityNoClobberModuleList": [ ]

Limitaciones

La funcionalidad de compatibilidad de Windows PowerShell:

  1. Solo funciona localmente en computadoras con Windows
  2. Requiere Windows PowerShell 5.1
  3. Opera con parámetros de cmdlet serializados y valores de retorno, no con objetos activos.
  4. Todos los módulos importados a la sesión remota de Windows PowerShell comparten el mismo espacio de ejecución.

Palabras clave

acerca de_Windows_PowerShell_Compatibilidad

Ver también

  • acerca de_Módulos
  • Import-Module

Artículos relacionados