- Как узнать какая версия PowerShell установлена?
- История версии PowerShell, PowerShell Core
- Как узнать версию PowerShell из консоли?
- Получаем версию PowerShell на удаленных компьютерах
- Powershell узнать версию windows удаленно
- Вопрос
- Ответы
- How to find the Windows version from the PowerShell command line
- 25 Answers 25
Как узнать какая версия PowerShell установлена?
В этой статье мы рассмотрим какие версии PowerShell существуют, в чем отличие Windows PowerShell от PowerShell Core и как узнать, какая версия PowerShell установлена на локальном или удаленных компьютерах.
История версии PowerShell, PowerShell Core
По умолчанию PowerShell устанвлен во всех версиях Windows, начиная с Windows 7 SP1 и Windows Server 2008 R2 SP1. В следующей таблице представлен список актуальных версий PowerShell:
Версия PS | Примечание |
PowerShell 1.0 | Можно было установить вручную в Windows Server 2003 SP1 и Windows XP |
PowerShell 2.0 | Предустановлен в Windows Server 2008 R2 и Windows 7 |
PowerShell 3.0 | Установлен в Windows 8 и Windows Server 2012 |
PowerShell 4.0 | Предустановлен в Windows 8.1 и Windows Server 2012 R2 |
PowerShell 5.0 | Предустановлен в Windows 10 RTM, и автоматически обновляется до 5.1 через Windows Update |
PowerShell 5.1 | Встроен в Windows 10 (начиная с билда 1709) и Windows Server 2016 |
PowerShell Core 6.0 и 6.1 | Следующая кроссплатформенная версия PowerShell (основана на .NET Core), которую можно установить не только во всех поддерживаемых версиях Windows, но и в MacOS, CentOS, RHEL, Debian, Ubuntu, openSUSE |
PowerShell Core 7.0 | Самая последняя версия PowerShell, вышедшая в марте 2020 (в новом релизе выполнен переход с .NET Core 2.x на 3.1) |
Стоит обратить внимание, что последние 2 года Microsoft приостановила развитие классического Windows PowerShell (выпускаются только исправления ошибок и безопасности) и сфокусировалась на открытом кроссплатформенном PowerShell Core. В чем отличия Windows PowerShell от PowerShell Core?
- Windows PowerShell основан на NET Framework (например, для PowerShell 5 требуется .NET Framework v4.5, нужно убедиться что он установлен). PowerShell Core основан на .Net Core;
- Windows PowerShell работает только на ОС семейства Windows, а PowerShell Core является кроссплатформенным и будет работать в Linux;
- В PowerShell Core нет полной совместимости с Windows PowerShell, однако Microsoft работает на улучшением обратной совместимости со старыми командлетами и скриптами (перед переходом на PowerShell Core рекомендуется протестировать работу старых PS скриптов). В PowerShell 7 обеспечивается максимальная совместимсть с Windows PowerShell.
- Редактор PowerShell ISE нельзя использовать для отладки скриптов PowerShell Core (но можно использовать Visual Studio Code)
- Т.к. Windows PowerShell более не развивается, рекомендуется постепенно мигрировать на PowerShell Core.
Как узнать версию PowerShell из консоли?
Самый простой способ определить какая версия PowerShell у вас установлена с помощью команды:
Можно получить только значении версии:
(в этом примере мы получили версию PSVersion 2.0 с чистого Windows Server 2008 R2)
Команда $PSVersionTable корректно работает в PowerShell Core на различных операционных системах.
Также можно узнать установленную версию PowerShell через реестр. Для этого нужно получить значение параметра PowerShellVersion из ветки реестра HKLM\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine с помощью Get-ItemProperty
(Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine -Name ‘PowerShellVersion’).PowerShellVersion
(Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine -Name ‘PowerShellVersion’).PowerShellVersion
Для определения установленной версии PowerShell Core нужно использовать команду:
(Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShellCore\InstalledVersions* -Name ‘SemanticVersion’).SemanticVersion
Получаем версию PowerShell на удаленных компьютерах
Для получения версии PowerShell на удаленных компьютерах нужно использовать значение переменной окружения $PSVersionTable или получать данные непосредственно из реестра. Другие способы могут возвращать некорректные данные.
Вы можете получить версию PowerShell с удаленного компьютера с помощью команды Invoke-Command:
Invoke-Command -ComputerName dc01 -ScriptBlock <$PSVersionTable.PSVersion>-Credential $cred
Можно получить установленные версии PowerShell с нескольких компьютеров таким скриптом (их список сохранен в текстовом файле):
Invoke-Command -ComputerName (Get-Content C:\PS\servers.txt) —
ScriptBlock <$PSVersionTable.PSVersion>| Select PSComputerName, @
Либо можно получить список компьютеров домена через Get-ADComputer и получить версию PowerShell на них:
$adcomputer=(Get-ADComputer -Filter ‘operatingsystem -like «*Windows server*» -and enabled -eq «true»‘ -SearchBase ‘OU=servers,dc=winitpro,dc=ru’ ).Name
Invoke-Command-ComputerName $adcomputer -Scriptblock <$PSVersionTable.psversion>-ErrorAction SilentlyContinue
Если ваш скрипт PoweShell использует специальный функционал определенной версии PS, вы можно принудительно переключиться в режим другой версии PowerShell. Например, для запуска консоли в режиме PowerShell v3, выполните (должен быть установлен .Net Framework 3.5):
PowerShell.exe -version 3
Определение версии PowerShell может быть важно при выполнении скриптов и запуске команд, которые используют командлеты или специальные возможности определенной версии PS. Если вы хотите в скрипте PS определить какая версия PowerShell установлена, и в зависимости от этого использовать разные командлеты, вы можете использовать такой скрипт:
$ps_version = $PSVersionTable.PSVersion.major
if ( $ps_version -eq «2” )
<
write «Вы используете Powershell 2.0»
>
elseif ( $ps_version -eq «5» )
<
write » Вы используете Powershell 5″
>
В следующей статье мы рассмотрим, как обновить версию PowerShell в Windows.
Powershell узнать версию windows удаленно
Вопрос
Мне нужно получить список серверов и сделать действия, в зависимости разрядности ОС. Список компьютеров получаю с помощью инструментов quest software: get-qadcomputer. В свойствах возвращаемых объектах разрядности нет. По версии windows тоже нужное не определить.
Смотрел на wmi, но свойства OSArchitecture класса win32_operatingsystem на системах Windows 2003 нет. Я так понимаю, что проверять класс win32_processor нельзя, он относится к процессору, а не ос.
В общем, сабж: как узнать разрядность ОС на powershell для удаленной машины?
Ответы
Win32_OperatingSystem.Name
(Get-WmiObject Win32_OperatingSystem -computer «Имя компа»).name
или — Get-WmiObject Win32_OperatingSystem -property name -computer «имя компа»
Win32_OperatingSystem.OtherTypeDescription
(Get-WmiObject Win32_OperatingSystem -computer «Имя компа»).OtherTypeDescription
или — Get-WmiObject Win32_OperatingSystem -property OtherTypeDescription -computer «имя компа»
Если ответ Вам помог, нажмите на изображение зеленой галочки — «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку «проголосовать за полезное сообщение» в правом верхнем углу сообщения.
How to find the Windows version from the PowerShell command line
How do I find which Windows version I’m using?
I’m using PowerShell 2.0 and tried:
How do I do this?
25 Answers 25
Since you have access to the .NET library, you could access the OSVersion property of the System.Environment class to get this information. For the version number, there is the Version property.
Details of Windows versions can be found here.
To get the Windows version number, as Jeff notes in his answer, use:
It is worth noting that the result is of type [System.Version] , so it is possible to check for, say, Windows 7/Windows Server 2008 R2 and later with
However this will not tell you if it is client or server Windows, nor the name of the version.
Use WMI’s Win32_OperatingSystem class (always single instance), for example:
will return something like
Microsoft® Windows Server® 2008 Standard
Unfortunately most of the other answers do not provide information specific to Windows 10.
Windows 10 has versions of its own: 1507, 1511, 1607, 1703, etc. This is what winver shows.
As for other Windows versions use systeminfo . Powershell wrapper:
Windows 10 output for the same command:
This will give you the full version of Windows (including Revision/Build number) unlike all the solutions above:
Since PowerShell 5:
I think this command pretty much tries the 1001 different ways so far discovered to collect system information.
If you want to differentiate between Windows 8.1 (6.3.9600) and Windows 8 (6.2.9200) use
to get the proper version. [Environment]::OSVersion doesn’t work properly in Windows 8.1 (it returns a Windows 8 version).
I am refining one of the answers
I reached this question while trying to match the output from winver.exe:
Version 1607 (OS Build 14393.351)
I was able to extract the build string with:
Updated: Here is a slightly simplified script using regex
I took the scripts above and tweaked them a little to come up with this:
To get a result like this:
Microsoft Windows 10 Home 64-bit Version: 1709 Build: 16299.431 @
Hint: I’d appreciate a hand stripping the prefix text from the install date so I can replace it with a more readable header.
As MoonStom says, [Environment]::OSVersion doesn’t work properly on an upgraded Windows 8.1 (it returns a Windows 8 version): link.
If you want to differentiate between Windows 8.1 (6.3.9600) and Windows 8 (6.2.9200), you can use (Get-CimInstance Win32_OperatingSystem).Version to get the proper version. However this doesn’t work in PowerShell 2. So use this:
If you are trying to decipher info MS puts on their patching site such as https://technet.microsoft.com/en-us/library/security/ms17-010.aspx
you will need a combo such as:
$name=(Get-WmiObject Win32_OperatingSystem).caption $bit=(Get-WmiObject Win32_OperatingSystem).OSArchitecture $ver=(Get-ItemProperty «HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion»).ReleaseId Write-Host $name, $bit, $ver
Microsoft Windows 10 Home 64-bit 1703
To produce identical output to winver.exe in PowerShell v5 on Windows 10 1809:
Windows PowerShell 2.0:
Windows PowerShell 3.0:
For display (both versions):
This is really a long thread, and probably because the answers albeit correct are not resolving the fundamental question. I came across this site: Version & Build Numbers that provided a clear overview of what is what in the Microsoft Windows world.
Since my interest is to know which exact windows OS I am dealing with, I left aside the entire version rainbow and instead focused on the BuildNumber. The build number may be attained either by:
the choice is yours which ever way you prefer it. So from there I could do something along the lines of:
Note: As you can see I used the above just for server systems, however it could easily be applied to workstations or even cleverly extended to support both. but I’ll leave that to you.