Если я запускаю следующий тест версии в Windows 10 или Windows 11, они оба сообщают $Major
как 10 и $Minor
как 0, поэтому этого теста недостаточно, чтобы определить, работаем ли мы в Windows 10 или Windows 11.
[version]$OSVersion = [Environment]::OSVersion.Version
$Major = $OSVersion.Major
$Minor = $OSVersion.Minor
# Other ways to test:
# $OSVersion = [Version](Get-ItemProperty -Path "$($Env:Windir)\System32\hal.dll" -ErrorAction SilentlyContinue).VersionInfo.FileVersion.Split()[0]
# [version]$OSVersion = Get-CimInstance -Class Win32_OperatingSystem | Select-Object -ExpandProperty Version
Как в PowerShell мы можем отличить, работаем ли мы в Windows 10 или Windows 11?
В Википедии можно найти список номеров сборок и информацию, к какой версии операционной системы они относятся. Используя эту информацию, вы можете определить версию ОС, сравнив свойство [Environment]::OSVersion.Version.Build
.
Кроме того, командлет Get-ComputerInfo
возвращает OSName в виде такой строки:
Майкрософт Виндовс 11 Про
Вы можете использовать оператор -match
, чтобы проверить, содержит ли строка «11»:
(Get-ComputerInfo | Select-Object -expand OsName) -match 11
Это должно работать в большинстве случаев, но я сомневаюсь, что это будет лучший вариант.
чтобы получить информацию более конкретным способом, вы можете сделать: get-ciminstance -query "select caption from win32_operatingsystem"
или использовать ее в операторе If: If (get-ciminstance -query "select caption from win32_operatingsystem where caption like '%Windows 11%'"){}
Можно было бы сделать get-computerinfo -Property OsName
, но, как ни странно, это по-прежнему запрашивает множество несвязанных вещей, таких как информация о процессоре и сети :(.
Составление списка из номеров сборок звучит так, как будто со временем произойдет сбой по мере появления новых номеров сборок, но спасибо за подход
Get-ComputerInfo
, он отлично работает, но кажется довольно медленным, так как ему приходится обрабатывать все деталиGet-ComputerInfo
(наверное это делает то же самое, что и командаsysteminfo
). Если мы сможем точно определить, что он делает для генерацииOsName
, это будет прекрасно. Я сделал полный поиск в реестре для «Microsoft Windows 10 Pro», но этого текста нет.