Get-ComputerInfo проти SystemInfo: реальні відмінності, використання та хитрощі

Останнє оновлення: 14/08/2025
Автор: Ісаак
  • Get-ComputerInfo повертає узгоджені об'єкти; systeminfo вимагає CSV + ConvertFrom-Csv.
  • systeminfo працює швидко та віддалено за допомогою /S /U /P; Get-ComputerInfo потребує Invoke-Command.
  • Локалізація впливає на системну інформацію; нормалізує заголовки для надійних скриптів.

Порівняння Get-ComputerInfo та systeminfo у Windows

Порівняння Get-ComputerInfo та systeminfo.exe – це повторюваний запит. серед адміністраторів, які шукають найефективніший та «чистіший» спосіб інвентаризації обладнання WindowsХоча обидва повертають системну інформацію, Вони поводяться по-різному, виконують по-різному та пропонують по-різному типи результатів., що має прямі наслідки для автоматизації, звітності та віддаленого виконання.

У цій статті ви знайдете вичерпний посібник який інтегрує реальні практики, нюанси виконання, Трюки з трубопроводом PowerShell і менш очевидні деталі, такі як пошук заголовків у systeminfo або чому Властивість -Get-ComputerInfo повертає об'єкти Навіть коли ви запитуєте одне поле. Все пояснюється іспанською мовою, з чіткими прикладами та рішеннями поширених помилок під час роботи з віддаленими комп’ютерами.

Що таке systeminfo.exe

SystemInfo

systeminfo.exe — це класична утиліта командного рядка. Команди створити профіль комп'ютера з WindowsДоступно зі старіших версій (Windows XP Professional) до… Windows 11, і знаходиться в %windir%\system32\systeminfo.exe (і на 64-бітних системах також) %windir%\SysWOW64\systeminfo.exe). Відображає налаштування операційної системи, інформацію про безпеку, ідентифікатор продукту та властивості апаратні засоби як Оперативна пам'ять, дисковий простір або мережеві карти.

Величезна перевага — його повсюдністьВін присутній практично в кожній операційній системі Windows. Але має одне суттєве обмеження: вихід розташованийЦе означає, що назви властивостей, такі як «Available Physical Memory» (Доступна фізична пам’ять) англійською мовою, можуть відображатися по-різному іншими мовами, що ускладнює автоматизацію, яка залежить від цих заголовків.

Незважаючи на те, що це «старий» інструмент, він напрочуд гнучкийПідтримує вихідні формати за допомогою перемикача /ФО (Таблиця, Список, CSV) та може звертатися до віддалених комп'ютерів використання /S для команди, /U для користувача і /P для пароля. Це робить його корисним для швидкої інвентаризації, коли ви не хочете налаштовувати віддалені сеанси PowerShell.

Що таке Get-ComputerInfo

get-computerinfo

Get-ComputerInfo – це вбудований командлет, починаючи з Windows PowerShell 5.1. (доступно у Windows 10 та Windows Server 2016), що об'єднує властивості системи та ОС в один об'єкт. Це доступно лише у Windows та повертає екземпляри типу Microsoft.PowerShell.Management.ComputerInfo із сотнями перелічених об'єктів нерухомості.

Його великою перевагою є те, що результат є об'єктно-орієнтованим з першої хвилини.: вам не потрібно розбирати текстВи можете спрямувати це до трубопроводу, форматувати, фільтрувати та експортувати природним шляхом за допомогою таких командлетів, як Select-Object, Список форматів, Sort-Object o Експорт-CSV. Більше деталей у цьому посібнику.

  Є 5 способів виправити цю помилку: Світлофор закінчився

Параметр -Property приймає масив рядків (String[]) і підтримує шаблони підстановки. Це дозволяє вибирати певні набори властивостей (наприклад, усі властивості, пов’язані з BIOS з *БІОС*) або невеликий список, наприклад Назва ОС, часовий пояс, тип продукту ОС. Важливо: Псевдонім для Get-ComputerInfo — gin, якщо ви зіткнетеся зі скороченими сценаріями.

Ключові відмінності та коли їх використовувати

Вивід та тип даних: systeminfo.exe створює текст (хоча це може бути CSV), що вимагає перетворення на об'єкти для комфортної роботи в PowerShell; Get-ComputerInfo повертає багаті об'єкти готовий до трубопроводу. Цей ресурс допомагає краще зрозуміти процес.

ПродуктивністьДжерела погоджуються, що Get-ComputerInfo працює відносно повільно.Запитуйте менше об'єктів нерухомості з -Власність не призводить до значного покращення, оскільки все одно збирає значну частину інформації. Systeminfo.exe зазвичай досить швидко, особливо з CSV.

Віддаленийsysteminfo.exe пропонує /S, /U, /P для віддалених запитів; Get-ComputerInfo не має -ComputerName або -CimSession, тому вам потрібно використовувати Invoke-Command або віддалені сеанси PowerShell (WinRM). Для отримання додаткової інформації відвідайте цей посібник.

systeminfo.exe в конвеєрі: від тексту до об'єктів

Найпрактичніший спосіб використання systeminfo в PowerShell полягає в тому, щоб запитувати CSV та конвертувати його в об'єкти за допомогою ConvertFrom-CSVТаким чином, ви можете вибирати та працювати з властивостями без регулярних виразів чи ручного обрізання.

$objetos = systeminfo.exe /FO CSV | ConvertFrom-Csv
$objetos.'Available Physical Memory'

Основна проблема — це заголовкиВ інших мовах властивості будуть іншими, що порушує роботу скриптів. Щоб уникнути цього, нормалізує заголовки та замінити їх фіксованими та стабільними назвами.

$headers = 1..30 | ForEach-Object { "Property$_" }
$objetos = systeminfo.exe /FO CSV |
  Select-Object -Skip 1 |
  ConvertFrom-Csv -Header $headers

$objetos.Property23

Ще більш елегантний варіант полягає у визначенні власних назв стовпців з самого початку. Наприклад, зіставте всі стовпці з чіткими назвами, такими як Ім'я хоста, Ім'я ОС, Версія ОС, ЗагальнаФізичнаПам'ять, І т.д.

$headers = 'HostName','OSName','OSVersion','OSManufacturer','OSConfiguration','OSBuildType',
  'RegisteredOwner','RegisteredOrganization','ProductID','OriginalInstallDate','SystemBootTime',
  'SystemManufacturer','SystemModel','SystemType','Processors','BIOSVersion','WindowsDirectory',
  'SystemDirectory','BootDevice','SystemLocale','InputLocale','TimeZone','TotalPhysicalMemory',
  'AvailablePhysicalMemory','VirtualMemoryMaxSize','VirtualMemoryAvailable','VirtualMemoryInUse',
  'PageFileLocations','Domain','LogonServer','Hotfix','NetworkCard','HyperVRequirements'

$objetos = systeminfo.exe /FO CSV |
  Select-Object -Skip 1 |
  ConvertFrom-Csv -Header $headers

$objetos.ProductID

Цей метод усуває мовні проблеми та робить ваш конвеєр надійнішим.Крім того, ви можете експортувати дані у CSV, JSON або маніпулювати кожною властивістю без жодних сумнівів.

Get-ComputerInfo: Вибір властивостей та форматування

Деталь, яка багатьох бентежить полягає в тому, що при запиті на окрему властивість з -Власність, командлет повертає об'єкт із цією властивістю, а не «голе» значення. Причина полягає в домовленості: -Властивість є рядком[], і він розроблений таким чином, що за допомогою кількох властивостей ви отримуєте об'єкт з ними. Для отримання додаткової інформації див. ця стаття.

$info = Get-ComputerInfo -Property OSName, TimeZone, OSProductType
Write-Output $info

# En formato lista
$info | Format-List

Якщо вам потрібна лише вартість нерухомості, вам потрібно витягти член, наприклад, (Get-ComputerInfo).НазваОС, або використовуйте Вибір об'єкта -Розгорнути властивістьАле пам'ятайте, що Запит на меншу кількість об'єктів нерухомості суттєво не пришвидшує процес.

  Високі піки завантаження процесора системою або svchost.exe – Покроковий технічний посібник

Запити з підстановочними знаками: BIOS та інше

Get-ComputerInfo дуже корисний для фільтрації за шаблонамиНаприклад, щоб побачити все, що пов’язано з BIOS, використовуйте -Властивість *BIOS* та відформатовані у вигляді списку для наочності.

Get-ComputerInfo -Property *BIOS* | Format-List

Також можна поєднувати з Invoke-Command віддалено запитувати підмножину властивостей та передавати результати до CSV або форматованої консолі.

Продуктивність та передовий досвід

Get-ComputerInfo пропонує багато контенту, але не є найшвидшимДжерела погоджуються, що Не рекомендується викликати його кілька разів для різних властивостей.: означатиме повторення роботи. Найкраще відновити весь об'єкт. тільки один раз y виберіть властивості післяДля отримання додаткової інформації перегляньте ця стаття.

ysteminfo.exe дуже ефективний у CSV і, поєднуючи це з ConvertFrom-CSV та користувацькі заголовки можуть бути основою для швидкого звітування в гетерогенних середовищах, де віддалений доступ PowerShell не завжди ввімкнено.

Віддалене виконання: підходи та приклади

За допомогою systeminfo.exe Ви можете безпосередньо запитувати віддалені комп’ютери за допомогою /S (назва команди), /U (користувач) та /P (пароль). Це корисно, коли WinRM не налаштовано або вам потрібні конкретні результати.

systeminfo /S EQUIPO01 /U DOMINIO\usuario /P ContraseñaSegura
# Sin dominio, cuenta local
systeminfo /S EQUIPO01 /U .\Administrador /P ContraseñaSegura

За допомогою Get-ComputerInfo, параметр -ComputerName відсутній. Для віддаленої роботи використовуйте Invoke-Command і блок сценарійЗбір даних здійснюється на віддаленому хості та повертаються повні об'єктиЩоб розширити свої знання, відвідайте .

Invoke-Command -ComputerName 'DC1' -ScriptBlock {
  Get-ComputerInfo -Property *BIOS*
}

Практичний приклад для інвентаризації виправленьми розширили власність Виправлення OSH, ми сортуємо за назвою команди та експортуємо, якщо необхідно.

Invoke-Command -ComputerName 'DC1','SRV01','Localhost' -ScriptBlock {
  Get-ComputerInfo | Select-Object -ExpandProperty OSHotFixes
} | Sort-Object PSComputerName | Export-Csv -NoTypeInformation SRV-Updates.csv

Типові помилки: облікові дані, змінні та синтаксис

1) «Одне або декілька імен комп’ютерів недійсні» в Invoke-CommandЗазвичай це трапляється тому, що передати недійсне або помилково написане ім'я. Пам'ятайте: $CD3160-05 Це не назва команди, це вираз яка намагається відняти 05 від змінної $CD3160 (яка, найімовірніше, не існує). Вона використовує лапки та буквальний текст: -Ім'я комп'ютера 'CD3160-05'.

# Incorrecto (interpreta variable y resta)
Invoke-Command -ComputerName $CD3160-05 -ScriptBlock { Get-ComputerInfo }

# Correcto (literal)
Invoke-Command -ComputerName 'CD3160-05' -ScriptBlock { Get-ComputerInfo }

2) Закриття дужок та блокування ScriptBlock. Обов’язково правильно відкривати та закривати { } та уникайте змішування інтерактивної консолі всередині ScriptBlock. Напишіть інструкцію, яка буде виконуватися віддалено, без підказок або "PS C:\>".

  Дізнайтеся, як вимкнути важливі місця на вашому iPhone

3) Запит пароля під час використання systeminfo /SЯкщо віддалений комп’ютер не надає спільного контексту автентифікації, Ви повинні вказати /U та /PДля локальних облікових записів використовуйте .\КористувачЯкщо є домен, ДОМЕН\КористувачЯкщо ви не знаєте домен, перевірте його на локальному комп’ютері за допомогою Whoami або %USERDOMAIN%. Для отримання додаткової інформації див. .

4) WinRM та політикиДля Invoke-Command, WinRM має бути ввімкнено а віддалений комп’ютер має приймати з’єднання (брандмауер та TrustedHosts). Запустіть Enable -PSRemoting -Force у пункті призначення та перевірте правила брандмауера на наявність WS-Керування (HTTP 5985/HTTPS 5986)Щоб дізнатися більше, відвідайте .

Ознайомлення з офіційною довідкою Get-ComputerInfo

Використання Get-Help Get-ComputerInfo para consultar la синтаксис та властивості. Параметр -Власність ти приймаєш Рядок [], підтримує шаблони підстановки та повертає об'єкт Комп'ютерІнфоВи можете передати рядки, які є іменами властивостей, і пам’ятати, що працює лише у Windows.

Get-Help Get-ComputerInfo
# Sintaxis relevante
Get-ComputerInfo  <String[]>] 
# Alias: gin

Щоб оглянути всі доступні об'єкти нерухомості у вашій системі, направити до Get-MemberУ Windows 10 відображається багато властивостей, пов'язаних з BIOS, ОС, Hyper-V тощо.

Get-ComputerInfo | Get-Member | more

Корисні приклади та форматування

Список усіх (але може бути дуже довгим; використовуйте більше для нумерації сторінок):

Get-ComputerInfo | more

Фільтрувати за версією використання підстановочних символів:

Get-ComputerInfo -Property '*version'

Виберіть конкретні властивості та чітко їх відобразити:

$info = Get-ComputerInfo -Property OSName, TimeZone, OSProductType
$info | Format-List

Приклад із systeminfo + CSV та користувацькими заголовками для однакових результатів різними мовами:

$headers = 'HostName','OSName','OSVersion','OSManufacturer','OSConfiguration','OSBuildType',
  'RegisteredOwner','RegisteredOrganization','ProductID','OriginalInstallDate','SystemBootTime',
  'SystemManufacturer','SystemModel','SystemType','Processors','BIOSVersion','WindowsDirectory',
  'SystemDirectory','BootDevice','SystemLocale','InputLocale','TimeZone','TotalPhysicalMemory',
  'AvailablePhysicalMemory','VirtualMemoryMaxSize','VirtualMemoryAvailable','VirtualMemoryInUse',
  'PageFileLocations','Domain','LogonServer','Hotfix','NetworkCard','HyperVRequirements'

$objetos = systeminfo.exe /FO CSV |
  Select-Object -Skip 1 |
  ConvertFrom-Csv -Header $headers

$objetos | Select-Object HostName, OSName, OSVersion
msinfo32
Пов'язана стаття:
Як переглянути інформацію про систему та використовувати msinfo32 у Windows

Сумісність, розташування та пов'язані інструменти

systeminfo.exe — це рідний бінарний файл Windows. а його код можна знайти в таких проектах, як ReactOS. Його типове розташування в System32 і SysWOW64 для систем x64. Підтримує вихідний формат через /ФО (Таблиця, Список, CSV). Ви також можете ознайомитися як підтримувати компоненти довідки в актуальному стані.

Get-ComputerInfo було введено у PowerShell 5.1., що охоплює потребу, яку ми раніше вирішували за допомогою Get-WmiObject / Get-CimInstanceЩе один пов'язаний інструмент – це msinfo32.exe, корисний для діагностики графічного інтерфейсу, хоча й менш зручний для конвеєрів.

Драйвери PCL проти PostScript
Пов'язана стаття:
Драйвери PCL проти PostScript: відмінності та як вибрати

залишити коментар