Diferencias de PowerShell en plataformas diferentes de Windows
PowerShell se esfuerza por proporcionar paridad de características en todas las plataformas compatibles. Sin embargo, algunas características se comportan de forma diferente o no están disponibles debido a las diferencias en .NET Core y a diferencias específicas de plataformas. Se realizaron otros cambios para mejorar la interoperabilidad de PowerShell en plataformas que no son de Windows.
.NET Framework frente a .NET Core
PowerShell en Linux y macOS usa .NET Core, un subconjunto de la instancia completa de .NET Framework en Microsoft Windows. Como resultado, los scripts que se ejecutan en Windows pueden no ejecutarse en plataformas que no son de Windows por las diferencias en los marcos.
Para obtener más información sobre los cambios en .NET Core, vea Cambios importantes para la migración desde .NET Framework a .NET Core.
Cambios generales de interoperabilidad de Unix
- Se ha agregado compatibilidad con el uso global de comandos nativos en plataformas Unix. Esto significa que puede usar caracteres comodín con comandos nativos como
ls *.txt
. - La funcionalidad
more
respeta el valor$PAGER
de Linux y tiene como valor predeterminadoless
. - Se agrega automáticamente un carácter de escape a la barra diagonal inversa final cuando se trabaja con argumentos de comandos nativos.
- Se ha corregido ConsoleHost para usar
NoEcho
en plataformas Unix. - No agregue la variable de entorno
PATHEXT
en Unix. - Se incluye una página man
powershell
en el paquete.
Directiva de ejecución
PowerShell omite las directivas de ejecución al ejecutarse en plataformas que no son de Windows. Get-ExecutionPolicy
devuelve Unrestricted en Linux y macOS. Set-ExecutionPolicy
no hace nada en Linux y macOS.
Distinción de mayúsculas y minúsculas en PowerShell
Históricamente, PowerShell ha distinguido entre mayúsculas y minúsculas de manera uniforme, con algunas excepciones. En los sistemas operativos similares a UNIX, el sistema de archivos mayormente distingue mayúsculas de minúsculas y PowerShell se ajusta al estándar del sistema de archivos.
- Debe usar las mayúsculas y minúsculas correctas cuando se especifica un nombre de archivo en PowerShell.
- Si un script intenta cargar un módulo y el nombre del módulo no utiliza las mayúsculas y minúsculas correctamente, no se cargará el módulo. Este comportamiento puede provocar un problema con los scripts existentes si el nombre al que hace referencia el módulo no coincide con las mayúsculas y minúsculas correctas del nombre de archivo real.
- Aunque los nombres del sistema de archivos distinguen mayúsculas de minúsculas, la finalización con tabulación de los nombres de archivo no distingue mayúsculas de minúsculas. La finalización con tabulación pasa por la lista de nombres mediante coincidencia que no tiene en cuenta las mayúsculas y minúsculas.
Get-Help
admite la coincidencia de patrones que no distingue mayúsculas de minúsculas en plataformas Unix.Import-Module
no distingue mayúsculas de minúsculas cuando se usa con un nombre de archivo para determinar el nombre del módulo.
Compatibilidad del sistema de archivos con Linux y macOS
- Las rutas de acceso que se asignan a los cmdlets ahora son independientes de la barra diagonal (tanto
/
como\
funcionan como separadores de directorio) - Ahora se respeta la especificación de directorio base de XDG y se usa de forma predeterminada:
- La ruta de acceso al perfil de Linux/macOS se encuentra en
~/.config/powershell/profile.ps1
. - La ruta de acceso de almacenamiento del historial se encuentra en
~/.local/share/powershell/PSReadline/ConsoleHost_history.txt
. - La ruta de acceso del módulo de usuario se encuentra en
~/.local/share/powershell/Modules
.
- La ruta de acceso al perfil de Linux/macOS se encuentra en
- Compatibilidad con nombres de archivo y carpeta que contienen el carácter de dos puntos en Unix.
- Compatibilidad con nombres de script o rutas de acceso completas que tienen comas.
- Se detecta cuándo se usa el parámetro LiteralPath para suprimir la expansión de caracteres comodín para los cmdlets de navegación.
- Se ha actualizado
Get-ChildItem
para que su funcionamiento se parezca más als -R
de *nix y los comandos nativosDIR /S
de Windows.Get-ChildItem
ahora devuelve los vínculos simbólicos que se encuentran durante una búsqueda recurrente y no busca en los directorios que esos vínculos tienen como destino.
Extensiones de archivo .PS1
Los scripts de PowerShell deben terminar en .ps1
para que el intérprete sepa cómo cargarlos y ejecutarlos en el proceso actual. La ejecución de los scripts en el proceso actual es el comportamiento habitual esperado de PowerShell. Puede agregar el número mágico #!
a un script que no tiene una extensión .ps1
, pero esto hace que el script se ejecute en una nueva instancia de PowerShell que impedirá el funcionamiento correcto del script al intercambiar objetos. Este puede ser el comportamiento deseable al ejecutar un script de PowerShell desde Bash u otro shell.
Alias de conveniencia quitados
PowerShell proporciona un conjunto de alias en Windows que se asignan a nombres de comandos de Linux para la comodidad del usuario. En Linux y macOS, se quitaron los "alias de conveniencia" de los comandos básicos ls
, cp
, mv
, rm
, cat
, man
, mount
y ps
para permitir que el ejecutable nativo se ejecute sin especificar una ruta de acceso.
Registro
En macOS, PowerShell usa las API os_log
nativas para registrar información en el sistema de registro unificado de Apple.
En Linux, PowerShell usa Syslog, una solución de registro ubicua.
Control de trabajo
En PowerShell en Linux o macOS no hay ninguna compatibilidad de control de trabajo de estilo Unix. Los comandos fg
y bg
no están disponibles. No obstante, puede usar trabajos de PowerShell que funcionan en todas las plataformas.
Cuando se incluye &
al final de una canalización, esta se ejecuta como un trabajo de PowerShell. Cuando una canalización se pasa a segundo plano, se devuelve un objeto de trabajo. Una vez que la canalización se ejecuta como un trabajo, se pueden usar todos los cmdlets *-Job
para administrar el trabajo. Las variables (se omiten las específicas del proceso) que se usan en la canalización se copian automáticamente en el trabajo para que funcione Copy-Item $foo $bar &
. El trabajo se ejecuta en el directorio actual, en lugar del directorio principal del usuario.
Compatibilidad con la comunicación remota
La comunicación remota de PowerShell (PSRP) mediante WinRM en plataformas Unix requiere NTLM/Negotiate o autenticación básica a través de HTTPS. PSRP en macOS solo admite autenticación básica a través de HTTPS. No se admite la autenticación basada en Kerberos.
PowerShell admite la comunicación remota de PowerShell (PSRP) a través de SSH en todas las plataformas (Windows, Linux y macOS). Para obtener más información, vea Comunicación remota de PowerShell a través de SSH.
Compatibilidad con Just Enough Administration (JEA)
PowerShell en sistemas Linux o macOS no permite la capacidad para crear puntos de conexión de comunicación remota de administración restringida (JEA).
sudo
, exec
y PowerShell
Dado que PowerShell ejecuta la mayoría de los comandos en la memoria (como Python o Ruby), no puede usar sudo
directamente con elementos integrados de PowerShell. Puede ejecutar pwsh
desde sudo
. Si es necesario ejecutar un cmdlet de PowerShell desde dentro de PowerShell con sudo
, por ejemplo, sudo Set-Date 8/18/2016
, tendría que usar sudo pwsh Set-Date 8/18/2016
.
Módulos incluidos en plataformas que no son de Windows
En las plataformas no Windows, PowerShell incluye los siguientes módulos:
- Microsoft.PowerShell.Archive
- Microsoft.PowerShell.Core
- Microsoft.PowerShell.Host
- Microsoft.PowerShell.Management
- Microsoft.PowerShell.Security
- Microsoft.PowerShell.Utility
- PackageManagement
- PowerShellGet
- PSReadLine
- ThreadJob
Un gran número de los comandos (cmdlets) normalmente disponibles en PowerShell no lo están en sistemas Linux o macOS. A menudo, estos comandos no se aplican a estas plataformas. Por ejemplo, los comandos para características específicas de Windows, como el registro o los servicios, no están disponibles. Otros comandos, como Set-ExecutionPolicy
, están presentes, pero no son funcionales.
Para obtener una lista completa de los módulos y cmdlets, y las plataformas que admiten, vea Historial de versiones de módulos y cmdlets.
Módulos que ya no se incluyen en PowerShell
Por distintas razones de compatibilidad, los módulos a continuación ya no se incluyen en PowerShell.
- ISE
- Microsoft.PowerShell.LocalAccounts
- Microsoft.PowerShell.ODataUtils
- Microsoft.PowerShell.Operation.Validation
- PSScheduledJob
- PSWorkflow
- PSWorkflowUtility
Los siguientes módulos específicos de Windows no se incluyen en PowerShell para sistemas Linux o macOS.
- CimCmdlets
- Microsoft.PowerShell.Diagnostics
- Microsoft.WSMan.Management
- PSDiagnostics
Cmdlets no disponibles en plataformas no Windows
Algunos cmdlet se han quitado de PowerShell. Otros no están disponibles o pueden funcionar de forma diferente en plataformas que no son de Windows. Para obtener una lista completa de los cmdlets quitados de PowerShell, vea Cmdlets quitados de PowerShell.
Microsoft.PowerShell.Core
Los cmdlets siguientes no están disponibles en sistemas Linux o macOS:
Disable-PSRemoting
Enable-PSRemoting
Connect-PSSession
Disconnect-PSSession
Receive-PSSession
Get-PSSessionCapability
Disable-PSSessionConfiguration
Enable-PSSessionConfiguration
Get-PSSessionConfiguration
Register-PSSessionConfiguration
Set-PSSessionConfiguration
Unregister-PSSessionConfiguration
Test-PSSessionConfigurationFile
El parámetro ShowWindow de Get-Help
no está disponible en sistemas diferentes a Windows. PowerShell 7.3 agregó el cmdlet Switch-Process
y la función exec
para Linux y macOS. Estos comandos no están disponibles en Windows.
Cmdlets de Microsoft.PowerShell.Security
Los cmdlets siguientes no están disponibles en sistemas Linux o macOS:
Get-Acl
Set-Acl
Get-AuthenticodeSignature
Set-AuthenticodeSignature
New-FileCatalog
Test-FileCatalog
Estos cmdlets solo están disponibles a partir de PowerShell 7.1.
Get-CmsMessage
Protect-CmsMessage
Unprotect-CmsMessage
Cmdlets de Microsoft.PowerShell.Management
Los cmdlets siguientes no están disponibles en sistemas Linux y macOS:
Rename-Computer
Get-ComputerInfo
Get-HotFix
Clear-RecycleBin
Get-Service
New-Service
Remove-Service
Restart-Service
Resume-Service
Set-Service
Start-Service
Stop-Service
Suspend-Service
Set-TimeZone
Los cmdlets siguientes están disponibles con limitaciones:
Get-Clipboard
: disponible en Linux pero no admitido en macOS, Set-Clipboard
: disponible en PowerShell 7.0+, Restart-Computer
: disponible para Linux y macOS en PowerShell 7.1+, Stop-Computer
: disponible para Linux y macOS en PowerShell 7.1+
Cmdlets de Microsoft.PowerShell.Utility
Los cmdlets siguientes no están disponibles en sistemas Linux y macOS:
Convert-String
ConvertFrom-String
ConvertFrom-SddlString
Out-GridView
Out-Printer
Show-Command
Alias no disponibles en Linux o macOS
En la tabla siguiente se enumeran los alias disponibles para Windows que no están disponibles en sistemas diferentes de Windows. Estos alias no están disponibles porque el alias entra en conflicto con un comando nativo en esas plataformas.
Alias | Cmdlet |
---|---|
ac |
Add-Content |
cat |
Get-Content |
clear |
Clear-Host |
compare |
Compare-Object |
cp |
Copy-Item |
cpp |
Copy-ItemProperty |
diff |
Compare-Object |
kill |
Stop-Process |
ls |
Get-ChildItem |
man |
help |
mount |
New-PSDrive |
mv |
Move-Item |
ps |
Get-Process |
rm |
Remove-Item |
rmdir |
Remove-Item |
sleep |
Start-Sleep |
sort |
Sort-Object |
start |
Start-Process |
tee |
Tee-Object |
write |
Write-Output |
La tabla no incluye alias no disponibles para cmdlets que no existen en plataformas que no son de Windows.
Desired State Configuration (DSC) de PowerShell
A partir de PowerShell 7.2, el módulo PSDesiredStateConfiguration se ha quitado de PowerShell y se ha publicado en la Galería de PowerShell. Para obtener más información, vea el anuncio en el blog del equipo de PowerShell. Para obtener más información sobre el uso de DSC en Linux, vea Introducción a DSC para Linux. DSC v1.1 y v2.x no se admiten en macOS. DSC v3 es compatible con Windows, Linux y macOS, pero todavía está en fase de desarrollo inicial.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de