- Get-ComputerInfo повертає узгоджені об'єкти; systeminfo вимагає CSV + ConvertFrom-Csv.
- systeminfo працює швидко та віддалено за допомогою /S /U /P; Get-ComputerInfo потребує Invoke-Command.
- Локалізація впливає на системну інформацію; нормалізує заголовки для надійних скриптів.
Порівняння Get-ComputerInfo та systeminfo.exe – це повторюваний запит. серед адміністраторів, які шукають найефективніший та «чистіший» спосіб інвентаризації обладнання WindowsХоча обидва повертають системну інформацію, Вони поводяться по-різному, виконують по-різному та пропонують по-різному типи результатів., що має прямі наслідки для автоматизації, звітності та віддаленого виконання.
У цій статті ви знайдете вичерпний посібник який інтегрує реальні практики, нюанси виконання, Трюки з трубопроводом PowerShell і менш очевидні деталі, такі як пошук заголовків у systeminfo або чому Властивість -Get-ComputerInfo повертає об'єкти Навіть коли ви запитуєте одне поле. Все пояснюється іспанською мовою, з чіткими прикладами та рішеннями поширених помилок під час роботи з віддаленими комп’ютерами.
Що таке systeminfo.exe
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 – це вбудований командлет, починаючи з Windows PowerShell 5.1. (доступно у Windows 10 та Windows Server 2016), що об'єднує властивості системи та ОС в один об'єкт. Це доступно лише у Windows та повертає екземпляри типу Microsoft.PowerShell.Management.ComputerInfo із сотнями перелічених об'єктів нерухомості.
Його великою перевагою є те, що результат є об'єктно-орієнтованим з першої хвилини.: вам не потрібно розбирати текстВи можете спрямувати це до трубопроводу, форматувати, фільтрувати та експортувати природним шляхом за допомогою таких командлетів, як Select-Object, Список форматів, Sort-Object o Експорт-CSV. Більше деталей у цьому посібнику.
Параметр -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).НазваОС, або використовуйте Вибір об'єкта -Розгорнути властивістьАле пам'ятайте, що Запит на меншу кількість об'єктів нерухомості суттєво не пришвидшує процес.
Запити з підстановочними знаками: 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:\>".
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
Сумісність, розташування та пов'язані інструменти
systeminfo.exe — це рідний бінарний файл Windows. а його код можна знайти в таких проектах, як ReactOS. Його типове розташування в System32 і SysWOW64 для систем x64. Підтримує вихідний формат через /ФО (Таблиця, Список, CSV). Ви також можете ознайомитися як підтримувати компоненти довідки в актуальному стані.
Get-ComputerInfo було введено у PowerShell 5.1., що охоплює потребу, яку ми раніше вирішували за допомогою Get-WmiObject / Get-CimInstanceЩе один пов'язаний інструмент – це msinfo32.exe, корисний для діагностики графічного інтерфейсу, хоча й менш зручний для конвеєрів.
Пристрасний письменник про світ байтів і технологій загалом. Я люблю ділитися своїми знаннями, пишучи, і саме це я буду робити в цьому блозі, показуватиму вам все найцікавіше про гаджети, програмне забезпечення, апаратне забезпечення, технологічні тренди тощо. Моя мета — допомогти вам орієнтуватися в цифровому світі в простий і цікавий спосіб.