Зачем гуглить версию сборки, если одна команда отдаёт всё? 🤔 systeminfo из CMD — это уже музейный экспонат. Покажу 5 полей, которые реально нужны админу. Честно предупреждаю: на старых HDD команда «думает» 3–4 секунды. Это не баг. Это последовательное чтение WMI, реестра и COM-объектов. Я в PowerShell 20 лет, поэтому говорю как есть: удобство ≠ производительность.
ПРОСТО - ПОСТАВЬТЕ ЛАЙК, ЗА СТАРАНИЯ, СПАСИБО
🔍 ЧТО ПРОИСХОДИТ ПОД КАПОТОМ?
Cmdlet последовательно опрашивает Win32_OperatingSystem, CIM-классы, ветки реестра и .NET-окружение. Итог: 200+ свойств. На NVMe это ~0.8 сек. На вращающемся диске — 3–4 секунды. Архитектура cmdlet такова, что он не кэширует результаты. Каждый запуск — новый полный цикл сбора.
⚠️ МИФ ПРО ПАРАМЕТР -PROPERTY
В PS 7.6.0 параметр -Property существует, но он не ускоряет выполнение. Cmdlet всё равно инициализирует все внутренние провайдеры, собирает полный объект, а уже потом фильтрует вывод. Экономия памяти есть только на этапе передачи по конвейеру. Для пяти серверов — незаметно. Для трёх тысяч машин — критично.
🎯 ЧТО ВАМ НУЖНО НА САМОМ ДЕЛЕ
90% задач инвентаризации сводятся к этому списку:
✅ OsName — имя ОС
✅ OsVersion — версия сборки
✅ CsProcessors — архитектура ЦП
✅ WindowsInstallDateFromRegistry — дата установки
✅ TimeZone — текущий часовой пояс
🛠️ РАБОЧИЙ ВАРИАНТ ДЛЯ PS 7.6.0 / WIN11 24H2
Ленивый путь (читабельно, но медленно):
Get-ComputerInfo -Property OsName, OsVersion, CsProcessors, WindowsInstallDateFromRegistry, TimeZone | Format-Table -AutoSize
Путь инженера (быстро, точечно, без мусора):
$os = Get-CimInstance Win32_OperatingSystem
$cpu = Get-CimInstance Win32_Processor | Select-Object -First 1
$date = [datetime]::FromFileTime((Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').InstallDate)
[PSCustomObject]@{
OS = $os.Caption
Build = $os.Version
CPU = "$($os.NumberOfProcessors) x $($cpu.Name)"
Install = $date
TZ = [System.TimeZoneInfo]::Local.DisplayName
} | Format-Table -AutoSize
Разница в скорости на HDD: до 10 раз.
🔑 ДОМЕННАЯ СРЕДА И ПРАВА ДОСТУПА
Команда читает HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion. По умолчанию доступ есть у Authenticated Users. Если скрипт падает с Access Denied, причина в Restrictive GPO, AppLocker или изменённых ACL. Гасить ошибку через -ErrorAction SilentlyContinue — это маскировка проблемы, а не решение. Лечите политики безопасности, а не глушите вывод.
🤔 ВОПРОС НА ЗАСЫПКУ
Вы готовы жертвовать тремя секундами ради одной строки кода, или точечный CIM-запрос станет вашим стандартом для парковой автоматизации? Пишите в комментариях, какой метод используете в продакшене и почему.
#PowerShell #PS7 #PowerShell7 #Windows11 #Windows10 #Скрипты #Администрирование #DevOps #SysAdmin #Automation #Инвентаризация #GetComputerInfo #CIM #WMI #Registry #GPO #ActiveDirectory #ServerAdmin #ITInfrastructure #TechBlog #Программирование #ИТ #СистемныйАдминистратор #Оптимизация #PowerShellCore #Win11_24H2 #MicrosoftLearn #TechTips #ITSecurity #CodeOptimization