質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 7

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

VBScript

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

ネットワーク

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

WSH

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

Q&A

解決済

2回答

6552閲覧

Windows7環境におけるNetworkCategoryの取得方法

Kei-

総合スコア30

Windows 7

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

VBScript

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

ネットワーク

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

WSH

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

0グッド

0クリップ

投稿2015/09/18 15:48

編集2015/09/19 16:46

現在リンクアップしているインターフェースに適用されている
WindowsFirewallのポリシーを取得したいと考えています。

「ワイヤレス ネットワーク 1」に適用されているポリシーを調べるには
そのインターフェースがリンクアップしているネットワークの場所(ネットワーク カテゴリ)
ドメインかプライベートかパブリックかを知る必要があるのですが
コマンドライン等でこれを取得する方法がわかりません。

現在はvbsにて開発していますが、特にこだわってはいません。

行ったこと:

PowerShell3.0が導入されている環境(Windows8など)においては
Get-NetConnectionProfileにより確認が可能ですが
Windows7 の基本構成ではこのコマンドが使用できません。

Win32_NetworkConguration等その手のものでは
インターフェースに設定されている値を参照できるものの
今現在適用されている状況などについての値は乏しく
プロファイルやネットワークカテゴリを含む値を持った項目がありませんでした。

レジストリのインタフェース設定周り(HKLM\System\Service\TCPIP)と
ネットワークプロファイル(HKLM\Software\WindowsNT\NetworkList)の設定も確認したのですが

それぞれ設定情報自体はあるものの
現在そのインターフェースに対してアクティブになっているネットワークプロファイル
を知ることができず紐づけすることができませんでした。

ncpa.cplで開けばGUI上は、そのインタフェースがどのNerworkCategoryに属するか一目でわかります。
しかしこれをコマンドラインで取得しようとすると方法が浮かびません。

何か良い手法ご存じないでしょうか。
妙案ございましたらご教示頂ければ幸いです。何卒お願い申し上げます。

=== 9/20 1:30 追記 ===
最終的にネットワークアダプタとネットワークカテゴリの紐づけは完全にはできませんでした。
しかし、アダプタのGUIDまでは紐づけができ、IPアドレスの取得は実現できました。
WindowsFirewall周りで使うにはIPアドレスがわかれば十分なので、以下のやり方でいこうと思います。

(PowerShellで書き上げるスキルがなく突如C#になりました)

C#

1// 現在有効なリンクアップ対象を取得 2NetworkListManager networkListMgr = new NetworkListManager(); 3IEnumNetworkConnections netWorks = networkListMgr.GetNetworkConnections(); 4 5// リンクアップ1接続ごとに回す 6foreach (INetworkConnection network in netWorks) 7{ 8 // ① 対象アダプターのGUIDを表示 9 Console.WriteLine(network.GetAdapterId()); 10 // 使用しているネットワークプロファイルを取得 11 INetwork Connection = network.GetNetwork(); 12 // ② 使用しているプロファイル名を表示 13 Console.WriteLine(Connection.GetName()); 14 // ③ 適用されているネットワークカテゴリを表示 15 Console.WriteLine(Connection.GetCategory().ToString()); 16 // アダプターのGUIDを元にレジストリからIPアドレスを取得する 17 Microsoft.Win32.RegistryKey regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey( 18 @"SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{" + network.GetAdapterId() +"}", false ); 19 if (regkey != null) 20 { 21 String IPAddress = (String)regkey.GetValue("IPAddress"); 22 if (IPAddress == null) IPAddress = (String)regkey.GetValue("DHCPIPAddress"); 23 // ④ IPアドレスを出力する 24 if (IPAddress != null) Console.WriteLine(IPAddress); 25 } 26}

25d921e3-f2ef-2ae1-3f9f-1234430ac421
HogeHogeWifi
NLM_NETWORK_CATEGORY_PUBLIC
192.168.1.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

こんばんは。

vbsでなく、PowerShellになるのですがWindows 7環境で確認をしましたので投稿をさせて頂きます。
方法については、eripongさんから頂いているリンク先の内容と同じです。

そのままだと うまくいかなかった等があり、少し変えています。

PowerShell

1# NLM_ENUM_NETWORK ennumeration 2$NLM_NETWORK_CONNECTED = 0x01 3$NLM_NETWORK_DISCONNECTED = 0x02 4$NLM_NETWORK_ALL = 0x03 5 6# NLM_NETWORK_CATEGORY enumeration 7$NLM_NETWORK_CATEGORY_PUBLIC = 0x00 8$NLM_NETWORK_CATEGORY_PRIVATE = 0x01 9$NLM_NETWORK_CATEGORY_DOMAIN_AUTHENTICATED = 0x02 10 11 12$networkType = [Type]::GetTypeFromCLSID('DCB00C01-570F-4A9B-8D69-199FDBA5723B') 13$networkListMgr = [Activator]::CreateInstance($networkType) 14 15# リンクアップを対象 16$networkListMgr.GetNetworks($NLM_NETWORK_CONNECTED) | %{ 17 $name = $_.GetName() 18 $description = $_.GetDescription() 19 20 Write-Output "Name : $name" 21 Write-Output "Description : $description" 22 23 switch ($_.GetCategory()) 24 { 25 $NLM_NETWORK_CATEGORY_PUBLIC { Write-Output "Category : PUBLIC`n" } 26 $NLM_NETWORK_CATEGORY_PRIVATE { Write-Output "Category : PRIVATE`n" } 27 $NLM_NETWORK_CATEGORY_DOMAIN_AUTHENTICATED { Write-Output "Category : DOMAIN`n" } 28 default { Write-Output "" } 29 } 30}

少し使いにくいかも知れないのは、接続名?(ネットワークと共有センターで表示される名称)で列挙するため、アダプターの名称ではない事です。

投稿2015/09/19 11:15

sgr-2

総合スコア294

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kei-

2015/09/19 16:25

サンプルソースとデバッグまでして頂きありがとうございます。 INetworkクラスでないとNetworkCateory含まれないので修正が必要ということですね。 たぶん自力では気付けなかったので大変助かりました。 しかし、おっしゃる通り接続名がわからないため当初の どのインターフェースがどのNetworkCategoryかを特定するには至りませんでした。 最終的にはサンプルソースをベースにNetworkConnectionからINetworkを取得するようにしました。
guest

0

ベストアンサー

以下の方法は使えないでしょうか?
c# - WMI for quering active networks and associate connections - Stack Overflow

試してはいないのですが、
INetworkListManaerはWindows Vista以降のようなので、Windows7でも使えるのでは無いでしょうか?

投稿2015/09/19 00:18

eripong

総合スコア1546

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kei-

2015/09/19 16:15

ご回答ありがとうございます。 おっしゃる通りINetworkListManagerで実現ができそうです。 リンク先のサンプルは spr-2さんに補足頂いたように多少手入れが必要でしたが これがまさに求めていたものです。ご教示ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問