トップ回答者
Windows7のみ、グループ ポリシーのスタートアップ スクリプトで、自身のIPアドレスを取得できない

質問
-
ドメインのログオンスクリプトでPowerShellを実行しています。
実行側のOS情報やコンピューター名、IPアドレスを取得し、SQLServerへデータを反映させています。
約150台のPCを対象にテストしておりますが、スクリプトは正常に処理され目的は達しております。
しかし、OSがWindows7の場合に、IPアドレスが取得できていません。
#Windows7では取得できない。Win8.1, Win10はOK $ipaddr = [Net.Dns]::GetHostAddresses('').IPAddressToString[1] #OSに関係なくIPアドレスを取得できるが、正しくないIPアドレスを取得するクライアントがある $ipaddr = $(ipconfig | where {$_ -match 'IPv4.+\s(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' } | out-null; $Matches[1])
グループポリシーは正常に反映され、IPアドレス以外の情報は取得できています。
どのようなことが原因と考えられますでしょうか。
- 編集済み TwSoft 2017年3月15日 5:23
回答
-
参考までに、得られない場合は何が返されるのでしょうか?
また、[System.Net.Dns]::GetHostAddresses()はメソッド名でも表されているとおり複数形であり、結果は配列として取得されます。配列内のすべての値を確認されていますでしょうか?
- 回答の候補に設定 牟田口大介Moderator 2017年3月15日 11:12
- 回答としてマーク TwSoft 2017年3月21日 1:42
-
佐祐理さんがご指摘の通り、[Net.Dns]::GetHostAddresses('')は配列を返すため、PowerShell2.0環境のWin7では、配列要素のIPAddressToStringプロパティを参照する必要があります。
たとえば、
$ipaddr = ([Net.Dns]::GetHostAddresses('') | ForEach-Object {$_.IPAddressToString})[1]
とすればOKです。
なお、Win8(PowerShell3.0以降)の環境では、配列に対し「.」演算子を適用すると、暗黙的にforeachが実行され、配列要素に対してプロパティ/メソッドを呼び出すことができます。今回、Win7でうまくいかず、Win8.1/10では問題なく実行できた理由です。
(余談ですが、[1]と決め打ちしてしまうと、NICが複数あったり、仮想ネットワークなどがあった場合に、想定と異なるIPアドレスを取得してしまう可能性があるので、適宜フィルタをかけることをお勧めします。とはいえちょっと面倒ですが…)
- 回答の候補に設定 Hebikuzure aka Murachi AkiraMVP 2017年3月17日 5:25
- 回答としてマーク TwSoft 2017年3月21日 1:42
すべての返信
-
参考までに、得られない場合は何が返されるのでしょうか?
また、[System.Net.Dns]::GetHostAddresses()はメソッド名でも表されているとおり複数形であり、結果は配列として取得されます。配列内のすべての値を確認されていますでしょうか?
- 回答の候補に設定 牟田口大介Moderator 2017年3月15日 11:12
- 回答としてマーク TwSoft 2017年3月21日 1:42
-
佐祐理さんがご指摘の通り、[Net.Dns]::GetHostAddresses('')は配列を返すため、PowerShell2.0環境のWin7では、配列要素のIPAddressToStringプロパティを参照する必要があります。
たとえば、
$ipaddr = ([Net.Dns]::GetHostAddresses('') | ForEach-Object {$_.IPAddressToString})[1]
とすればOKです。
なお、Win8(PowerShell3.0以降)の環境では、配列に対し「.」演算子を適用すると、暗黙的にforeachが実行され、配列要素に対してプロパティ/メソッドを呼び出すことができます。今回、Win7でうまくいかず、Win8.1/10では問題なく実行できた理由です。
(余談ですが、[1]と決め打ちしてしまうと、NICが複数あったり、仮想ネットワークなどがあった場合に、想定と異なるIPアドレスを取得してしまう可能性があるので、適宜フィルタをかけることをお勧めします。とはいえちょっと面倒ですが…)
- 回答の候補に設定 Hebikuzure aka Murachi AkiraMVP 2017年3月17日 5:25
- 回答としてマーク TwSoft 2017年3月21日 1:42