comandos - Determine la versión instalada de PowerShell
update powershell version (24)
¿Cómo puedo determinar qué versión de PowerShell está instalada en una computadora y, de hecho, si está instalada?
Ampliando la respuesta con un operador de selección:
Get-Host | select {$_.Version}
Comando $PSVersionTable.PSVersion
es útil.
Major Minor Patch PreReleaseLabel BuildLabel ----- ----- ----- --------------- ---------- 6 1 0
Dado que la respuesta más útil no abordó la parte de si existe , pensé en darle una respuesta a través de una solución rápida y sucia. Depende de que PowerShell esté en la variable de entorno de ruta , que es lo que probablemente desee. (La punta del sombrero a la parte superior responde porque no lo sabía). Pega esto en un archivo de texto y nómbrelo.
Prueba Powershell Version.cmd
o similar.
@echo off
echo Checking powershell version...
del "%temp%/PSVers.txt" 2>nul
powershell -command "[string]$PSVersionTable.PSVersion.Major +''.''+ [string]$PSVersionTable.PSVersion.Minor | Out-File ([string](cat env:/temp) + ''/PSVers.txt'')" 2>nul
if errorlevel 1 (
echo Powershell is not installed. Please install it from download.Microsoft.com; thanks.
) else (
echo You have installed Powershell version:
type "%temp%/PSVers.txt"
del "%temp%/PSVers.txt" 2>nul
)
timeout 15
El siguiente cmdlet devolverá la versión de PowerShell.
$PSVersionTable.PSVersion.Major
Encontré que la forma más fácil de verificar si estaba instalado era:
- ejecutar un símbolo del sistema (Inicio, Ejecutar,
cmd
, luego Aceptar) - escribe
powershell
luegopowershell
retorno. A continuación, debe obtener el indicador de PowerShellPS
:
C:/Users/MyUser>powershell
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.
PS C:/Users/MyUser>
Luego puede verificar la versión desde el indicador de PowerShell escribiendo $PSVersionTable.PSVersion
:
PS C:/Users/MyUser> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
2 0 -1 -1
PS C:/Users/MyUser>
Escriba exit
si desea volver al símbolo del sistema (vuelva a exit
si también desea cerrar el símbolo del sistema).
Para ejecutar scripts, consulte http://ss64.com/ps/syntax-run.html .
La forma más fácil de olvidar esta página y nunca volver a ella es aprender la Get-Variable
:
Get-Variable | where {$_.Name -Like ''*version*''} | %{$_[0].Value}
No hay necesidad de recordar cada variable. Solo Get-Variable
es suficiente (y "Debe haber algo acerca de la versión").
Necesitaba verificar la versión de PS y luego ejecutar el código apropiado. Algunos de nuestros servidores ejecutan v5, otros v4. Esto significa que algunas funciones, como la compresión, pueden o no estar disponibles.
Esta es mi solución:
if ($PSVersionTable.PSVersion.Major -eq 5) {
#Execute code available in 5, like Compress
Write-Host "You are running version 5"
}
else {
#Use a different process
Write-Host "This is version $PSVersionTable.PSVersion.Major"
}
Para determinar si PowerShell está instalado, puede verificar el registro para la existencia de
HKEY_LOCAL_MACHINE/Software/Microsoft/PowerShell/1/Install
y
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/PowerShell/3
y, si existe, si el valor es 1 (para instalado), como se detalla en la publicación del blog. Verifique si PowerShell está instalado y la versión .
Para determinar la versión de PowerShell que está instalada, puede verificar las claves de registro
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/PowerShell/1/PowerShellEngine/PowerShellVersion
y
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/PowerShell/3/PowerShellEngine/PowerShellVersion
Para determinar la versión de PowerShell que se instala desde una secuencia de comandos .ps1, puede usar la siguiente línea rápida, tal como se detalla en PowerShell.com, en qué versión de PowerShell estoy ejecutando .
$isV2 = test-path variable:/psversiontable
El mismo sitio también da una función para devolver la versión:
function Get-PSVersion {
if (test-path variable:psversiontable) {$psversiontable.psversion} else {[version]"1.0.0.0"}
}
Para verificar si PowerShell está instalado use:
HKLM/Software/Microsoft/PowerShell/1 Install ( = 1 )
Para verificar si RC2 o RTM está instalado use:
HKLM/Software/Microsoft/PowerShell/1 PID (=89393-100-0001260-00301) -- For RC2
HKLM/Software/Microsoft/PowerShell/1 PID (=89393-100-0001260-04309) -- For RTM
Fuente: este sitio web .
Probar;) ((Get-Host).Version).Major
Puede verificar que la versión de Windows PowerShell instalada al completar la siguiente verificación:
- Haga clic en Inicio, haga clic en Todos los programas, haga clic en Accesorios, haga clic en Windows PowerShell y, a continuación, haga clic en Windows PowerShell.
En la consola de Windows PowerShell, escriba el siguiente comando en el símbolo del sistema y luego presione INTRO:
Get-Host | Versión de objeto selecto
Verás una salida que se ve así:
Version
-------
3.0
http://www.myerrorsandmysolutions.com/how-to-verify-the-windows-powershell-version-installed/
Puedes mirar la variable incorporada, $psversiontable
. Si no existe, tienes V1. Si existe, le dará toda la información que necesita.
1 > $psversiontable
Name Value
---- -----
CLRVersion 2.0.50727.4927
BuildVersion 6.1.7600.16385
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
Solo quiero agregar mis 2 centavos aquí.
Puede verificar directamente la versión con una sola línea invocando powershell externamente , como desde el símbolo del sistema.
powershell -Command "$PSVersionTable.PSVersion"
EDITAR:
De acuerdo con @psaul , en realidad puedes tener un comando que sea agnóstico de donde vino (CMD, Powershell o Pwsh), gracias por eso.
powershell -command "(Get-Variable PSVersionTable -ValueOnly).PSVersion"
He probado y funcionó perfectamente tanto en CMD como en Powershell
También puede llamar al comando "host" desde la línea de comandos de PowerShell. Debe darle el valor de la variable $host
.
Usualmente lo obtienes usando el número Mayor que puedes obtener de esta manera:
$PSVersionTable.PSVersion.Major
Utilice Get-Host para obtener los detalles de la versión de PowerShell:
PS C:/Users/ashash001c> Get-Host
Name : ConsoleHost
Version : 2.0
InstanceId : ##################################
UI : System.Management.Automation.Internal.Host.InternalHostUserI
nterface
CurrentCulture : en-US
CurrentUICulture : en-US
PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed : False
Runspace : System.Management.Automation.Runspaces.LocalRunspace
Utilice el comando Get-Host . La segunda línea del resultado es la versión.
Utilizar:
$psVersion = $PSVersionTable.PSVersion
If ($psVersion)
{
#PowerShell Version Mapping
$psVersionMappings = @()
$psVersionMappings += New-Object PSObject -Property @{Name=''5.1.14393.0'';FriendlyName=''Windows PowerShell 5.1 Preview'';ApplicableOS=''Windows 10 Anniversary Update''}
$psVersionMappings += New-Object PSObject -Property @{Name=''5.1.14300.1000'';FriendlyName=''Windows PowerShell 5.1 Preview'';ApplicableOS=''Windows Server 2016 Technical Preview 5''}
$psVersionMappings += New-Object PSObject -Property @{Name=''5.0.10586.494'';FriendlyName=''Windows PowerShell 5 RTM'';ApplicableOS=''Windows 10 1511 + KB3172985 1607''}
$psVersionMappings += New-Object PSObject -Property @{Name=''5.0.10586.122'';FriendlyName=''Windows PowerShell 5 RTM'';ApplicableOS=''Windows 10 1511 + KB3140743 1603''}
$psVersionMappings += New-Object PSObject -Property @{Name=''5.0.10586.117'';FriendlyName=''Windows PowerShell 5 RTM 1602'';ApplicableOS=''Windows Server 2012 R2, Windows Server 2012, Windows Server 2008 R2 SP1, Windows 8.1, and Windows 7 SP1''}
$psVersionMappings += New-Object PSObject -Property @{Name=''5.0.10586.63'';FriendlyName=''Windows PowerShell 5 RTM'';ApplicableOS=''Windows 10 1511 + KB3135173 1602''}
$psVersionMappings += New-Object PSObject -Property @{Name=''5.0.10586.51'';FriendlyName=''Windows PowerShell 5 RTM 1512'';ApplicableOS=''Windows Server 2012 R2, Windows Server 2012, Windows Server 2008 R2 SP1, Windows 8.1, and Windows 7 SP1''}
$psVersionMappings += New-Object PSObject -Property @{Name=''5.0.10514.6'';FriendlyName=''Windows PowerShell 5 Production Preview 1508'';ApplicableOS=''Windows Server 2012 R2''}
$psVersionMappings += New-Object PSObject -Property @{Name=''5.0.10018.0'';FriendlyName=''Windows PowerShell 5 Preview 1502'';ApplicableOS=''Windows Server 2012 R2''}
$psVersionMappings += New-Object PSObject -Property @{Name=''5.0.9883.0'';FriendlyName=''Windows PowerShell 5 Preview November 2014'';ApplicableOS=''Windows Server 2012 R2, Windows Server 2012, Windows 8.1''}
$psVersionMappings += New-Object PSObject -Property @{Name=''4.0'';FriendlyName=''Windows PowerShell 4 RTM'';ApplicableOS=''Windows Server 2012 R2, Windows Server 2012, Windows Server 2008 R2 SP1, Windows 8.1, and Windows 7 SP1''}
$psVersionMappings += New-Object PSObject -Property @{Name=''3.0'';FriendlyName=''Windows PowerShell 3 RTM'';ApplicableOS=''Windows Server 2012, Windows Server 2008 R2 SP1, Windows 8, and Windows 7 SP1''}
$psVersionMappings += New-Object PSObject -Property @{Name=''2.0'';FriendlyName=''Windows PowerShell 2 RTM'';ApplicableOS=''Windows Server 2008 R2 SP1 and Windows 7''}
foreach ($psVersionMapping in $psVersionMappings)
{
If ($psVersion -ge $psVersionMapping.Name) {
@{CurrentVersion=$psVersion;FriendlyName=$psVersionMapping.FriendlyName;ApplicableOS=$psVersionMapping.ApplicableOS}
Break
}
}
}
Else{
@{CurrentVersion=''1.0'';FriendlyName=''Windows PowerShell 1 RTM'';ApplicableOS=''Windows Server 2008, Windows Server 2003, Windows Vista, Windows XP''}
}
Puede descargar la secuencia de comandos detallada desde Cómo determinar la versión instalada de PowerShell .
Yo usaría Get-Host o $ PSVersionTable . Como señala Andy Schneider, $PSVersionTable
no funciona en la versión 1; Fue introducido en la versión 2.
get-host
Name : ConsoleHost
Version : 2.0
InstanceId : d730016e-2875-4b57-9cd6-d32c8b71e18a
UI : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture : en-GB
CurrentUICulture : en-US
PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed : False
Runspace : System.Management.Automation.Runspaces.LocalRunspace
$PSVersionTable
Name Value
---- -----
CLRVersion 2.0.50727.4200
BuildVersion 6.0.6002.18111
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
El método recomendado de compatibilidad con Microsoft para verificar si PowerShell está instalado y determinar la versión instalada es mirar dos claves de registro específicas. He reproducido los detalles aquí en caso de que el enlace se rompa.
Según la página enlazada:
Dependiendo de cualquier otra clave de registro, versión de PowerShell.exe o la ubicación de PowerShell.exe no se garantiza que funcione a largo plazo.
Para verificar si alguna versión de PowerShell está instalada, verifique el siguiente valor en el registro:
- Ubicación clave:
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/PowerShell/1
- Nombre de valor: Instalar
- Tipo de valor: REG_DWORD
- Información del valor: 0x00000001 (1
Para verificar si la versión 1.0 o 2.0 de PowerShell está instalada, verifique el siguiente valor en el registro:
- Ubicación clave:
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/PowerShell/1/PowerShellEngine
- Nombre del valor: PowerShellVersion
- Tipo de valor: REG_SZ
- Datos de valor: <1.0 | 2.0>
$host.version
es simplemente incorrecto / no confiable. Esto le da la versión del ejecutable de alojamiento (powershell.exe, powergui.exe, powershell_ise.exe, powershellplus.exe, etc.) y no la versión del motor en sí.
La versión del motor está contenida en $psversiontable.psversion
. Para PowerShell 1.0, esta variable no existe, por lo que, obviamente, si esta variable no está disponible, es completamente seguro asumir que el motor es 1.0, obviamente.
Use $PSVersionTable.PSVersion
para determinar la versión del motor. Si la variable no existe, es seguro asumir que el motor es la versión 1.0
.
Tenga en cuenta que $Host.Version
y (Get-Host).Version
no son confiables; reflejan solo la versión del host, no el motor. PowerGUI, PowerShellPLUS, etc. son aplicaciones de hospedaje, y configurarán la versión del host para que refleje la versión de su producto, lo cual es totalmente correcto, pero no lo que está buscando.
PS C:/> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
4 0 -1 -1
# Get PowerShell Version
function Global:version
{
$PSVersionTable.PSVersion
}