前提
- Default NIC の "Loopback Pseudo-Interface 1" は除外する。
- PowerShell は管理者モードで起動していることとする。
1. バージョン情報
1.1. Windows OS Version
PS C:\Users\Administrator> (Get-CimInstance -ClassName Win32_OperatingSystem).Version
10.0.19045
PS C:\Users\Administrator>
1.2. PowerShell Version
PS C:\Users\Administrator> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.19041.3031
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.19041.3031
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
PS C:\Users\Administrator>
2. 事前確認
2.1. ホスト名の確認
PS C:\Users\Administrator> hostname
XXXXXXXXXX
PS C:\Users\Administrator>
2.2. hosts の内容確認
PS C:\Users\Administrator> Get-Content "C:\Windows\System32\drivers\etc\hosts"
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
PS C:\Users\Administrator>
2.3. NIC 名の確認
PS C:\Users\Administrator> Get-NetIPAddress -AddressFamily IPv4 | Where-Object {$_.InterfaceAlias -ne "Loopback Pseudo-Interface 1"} | Select-Object -ExpandProperty InterfaceAlias
AAAAAAAAAA
BBBBBBBBBB
PS C:\Users\Administrator>
2.4. Local IP の確認
PS C:\Users\Administrator> Get-NetIPAddress -AddressFamily IPv4 | Where-Object {$_.InterfaceAlias -ne "Loopback Pseudo-Interface 1"} | Select-Object -ExpandProperty IPAddress
XXX.XXX.X.XX
YYY.YYY.Y.YY
PS C:\Users\Administrator>
3. Local IP を hosts に記載する
# IPv4アドレスを持つネットワークインターフェースを取得し、ループバックインターフェースを除外する。
$nicIPs = Get-NetIPAddress -AddressFamily IPv4 | Where-Object {$_.InterfaceAlias -ne "Loopback Pseudo-Interface 1"} | Select-Object -ExpandProperty IPAddress
# hostsファイルのパスを指定する。
$HostsPath = "C:\Windows\System32\drivers\etc\hosts"
# hostsファイルの内容を取得する。
$hostsContent = Get-Content $HostsPath
# 各NICのIPアドレスに対して処理を行う。
foreach ($nicIP in $nicIPs) {
# 既に追加されているかどうかを示すフラグを初期化する。
$isAlreadyAdded = $false
# hostsファイルの各行に対して処理を行う。
foreach ($line in $hostsContent) {
# 現在の行がNICのIPアドレスを含むかどうかを確認する。
if ($line -match [regex]::Escape($nicIP)) {
# IPアドレスが既に追加されている場合、フラグを設定してループを抜ける。
$isAlreadyAdded = $true
break
}
}
# IPアドレスがまだ追加されていない場合、hostsファイルに追加する。
if (!$isAlreadyAdded) {
Add-Content -Path $HostsPath -Value "$nicIP`t`t$(hostname)"
}
}
4. 事後確認
4.1. hosts の内容確認
PS C:\Users\Administrator> Get-Content "C:\Windows\System32\drivers\etc\hosts"
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
XXX.XXX.X.XX XXXXXXXXXX
YYY.YYY.Y.YY XXXXXXXXXX
PS C:\Users\Administrator>
4.2. 名前解決 (逆引き)
foreach ($nicIP in $nicIPs) {
Resolve-DnsName -Type PTR -Name $nicIP
}
Name Type TTL Section NameHost
---- ---- --- ------- --------
XX.X.XXX.XXX.in-addr.arpa. PTR 1200 Question XXXXXXXXXX
YY.Y.YYY.YYY.in-addr.arpa. PTR 1200 Question XXXXXXXXXX
4.3. 名前解決 (正引き)
PS C:\Users\Administrator> Resolve-DnsName -Type A -Name $(hostname)
Name Type TTL Section IPAddress
---- ---- --- ------- ---------
XXXXXXXXXX A 1200 Question XXX.XXX.X.XX
XXXXXXXXXX A 1200 Question YYY.YYY.Y.YY
PS C:\Users\Administrator>