PowerShell, определите, работаем ли мы в Windows 10 или Windows 11

Если я запускаю следующий тест версии в 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?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
178
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В Википедии можно найти список номеров сборок и информацию, к какой версии операционной системы они относятся. Используя эту информацию, вы можете определить версию ОС, сравнив свойство [Environment]::OSVersion.Version.Build.


Кроме того, командлет Get-ComputerInfo возвращает OSName в виде такой строки:

Майкрософт Виндовс 11 Про

Вы можете использовать оператор -match, чтобы проверить, содержит ли строка «11»:

(Get-ComputerInfo | Select-Object -expand OsName) -match 11

Это должно работать в большинстве случаев, но я сомневаюсь, что это будет лучший вариант.

Составление списка из номеров сборок звучит так, как будто со временем произойдет сбой по мере появления новых номеров сборок, но спасибо за подход Get-ComputerInfo, он отлично работает, но кажется довольно медленным, так как ему приходится обрабатывать все детали Get-ComputerInfo (наверное это делает то же самое, что и команда systeminfo). Если мы сможем точно определить, что он делает для генерации OsName, это будет прекрасно. Я сделал полный поиск в реестре для «Microsoft Windows 10 Pro», но этого текста нет.

YorSubs 30.10.2022 10:13

чтобы получить информацию более конкретным способом, вы можете сделать: get-ciminstance -query "select caption from win32_operatingsystem" или использовать ее в операторе If: If (get-ciminstance -query "select caption from win32_operatingsystem where caption like '%Windows 11%'"){}

Toni 30.10.2022 10:17

Можно было бы сделать get-computerinfo -Property OsName, но, как ни странно, это по-прежнему запрашивает множество несвязанных вещей, таких как информация о процессоре и сети :(.

zett42 30.10.2022 14:16

Другие вопросы по теме