LoginSignup
0
0

More than 1 year has passed since last update.

PowerShellでローカルネットワーク内のPCから情報を取得する

Posted at

はじめに

社内ネットワークの大量の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

:point_down:以上を使いやすいように関数にまとめたものはこちら!:point_down:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0