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 -UseWindowsPowerShellImplí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 -LocalSi 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:
- Solo funciona localmente en computadoras con Windows
- Requiere Windows PowerShell 5.1
- Opera con parámetros de cmdlet serializados y valores de retorno, no con objetos activos.
- 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