En este artículo aprenderemos qué versiones de PowerShell existen, cuál es la diferencia entre Windows PowerShell
y PowerShell Core
y cómo verificar la versión de PowerShell instalada en una computadora local o remota.
Historial y versiones de Windows PowerShell y PowerShell Core
PowerShell se instala de forma predeterminada en todas las versiones de Windows a partir de Windows 7 SP1 y Windows Server 2008 R2 SP1. La siguiente tabla muestra la lista de todas las versiones de PowerShell:
Versión PS | Nota |
PowerShell 1.0 | Se puede instalar manualmente en Windows Server 2003 SP1 y Windows XP |
PowerShell 2.0 | Windows Server 2008 R2 y Windows 7 |
PowerShell 3.0 | Windows 8 y Windows Server 2012 |
PowerShell 4.0 | Windows 8.1 y Windows Server 2012 R2 |
PowerShell 5.0 | Preinstalado en Windows 10 RTM y actualizado automáticamente a 5.1 a través de Windows Update |
PowerShell 5.1 | Está integrado en Windows 10 (a partir de la compilación 1709) y Windows Server 2016 |
PowerShell Core 6.0 y 6.1 | Es la próxima versión de PowerShell multiplataforma (basada en .NET Core) que se puede instalar en todas las versiones de Windows compatibles y en MacOS, CentOS, RHEL, Debian, Ubuntu, openSUSE |
PowerShell Core 7.0 | Es la última versión de PowerShell lanzada en marzo de 2020 (se usa .NET Core 3.1 en lugar de .NET Core 2.x) |
Puede instalar manualmente una versión más reciente de PowerShell en versiones anteriores de Windows. Para hacerlo, descargue e instale la versión apropiada del Marco de administración de Windows (PowerShell es parte de él).
Vale la pena señalar que en los últimos 2 años Microsoft suspendió el desarrollo del clásico Windows PowerShell (solo se lanzan correcciones de errores y actualizaciones de seguridad) y se centró en multiplataforma de código abierto. Núcleo de PowerShell.
¿Cuál es la diferencia entre Windows PowerShell y PowerShell Core?
- Windows PowerShell está basado en .NET Framework (por ejemplo, PowerShell 5 requiere .NET Framework v4.5, asegúrese de que esté instalado). Núcleo de PowerShell está basado en .Net Core;
- Windows PowerShell solo funciona en sistemas operativos Windows, mientras que Núcleo de PowerShell es multiplataforma y también puede funcionar en Linux;
- PowerShell Core no es totalmente compatible con Windows PowerShell; sin embargo, Microsoft está trabajando para mejorar la compatibilidad con versiones anteriores de scripts y cmdlets de PS. (se recomienda probar sus antiguos scripts de PS1 antes de pasar a PowerShell Core). PowerShell Core 7 proporciona la mayor compatibilidad con Windows PowerShell;
- No puede usar el editor de PowerShell ISE para editar scripts de PowerShell Core (pero se puede usar el código de Visual Studio);
- Dado que Windows PowerShell ya no está desarrollado, se recomienda que comience a migrar a PowerShell Core.
¿Cómo obtener la versión de PowerShell desde la consola?
La forma más fácil de averiguar qué versión de PowerShell está instalada en su computadora es usar el comando:
host
Compruebe el valor de la propiedad Versión.
La siguiente captura de pantalla se realizó en Windows 10 con PowerShell 5.1 instalado de forma predeterminada, como en Windows Server 2016.
o
$PSVersionTable
Solo puede obtener el valor de la versión de PowerShell:
$PSVersionTable.PSVersion.major
(en este ejemplo obtuvimos PSVersion 2.0 en Windows Server 2008 R2 limpio)
El comando $ PSVersionTable funciona correctamente en PowerShell Core en diferentes sistemas operativos.
También puede averiguar la versión de PowerShell instalada a través del registro. Para hacerlo, obtenga el valor del parámetro PowerShellVersion en la clave de registro HKLMSOFTWAREMicrosoftPowerShell3PowerShellEngine
usando el cmdlet Get-ItemProperty:
(Get-ItemProperty -Path HKLM:SOFTWAREMicrosoftPowerShell3PowerShellEngine -Name 'PowerShellVersion').PowerShellVersion
El método descrito anteriormente funciona en Windows Server 2012 / Windows 8 o más reciente.
En Windows Server 2008 R2 / Windows 7, puede obtener el valor del parámetro de registro en otra clave de registro:
(Get-ItemProperty -Path HKLM:SOFTWAREMicrosoftPowerShell1PowerShellEngine -Name 'PowerShellVersion').PowerShellVersion
Para obtener la versión de PowerShell Core instalada, use el siguiente comando:
(Get-ItemProperty -Path HKLM:SOFTWAREMicrosoftPowerShellCoreInstalledVersions* -Name 'SemanticVersion').SemanticVersion
Verificar la versión de PowerShell en computadoras remotas
Para verificar la versión de PowerShell en un host remoto, use el valor del $ PSVersionTable variable de entorno u obtenga la información del registro directamente. Otros métodos pueden devolver datos incorrectos.
Puede instalar la versión de PowerShell en una computadora remota a través de PowerShell Remoting usando el Invocar-Comando cmdlet:
Invoke-Command -ComputerName mun-dc01 -ScriptBlock {$PSVersionTable.PSVersion} -Credential $cred
Major Minor Build Revision PSComputerName ----- ----- ----- -------- -------------- 5 1 14393 3383 mun-dc01
Puede obtener las versiones instaladas de PowerShell en varios equipos mediante el siguiente script (la lista de equipos remotos debe especificarse como un archivo de texto sin formato):
Invoke-Command -ComputerName (Get-Content C:PShost_list.txt) -
ScriptBlock{$PSVersionTable.PSVersion} | Select PSComputerName, @{N="PS Version";E={$_.Major}}
O puede obtener una lista de equipos de dominio a través de Get-ADComputer y verificar de forma remota las versiones de PowerShell en ellos:
$adcomputer=(Get-ADComputer -Filter 'operatingsystem -like "*Windows server*" -and enabled -eq "true"' -SearchBase ‘OU=servers,OU=Munich,dc=woshub,dc=com’ ).Name
Invoke-Command-ComputerName $adcomputer -Scriptblock{$PSVersionTable.psversion} -ErrorAction SilentlyContinue
Si su secuencia de comandos de PowerShell usa características de una versión de PS específica, puede forzar que su secuencia de comandos cambie a una versión de PowerShell diferente. Por ejemplo, para ejecutar una consola en modo PowerShell v3, ejecute este comando (.Net Framework 3.5 debe estar instalado):
PowerShell.exe -version 3
Puede ser importante conocer su versión de PowerShell si ejecuta scripts o comandos que utilizan los cmdlets o las funciones de una versión de PS específica. Si desea detectar la versión de PowerShell instalada en el script y usar cmdlets basados en él, puede ejecutar el siguiente script PS:
$ps_version = $PSVersionTable.PSVersion.major
if ( $ps_version -eq "2” )
{
write "You are using Powershell 2.0"
}
elseif ( $ps_version -eq "5" )
{
write " You are using Powershell 5"
}
Artículos Interesantes
Contenido