はじめに
社内ネットワークの大量のPCからスペックなどの情報を取得する際にいろいろと調べたので覚え書きです。PowerShellでGet-WmiObjectコマンドを使用し取得します。
PC名またはIPが分かる状態を前提にしています。テスト時のOSはWindows10, 11です。
-computername <PC名またはIP>
を省略すると自身の情報を取得します。
コンピュータ名
(Get-WmiObject Win32_ComputerSystem -computername "PC名").Name
# 結果:
# PC名
モデル
(Get-WmiObject Win32_ComputerSystem -computername "PC名").Model
# 結果:
# B460M
マザーボード
(Get-WmiObject Win32_BaseBoard -computername "PC名").Manufacturer
(Get-WmiObject Win32_BaseBoard -computername "PC名").Product
# 結果:
# MouseComputer
# B460M
IPアドレス
(Get-WmiObject Win32_NetworkAdapterConfiguration -computername "PC名").IPAddress
# 結果:
# XXX.XXX.XXX.XXX
結果表示だけ見るとIPアドレスがStringで1つだけ返ってきている風ですが実際はリスト(Object[])だったりします。
(Get-WmiObject Win32_NetworkAdapterConfiguration -computername "PC名").IPAddress.GetType().Name
# 結果:
# Object[]
この場合は何番目に入っているか分からないので、foreach
で取り出してみます。
foreach ($ip in ((Get-WmiObject Win32_NetworkAdapterConfiguration -computername "PC名").IPAddress)) {
if ($ip -ne $null) {
$IPAddress = $ip
}
}
echo $IPAddress
# 結果:
# XXX.XXX.XXX.XXX
OS
(Get-WmiObject Win32_OperatingSystem -computername "PC名").Caption
# 結果:
# Microsoft Windows 11 Home
CPU
(Get-WmiObject Win32_Processor -computername "PC名").Name
# 結果:
# Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz
RAM
[int](((Get-WmiObject Win32_ComputerSystem -computername "PC名").TotalPhysicalMemory)/1GB)
# 結果:
# 32
$Capacitys = (Get-WmiObject Win32_PhysicalMemory -computername "PC名").Capacity
for ($i = 0; $i -lt $Capacitys.length; $i++) {
$Capacitys[$i] = [int]($Capacitys[$i]/1GB)
}
echo $Capacitys
# 結果:
# 16
# 16
グラフィックカード
(Get-WmiObject Win32_VideoController -computername "PC名").name
# 結果:
# NVIDIA GeForce RTX 3060
ネットワークアダプタ
(Get-WmiObject Win32_NetworkAdapter -Filter "NetConnectionStatus = 2" -computername "PC名").Name
# 結果:
# Intel(R) Ethernet Connection (12) I219-V
ローカルディスク
Get-WmiObject Win32_LogicalDisk -Filter "DriveType = 3" -computername "PC名"
<# 結果:
DeviceID : C:
DriveType : 3
ProviderName :
FreeSpace : 171501187072
Size : 510781288448
VolumeName : Windows
DeviceID : D:
DriveType : 3
ProviderName :
FreeSpace : 955082768384
Size : 2000382062592
VolumeName :
#>
$LocalDisk = Get-WmiObject Win32_LogicalDisk -Filter "DriveType = 3" -computername "PC名"
if ($LocalDisk.GetType().Name -ne "Object[]"){
$LocalDisk = @($LocalDisk)
}
for ($i = 0; $i -lt $LocalDisk.length; $i++) {
$LocalDisk[$i] = ($LocalDisk[$i].DeviceID + " " + [int]($LocalDisk[$i].FreeSpace/1GB) + " GB/" + [int]($LocalDisk[$i].Size/1GB) + " GB")
}
echo $LocalDisk
# 結果:
# C: 160 GB/476 GB
# D: 889 GB/1863 GB
以上を使いやすいように関数にまとめたものはこちら!