PowerShellでシステム情報を取得(11)
前回の情報を踏まえて、ネットワーク情報の一括取得を行いましょう。ほしい情報はインターフェース、IPアドレス、サブネットマスク、デフォルトゲートウェイです。
$interface =(($wifi[0]).IPv4Address).InterfaceAlias
$IPaddress =(($wifi[0]).IPv4Address).IPAddress
$subnetmask =(($wifi[0]).IPv4Address).PrefixLength
$gateway =(Get-NetIPConfiguration | Foreach IPv4DefaultGateway).NextHop
これでほしい情報が変数に入りましたので、あとは成形して出力するだけです。
echo "Interface,IPaddress,Subnetmask,Gateway" >> <ファイル名>
echo "$interface,IPaddress,$subnetmask,$gateway" >> <ファイル名>
DNSの情報を拾いたいときはちょっと工夫して
Get-NetIPConfiguration | Foreach DNSServer
で以下のように出力されます。
InterfaceAlias Interface Address ServerAddresses PSComputerName
Index Family
-------------- --------- ------- --------------- --------------
Wi-Fi 15 IPv6 {}
Wi-Fi 15 IPv4 {X.X.X.X, X.X.X.X}
イーサネット 18 IPv6 {::::}
イーサネット 18 IPv4 {}
Bluetooth ネットワーク接続 13 IPv6 {::::}
Bluetooth ネットワーク接続 13 IPv4 {}
ほしいのはWi-FiのDNSサーバーのIPv4のアドレスです。そのため、すべてのServerAddressesオブジェクトを抽出します。
(Get-NetIPConfiguration | Foreach DNSServer).ServerAddresses
これでIPアドレスだけ抽出できます。これを変数$dnsに放り込んでechoすると
$dns=(Get-NetIPConfiguration | Foreach DNSServer).ServerAddresses
echo $dns
以下の結果が得られます。
X.X.X.X
X.X.X.X
<IPv6address>
<IPv6address>
<IPv6address>
<IPv6address>
<IPv6address>
<IPv6address>
ほしいのは1行目と2行目のIPv4のアドレスです。$dnsの配列変数からその部分だけを拾い出すので
$dns[0],$dns[1]
で表示可能です。よってネットワーク情報を書き直すと
echo "Interface,IPaddress,Subnetmask,Gateway,DNS1,DNS2" >> <ファイル名>
echo "$interface,IPaddress,$subnetmask,$gateway,$dns[0],$dns[1]" >> <ファイル名>