- Get-ComputerInfo は一貫性のあるオブジェクトを返しますが、systeminfo には CSV + ConvertFrom-Csv が必要です。
- systeminfo は /S /U /P で高速かつリモートで実行できますが、Get-ComputerInfo には Invoke-Command が必要です。
- ローカリゼーションは systeminfo に影響し、堅牢なスクリプトのヘッダーを正規化します。
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)。オペレーティングシステムの設定、セキュリティ情報、製品ID、およびプロパティを表示します。 ハードウェア として RAM、ディスク容量、またはネットワークカード.
大きな利点はその普遍性である: ほぼすべてのWindowsオペレーティングシステムに搭載されています。ただし、大きな制限が1つあります。 出口はつまり、英語の「使用可能な物理メモリ」などのプロパティ名は他の言語では異なって表示される可能性があり、それらのヘッダーに依存する自動化が複雑になります。
「古い」ツールであるにもかかわらず、驚くほど柔軟性があります: スイッチで出力形式をサポート /FO (表、リスト、CSV)と リモートコンピュータを参照できる 使用して /S チームのために、 /U ユーザーと /P パスワードを入力します。これは、リモート PowerShell セッションを設定したくない場合に、迅速なインベントリ作成に役立ちます。
Get-ComputerInfoとは
Get-ComputerInfo は Windows PowerShell 5.1 以降の組み込みコマンドレットです。 (Windows 10およびWindows Server 2016で利用可能) システムとOSのプロパティを1つのオブジェクトに集約します。 は Windowsでのみ利用可能 そして、その型のインスタンスを返す。 Microsoft.PowerShell.Management.ComputerInfo 数百の物件が掲載されています。
その大きな利点は、出力が最初からオブジェクト指向であることです。: テキストを解析する必要はないそれをパイプラインに流すこともできます。 formatear次のようなコマンドレットで自然にフィルタリングしてエクスポートできます。 選択し、オブジェクト, フォーマットリスト, ソートオブジェクト o エクスポート-CSV. 詳細はこのガイドをご覧ください.
-Propertyパラメータは文字列の配列(String[])を受け入れます。 ワイルドカードをサポートしています。これにより、特定のプロパティセット(例えば、 BIOS とともに *BIOS*)または次のような短いリスト OS名、タイムゾーン、OS製品タイプ。重要: Get-ComputerInfoのエイリアスはginです短縮されたスクリプトに遭遇した場合に備えて。
主な違いとそれぞれの使い分け方
出力とデータ型: systeminfo.exe は以下を生成します テキスト (CSV形式も可)PowerShellで快適に動作させるにはオブジェクトへの変換が必要です。Get-ComputerInfoは以下を返します。 豊富なオブジェクト パイプラインの準備が整いました。 このリソースはプロセスをよりよく理解するのに役立ちます.
パフォーマンス: 情報筋によると、 Get-ComputerInfoは比較的遅い物件数を減らして -財産 いずれにしても多くの情報を収集するため、大幅な改善にはつながりません。Systeminfo.exeは通常 かなり速い特に CSV の場合。
リモート: systeminfo.exeは /すする リモートクエリの場合; Get-ComputerInfo -ComputerName または -CimSession がありませんなので、 Invoke-Command またはリモートPowerShellセッション(WinRM)です。詳細については、 このガイド.
パイプラインの systeminfo.exe: テキストからオブジェクトへ
PowerShellでsysteminfoを使用する最も実用的な方法 CSVをリクエストしてオブジェクトに変換するには 変換元-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
さらにエレガントなオプション 最初から独自の列名を定義することです。例えば、すべての列に次のようなわかりやすい名前を付けます。 ホスト名、OS名、OSバージョン、合計物理メモリ, etc.
$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: プロパティの選択と書式設定
多くの人を混乱させる詳細 単一のプロパティをリクエストする場合、 -財産の場合、コマンドレットは以下を返します。 その特性を持つオブジェクトであり、「裸の」値ではありません。これは慣例によるものです。 -プロパティはString[]です複数のプロパティを持つオブジェクトを取得できるように設計されています。詳細については、 この記事では.
$info = Get-ComputerInfo -Property OSName, TimeZone, OSProductType
Write-Output $info
# En formato lista
$info | Format-List
物件の値だけを知りたい場合、メンバーを抽出する必要があります。たとえば、 (Get-ComputerInfo).OSName、または使用 Select-Object -ExpandPropertyしかし、覚えておいてください 物件数を少なくしても、プロセスが大幅にスピードアップするわけではない.
ワイルドカードクエリ: BIOS など
Get-ComputerInfoはパターンによるフィルタリングに非常に便利ですたとえば、BIOSに関連するすべてを表示するには、 -プロパティ *BIOS* わかりやすくするためにリスト形式でフォーマットされています。
Get-ComputerInfo -Property *BIOS* | Format-List
Invoke-Commandと組み合わせることもできます プロパティのサブセットをリモートでクエリし、結果を CSV またはフォーマットされたコンソールにパイプします。
パフォーマンスと優れた実践
Get-ComputerInfoは多くのコンテンツを提供しますが、最速ではありません情報筋によると、 異なるプロパティに対して複数回呼び出すことはお勧めしません。: は作業を繰り返すことを意味します。オブジェクト全体を復元するのが最善です。 一度だけ y プロパティを選択詳細については、 この記事では.
ysteminfo.exeはCSVで非常に効率的です そしてそれを組み合わせると 変換元-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*
}
ホットフィックスインベントリの実例: 物件を拡張しました OSホットフィックス必要に応じて、チーム名で並べ替えてエクスポートします。
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で「XNUMXつ以上のコンピュータ名が有効ではありません」たいていの場合、それは 無効またはスペルミスのある名前を渡す。 覚えて: $CD3160-05 それはチーム名ではなく、 表現 これは変数$CD05(おそらく存在しない)から3160を減算しようとしています。引用符とリテラルテキストを使用しています。 -コンピュータ名「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をロックする。 必ず 正しく開閉する { } スクリプトブロック内に対話型コンソールを混在させないでください。プロンプトや「PS C:\>」を使わずに、リモートで実行する命令を記述してください。
3) systeminfo /S 使用時のパスワードプロンプトリモートコンピュータが認証コンテキストを共有しない場合は、 /Uと/Pを指定する必要がありますローカルアカウントの場合は、 。\ユーザードメインがある場合、 ドメイン\ユーザードメインが分からない場合は、ローカルコンピュータで whoami または %USERDOMAIN%。詳細については、を参照してください。
4) WinRMとポリシー. Invoke-Commandの場合、 WinRM を有効にする必要があります リモートコンピュータは接続を受け入れる必要があります(ファイアウォールとTrustedHosts)。 有効化-PSRemoting-Force 宛先でファイアウォールルールをチェックし、 WS-Management (HTTP 5985/HTTPS 5986)詳細については、 をご覧ください。
Get-ComputerInfo の公式ヘルプを調べる
Get-Help Get-ComputerInfo を使用します 相談する 構文とプロパティ。 パラメータ -財産 アセプタ String []ワイルドカードをサポートし、オブジェクトを返します コンピュータ情報プロパティ名の文字列をパイプで渡すことができます。 Windowsでのみ動作します.
Get-Help Get-ComputerInfo
# Sintaxis relevante
Get-ComputerInfo <String[]>]
# Alias: gin
利用可能なすべてのプロパティを検査するには システム内のチャネル メンバー登録Windows 10では、BIOS、OS、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システム用。出力形式は以下でサポートされます。 /FO (表、リスト、CSV)。また、 ヘルプコンポーネントを最新の状態に保つ方法.
Get-ComputerInfo は PowerShell 5.1 で導入されました。これまで解決してきたニーズをカバー Get-WmiObject / Get-CimInstanceもう一つの関連ツールは msinfo32.exeパイプラインにはあまり適していませんが、GUI 診断には便利です。
バイトの世界とテクノロジー全般についての情熱的なライター。私は執筆を通じて自分の知識を共有するのが大好きです。このブログでは、ガジェット、ソフトウェア、ハードウェア、技術トレンドなどについて最も興味深いことをすべて紹介します。私の目標は、シンプルで楽しい方法でデジタル世界をナビゲートできるよう支援することです。