質問編集履歴

3 書式の改善

Kei-

Kei- score 30

2015/09/20 01:46  投稿

Windows7環境におけるNetworkCategoryの取得方法
現在リンクアップしているインターフェースに適用されている
WindowsFirewallのポリシーを取得したいと考えています。
「ワイヤレス ネットワーク 1」に適用されているポリシーを調べるには
そのインターフェースがリンクアップしているネットワークの場所(ネットワーク カテゴリ)
ドメインかプライベートかパブリックかを知る必要があるのですが
コマンドライン等でこれを取得する方法がわかりません。
現在はvbsにて開発していますが、特にこれにこだわってはいません。
現在はvbsにて開発していますが、特にこだわってはいません。
行ったこと:
PowerShell3.0が導入されている環境(Windows8など)においては
Get-NetConnectionProfileにより確認が可能ですが
Windows7 の基本構成ではこのコマンドが使用できません。
Win32_NetworkConguration等その手のものでは
インターフェースに設定されている値を参照できるものの
今現在適用されている状況などについての値は乏しく
プロファイルやネットワークカテゴリを含む値を持った項目がありませんでした。
レジストリのインタフェース設定周り(HKLMSystemServiceTCPIP)と
ネットワークプロファイル(HKLMSoftwareWindowsNTNetworkList)の設定も確認したのですが
それぞれ設定情報自体はあるものの
現在そのインターフェースに対してアクティブになっているネットワークプロファイル
を知ることができず紐づけすることができませんでした。
ncpa.cplで開けばGUI上は、そのインタフェースがどのNerworkCategoryに属するか一目でわかります。
しかしこれをコマンドラインで取得しようとすると方法が浮かびません。
何か良い手法ご存じないでしょうか。
妙案ございましたらご教示頂ければ幸いです。何卒お願い申し上げます。
=== 9/20 1:30 追記 ===
最終的にネットワークアダプタとネットワークカテゴリの紐づけは完全にはできませんでした。
しかし、アダプタのGUIDまでは紐づけができ、IPアドレスの取得は実現できました。
WindowsFirewall周りで使うにはIPアドレスがわかれば十分なので、この以下のやり方でいこうと思います。
WindowsFirewall周りで使うにはIPアドレスがわかれば十分なので、以下のやり方でいこうと思います。
(PowerShellで書き上げるスキルがなく突如C#になりました)
```C#
// 現在有効なリンクアップ対象を取得
NetworkListManager networkListMgr = new NetworkListManager();
IEnumNetworkConnections netWorks = networkListMgr.GetNetworkConnections();
// リンクアップ1接続ごとに回す
foreach (INetworkConnection network in netWorks)
{
   // ① 対象アダプターのGUIDを表示
   Console.WriteLine(network.GetAdapterId());
 
   // 使用しているネットワークプロファイルを取得
   INetwork Connection = network.GetNetwork();
 
   // ② 使用しているプロファイル名を表示
   Console.WriteLine(Connection.GetName());
 
   // ③ 適用されているネットワークカテゴリを表示
   Console.WriteLine(Connection.GetCategory().ToString());
 
   // アダプターのGUIDを元にレジストリからIPアドレスを取得する
   Microsoft.Win32.RegistryKey regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(
           @"SYSTEMCurrentControlSetServicesTcpipParametersInterfaces{" + network.GetAdapterId() +"}", false );
 
   if (regkey != null)
   {
       String IPAddress = (String)regkey.GetValue("IPAddress");
       if (IPAddress == null) IPAddress = (String)regkey.GetValue("DHCPIPAddress");
         
       // ④ IPアドレスを出力する
       if (IPAddress != null) Console.WriteLine(IPAddress);
   }
}
```
25d921e3-f2ef-2ae1-3f9f-1234430ac421
HogeHogeWifi
NLM_NETWORK_CATEGORY_PUBLIC
192.168.1.1
  • Windows 7

    496 questions

    Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

  • VBScript

    475 questions

    VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

  • ネットワーク

    1237 questions

    ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

  • WSH

    54 questions

    WSH(Windows Script Host)とは、Windows上でテキストファイルに記述したJavaScriptやVBScriptなどのスクリプトを実行するホスト環境のことです。COMを通じたレジストリ操作やWMIへのアクセスが可能で、複雑な処理も行うことができます。

2 書式の改善

Kei-

Kei- score 30

2015/09/20 01:44  投稿

Windows7環境におけるNetworkCategoryの取得方法
現在リンクアップしているインターフェースに適用されている
WindowsFirewallのポリシーを取得したいと考えています。
「ワイヤレス ネットワーク 1」に適用されているポリシーを調べるには
そのインターフェースがリンクアップしているネットワークの場所(ネットワーク カテゴリ)
ドメインかプライベートかパブリックかを知る必要があるのですが
コマンドライン等でこれを取得する方法がわかりません。
現在はvbsにて開発していますが、特にこれにこだわってはいません。
行ったこと:
PowerShell3.0が導入されている環境(Windows8など)においては
Get-NetConnectionProfileにより確認が可能ですが
Windows7 の基本構成ではこのコマンドが使用できません。
Win32_NetworkConguration等その手のものでは
インターフェースに設定されている値を参照できるものの
今現在適用されている状況などについての値は乏しく
プロファイルやネットワークカテゴリを含む値を持った項目がありませんでした。
レジストリのインタフェース設定周り(HKLMSystemServiceTCPIP)と
ネットワークプロファイル(HKLMSoftwareWindowsNTNetworkList)の設定も確認したのですが
それぞれ設定情報自体はあるものの
現在そのインターフェースに対してアクティブになっているネットワークプロファイル
を知ることができず紐づけすることができませんでした。
ncpa.cplで開けばGUI上は、そのインタフェースがどのNerworkCategoryに属するか一目でわかります。
しかしこれをコマンドラインで取得しようとすると方法が浮かびません。
何か良い手法ご存じないでしょうか。
妙案ございましたらご教示頂ければ幸いです。何卒お願い申し上げます。
=== 9/20 1:30 追記 ===
最終的にネットワークアダプタとネットワークカテゴリの紐づけは完全にはできませんでした。
しかし、アダプタのGUIDまでは紐づけができ、IPアドレスの取得は実現できました。
WindowsFirewall周りで使うにはIPアドレスがわかれば十分なので、この以下のやり方でいこうと思います。
(PowerShellで書き上げるスキルがなく突如C#になりました)
-------------------------------------------------------------------------
```C#
// 現在有効なリンクアップ対象を取得
NetworkListManager networkListMgr = new NetworkListManager();
IEnumNetworkConnections netWorks = networkListMgr.GetNetworkConnections();
// リンクアップ1接続ごとに回す
foreach (INetworkConnection network in netWorks)
{
   // 対象アダプターのGUIDを取得
   // ① 対象アダプターのGUIDを表示
   Console.WriteLine(network.GetAdapterId());
   // 使用しているネットワークプロファイルを取得
   INetwork Connection = network.GetNetwork();
   // ネットワークプロファイルで指定されているプロファイル名
   // ② 使用しているプロファイル名を表示
   Console.WriteLine(Connection.GetName());
   // ネットワークプロファイルで指定されているカテゴリ情報
   // ③ 適用されているネットワークカテゴリを表示
   Console.WriteLine(Connection.GetCategory().ToString());
   // アダプターのGUIDを元にレジストリからIPアドレスを取得する
   Microsoft.Win32.RegistryKey regkey =
       Microsoft.Win32.Registry.LocalMachine.OpenSubKey(
           @"SYSTEMCurrentControlSetServicesTcpipParametersInterfaces{" + network.GetAdapterId() +"}",
           false
       );
   Microsoft.Win32.RegistryKey regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(
           @"SYSTEMCurrentControlSetServicesTcpipParametersInterfaces{" + network.GetAdapterId() +"}", false );
   if (regkey != null)
   {
       String IPAddress = (String)regkey.GetValue("IPAddress");
       if (IPAddress == null) IPAddress = (String)regkey.GetValue("DHCPIPAddress");  
       
       if (IPAddress == null)
              IPAddress = (String)regkey.GetValue("DHCPIPAddress");
       // ④ IPアドレスを出力する
       if (IPAddress != null) Console.WriteLine(IPAddress);
   }
}
------------------------------------------------------------------------------------------
```
25d921e3-f2ef-2ae1-3f9f-1234430ac421
HogeHogeWifi
NLM_NETWORK_CATEGORY_PUBLIC
192.168.1.1
  • Windows 7

    496 questions

    Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

  • VBScript

    475 questions

    VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

  • ネットワーク

    1237 questions

    ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

  • WSH

    54 questions

    WSH(Windows Script Host)とは、Windows上でテキストファイルに記述したJavaScriptやVBScriptなどのスクリプトを実行するホスト環境のことです。COMを通じたレジストリ操作やWMIへのアクセスが可能で、複雑な処理も行うことができます。

1 最終版のコードを追記

Kei-

Kei- score 30

2015/09/20 01:34  投稿

Windows7環境におけるNetworkCategoryの取得方法
現在リンクアップしているインターフェースに適用されている
WindowsFirewallのポリシーを取得したいと考えています。
「ワイヤレス ネットワーク 1」に適用されているポリシーを調べるには
そのインターフェースがリンクアップしているネットワークの場所(ネットワーク カテゴリ)
ドメインかプライベートかパブリックかを知る必要があるのですが
コマンドライン等でこれを取得する方法がわかりません。
現在はvbsにて開発していますが、特にこれにこだわってはいません。
行ったこと:
PowerShell3.0が導入されている環境(Windows8など)においては
Get-NetConnectionProfileにより確認が可能ですが
Windows7 の基本構成ではこのコマンドが使用できません。
Win32_NetworkConguration等その手のものでは
インターフェースに設定されている値を参照できるものの
今現在適用されている状況などについての値は乏しく
プロファイルやネットワークカテゴリを含む値を持った項目がありませんでした。
レジストリのインタフェース設定周り(HKLMSystemServiceTCPIP)と
ネットワークプロファイル(HKLMSoftwareWindowsNTNetworkList)の設定も確認したのですが
それぞれ設定情報自体はあるものの
現在そのインターフェースに対してアクティブになっているネットワークプロファイル
を知ることができず紐づけすることができませんでした。
ncpa.cplで開けばGUI上は、そのインタフェースがどのNerworkCategoryに属するか一目でわかります。
しかしこれをコマンドラインで取得しようとすると方法が浮かびません。
何か良い手法ご存じないでしょうか。
妙案ございましたらご教示頂ければ幸いです。何卒お願い申し上げます。
妙案ございましたらご教示頂ければ幸いです。何卒お願い申し上げます。
=== 9/20 1:30 追記 ===
最終的にネットワークアダプタとネットワークカテゴリの紐づけは完全にはできませんでした。
しかし、アダプタのGUIDまでは紐づけができ、IPアドレスの取得は実現できました。
WindowsFirewall周りで使うにはIPアドレスがわかれば十分なので、この以下のやり方でいこうと思います。
(PowerShellで書き上げるスキルがなく突如C#になりました)
-------------------------------------------------------------------------
// 現在有効なリンクアップ対象を取得
NetworkListManager networkListMgr = new NetworkListManager();
IEnumNetworkConnections netWorks = networkListMgr.GetNetworkConnections();
// リンクアップ1接続ごとに回す
foreach (INetworkConnection network in netWorks)
{
   // 対象アダプターのGUIDを取得
   Console.WriteLine(network.GetAdapterId());
   // 使用しているネットワークプロファイルを取得
   INetwork Connection = network.GetNetwork();
   // ネットワークプロファイルで指定されているプロファイル名
   Console.WriteLine(Connection.GetName());
   // ネットワークプロファイルで指定されているカテゴリ情報
   Console.WriteLine(Connection.GetCategory().ToString());
   // アダプターのGUIDを元にレジストリからIPアドレスを取得する
   Microsoft.Win32.RegistryKey regkey =
       Microsoft.Win32.Registry.LocalMachine.OpenSubKey(
           @"SYSTEMCurrentControlSetServicesTcpipParametersInterfaces{" + network.GetAdapterId() +"}",
           false
       );
   if (regkey != null)
   {
       String IPAddress = (String)regkey.GetValue("IPAddress");
       
       if (IPAddress == null)
              IPAddress = (String)regkey.GetValue("DHCPIPAddress");
       if (IPAddress != null) Console.WriteLine(IPAddress);
   }
}
------------------------------------------------------------------------------------------
25d921e3-f2ef-2ae1-3f9f-1234430ac421
HogeHogeWifi
NLM_NETWORK_CATEGORY_PUBLIC
192.168.1.1
  • Windows 7

    496 questions

    Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

  • VBScript

    475 questions

    VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

  • ネットワーク

    1237 questions

    ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

  • WSH

    54 questions

    WSH(Windows Script Host)とは、Windows上でテキストファイルに記述したJavaScriptやVBScriptなどのスクリプトを実行するホスト環境のことです。COMを通じたレジストリ操作やWMIへのアクセスが可能で、複雑な処理も行うことができます。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る