パソコンの構成情報を出力するスクリプト

コンピュータ

SNSで、よくパソコン構成の投稿を目にしますが、では自分のパソコンの構成を諳んじることが出来るかというと自信がありません。
WMI(Windows Management Instrumentation)で色々なパソコンの情報が取得出来るので、主要パーツの名称を取得するスクリプトを作りました。

スクリプト

<#
.SYNOPSIS
実行中のパソコンに関する情報を取得します。
<CommonParameters> はサポートしていません

.DESCRIPTION
主にハードウェアに関する情報です。

.EXAMPLE
PS>.\Get-PCInfo.ps1

#>

$ErrorActionPreference = "STOP"

function Get-PCInfo
{
    $Info = @{}

    $Info['NOW'] = Get-Date


    $Info['OS'] = Get-WmiObject Win32_OperatingSystem | Select-Object -First 1 | % { $_.Caption + "[" + $_.BuildNumber + "]" }

    $Info['CPU'] = Get-WmiObject Win32_Processor | Select-Object -First 1 | % { $_.Name }
    $Info['MB'] = Get-WmiObject Win32_BASEBOARD | Select-Object -First 1 | % { $_.Manufacturer + " " + $_.Model  }
    $Info['GPU'] = Get-WmiObject Win32_VideoController | Select-Object -First 1 | % { $_.Name + " " + [int]($_.AdapterRAM / 1GB) + "GB" }

    $s = (Get-WmiObject Win32_PhysicalMemory | % { $_.Capacity } | Measure-Object -Sum).Sum
    $Info['RAM'] = Get-WmiObject Win32_PhysicalMemory | Select-Object -First 1 | % { $_.Manufacturer + " " + $_.PartNumber.Trim() + " " + $_.Speed + "MHz " + [int]($_.Capacity / 1GB) + "GB x " + [int]($s / $_.Capacity) }

    $Info['SSD'] = Get-WmiObject Win32_DiskDrive | ? {
        
        $b = Get-WmiObject Win32_LogicalDiskToPartition | ? { $_.Dependent -match """C:""$" } | % { $_.Antecedent }
        $c = Get-WmiObject Win32_DiskDriveToDiskPartition | ? { $b -eq $_.Dependent } | % { ("\\.\" + [regex]::Match($_.Antecedent,"(PHYSICALDRIVE\d)").Value) }
        $c -eq $_.DeviceID

    } | % {
        #$_.Model
        $_.Model + " " + [int]($_.Size / 1GB) + "GB"
    }

    $Info['NIC'] = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object{($_.IPEnabled -eq "TRUE")} | ? { $_.DefaultIPGateway } | Select-Object -First 1 | % { $_.Description }
    $Info['SND'] = Get-WmiObject Win32_SoundDevice | ? { "OK" -eq $_.Status } | Select-Object -First 1 | % { $_.Name }


    [PSCustomObject]$Info
}
$Info = Get-PCInfo
('OS','CPU','GPU','MB','RAM','SSD','NIC') | % { $n = $_; $v = $Info.$n; "${n} : ${v}"  }

結果

既知の問題又は仕様

  1. 複数あるデバイスは最初の1件のみです。
  2. メモリの枚数は同一サイズ以外だと誤った結果になります。
  3. ストレージはCドライブを決め打ちして取得しています。
  4. ネットワークアダプタはデフォルトゲートウェイがセットしてあるデバイスを取得しています。

コメント