
Давайте рассмотрим несколько способов инвентаризации версий и сборок ОС Windows в домене Active Directory (это особенно актуально для Windows 10). Если у вас нет инструментов для автоматического получения конфигураций компьютеров, таких как SCCM, GLPI с FusionInventory или хотя бы хост Windows Server Update (WSUS) (он также позволяет получить версию Windows на обнаруженных компьютерах), вы можете использовать сценарий PowerShell для поиска версий/сборок Windows на компьютерах домена.
На отдельном компьютере можно получить версию Windows и номер сборки из реестра или с помощью SystemInfo:
Get-ItemProperty 'HKLM:SOFTWARE\Microsoft\Windows NT\CurrentVersion' | Select-Object ProductName, ReleaseID, CurrentBuild
Get-ComputerInfo | select WindowsProductName, WindowsVersion, OsHardwareAbstractionLayer
Чтобы получить список активных компьютеров в домене Active Directory и версии (сборки) Windows на них, можно воспользоваться командой Get-ADComputers.
Убедитесь, что модуль Active Directory Module for PowerShell установлен на вашем компьютере, и выполните приведенную ниже команду:
Get-ADComputer -Filter {(Enabled -eq $True)} -Property * | Select-Object Name,OperatingSystem,OperatingSystemVersion
Чтобы перевести номер сборки Windows 10 и 11 в более удобный формат (21H1, 21H2 и т. д.), необходимо использовать дополнительную функцию.
function ConvertWindowsBuild{
[CmdletBinding()]
param(
[string] $OperatingSystem,
[string] $OperatingSystemVersion
)
if (($OperatingSystem -like '*Windows 10*') –or ($OperatingSystem -like 'Windows 11*')) {
$WinBuilds= @{
'10.0 (22621)' = "Windows 11 22H2"
'10.0 (19045)' = "Windows 10 22H2"
'10.0 (22000)' = "Windows 11 21H2"
'10.0 (19044)' = "Windows 10 21H2"
'10.0 (19043)' = "Windows 10 21H1"
'10.0 (19042)' = "Windows 10 20H2"
'10.0 (18362)' = "Windows 10 1903"
'10.0 (17763)' = "Windows 10 1809"
'10.0 (17134)' = "Windows 10 1803"
'10.0 (16299)' = "Windows 10 1709"
'10.0 (15063)' = "Windows 10 1703"
'10.0 (14393)' = "Windows 10 1607"
'10.0 (10586)' = "Windows 10 1511"
'10.0 (10240)' = "Windows 10 1507"
'10.0 (18898)' = 'Windows 10 Insider Preview'
}
$WinBuild= $WinBuilds[$OperatingSystemVersion]
}
else {$WinBuild = $OperatingSystem}
if ($WinBuild) {
$WinBuild
} else {
'Unknown'
}
}
Затем, чтобы получить список версий Windows с именами хостов, номерами сборок, IP-адресами и последним входом компьютера в домен, запустите следующий сценарий PowerShell:
$Comps= Get-ADComputer -Filter {(Enabled -eq $True)} -properties *
$CompList = foreach ($Comp in $Comps) {
[PSCustomObject] @{
Name = $Comp.Name
IPv4Address = $Comp.IPv4Address
OperatingSystem = $Comp.OperatingSystem
Build = ConvertWindowsBuild -OperatingSystem $Comp.OperatingSystem -OperatingSystemVersion $Comp.OperatingSystemVersion
LastLogonDate = $Comp.LastLogonDate
}
}
$CompList | Out-GridView
Вы можете отобразить результат в виде таблицы Out-GridView или экспортировать список компьютеров в CSV-файл (Export-Csv -Path .\windows_version_report.csv -NoTypeInformation
).
Чтобы отобразить сводную статистику по нескольким компьютерам с разными версиями и сборками Windows в домене, выполните следующие действия:
$CompList | Group-Object -Property Build | Format-Table -Property Name, Count
Вы также можете удаленно запросить компьютеры и получить версии Windows на них с помощью PowerShell Remoting. Этот метод медленнее, но он позволяет получить версии Windows на компьютерах в среде рабочей группы (PSRemoting in a Workgroup). Чтобы получить информацию с удаленных компьютеров, можно использовать команду Invoke-Command:
Invoke-Command -ScriptBlock {Get-ItemProperty 'HKLM:SOFTWARE\Microsoft\Windows NT\CurrentVersion' | Select-Object ProductName, ReleaseID, CurrentBuild} -ComputerName wsk-w12b21| Select-Object PSComputerName,ProductName, ReleaseID, CurrentBuild
Вы можете получить версии Windows на нескольких компьютерах в соответствии со списком в TXT-файле:
Invoke-Command –ComputerName (Get-Content c:\ps\PC_list.txt) -ScriptBlock {Get-ItemProperty 'HKLM:SOFTWARE\Microsoft\Windows NT\CurrentVersion' | Select-Object ProductName, ReleaseID, CurrentBuild}|Select-Object PSComputerName,ProductName, ReleaseID, CurrentBuild
Вы можете использовать эти сценарии Powershell для получения версий и сборок Windows на компьютерах домена, поиска компьютеров со старыми (неподдерживаемыми) сборками Windows 10 и их обновления (How to Update Windows 10 Build with Command-Line?).