Я пытаюсь написать сценарий PowerShell, который фильтрует действия на основе выпуска Windows (Professional, Enterprise, home и т.д.). Я могу использовать Get-WmiObject Win32_OperatingSystem | Select-Object Caption , но согласно документации MS эта "строка может быть локализована".

У меня нет систем не на английском языке для Windows. Кто-нибудь может подтвердить, достаточно ли сравнения со строкой заголовка, содержащей "Enterprise" или "Home", для других языковых установок?

Если оно локализовано, как вообще можно определить издание?

Благодарю.

1 ответ1

0

Основываясь на этом посте, проблема заключается в поиске окончательного источника. Лучшее, что я смог найти, была эта документация для разработчиков, которая не настолько полная, как можно было бы предположить в ответе по первой ссылке.

Тем не менее, следующий код возвратит "официальное" имя Microsoft на английском языке для текущей работающей версии Windows:

$page = Invoke-WebRequest -uri 'https://msdn.microsoft.com/en-us/library/ms724358.aspx'

$TableText = ($page.AllElements | 
        Where-Object {$_.tagname -eq 'tbody' -and $_.innertext -like 'valuemeaning*'} |
        Select-Object -ExpandProperty innertext) -split "`r`n"

$CSV = $TableText | Where-Object {$_ -match '^0x0.*'} | 
        ForEach-Object {$_ -replace "^(0x0[0-9A-F]+) ",'$1,'} |
        ForEach-Object {"$([convert]::ToInt16($_.split(',')[0],16))" + ',' + $_.split(',')[-1]}

$Editions = ConvertFrom-Csv $CSV -Header 'SKU','Name'

$ThisOS = (Get-WmiObject Win32_OperatingSystem).operatingsystemsku

$Editions | Where-Object {$_.SKU -eq $ThisOS} |Select-Object -ExpandProperty Name

Надеюсь, это кому-нибудь поможет. Я могу изменить код, если кто-то найдет лучший онлайн-источник для поиска SKU.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .