データの分析、グラフ作成、および通信のためのツールを備えた Microsoft 表計算ソフトウェアのファミリ。
MAC アドレスはハードウェアアドレスなので、対象のネットワーク インターフェースが有効であれば、接続の有無にかかわらず取得可能です。
管理者コマンドプロンプトで
getmac
コマンドを実行してみてください。接続の有無にかかわらず(例えば「メディアが切断されています」)MAC アドレスが取得できるでしょう。
取得できないのは取得のためのロジックに問題があるのだと思います。
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
2020年5月初旬に
パソコンをユニークに識別するために「デバイスID」をVBAで取得できるかについて
質問をし、「Macアドレス」はどうかと回答をいただき、その方法で識別するよう
VBAを作りました。開発・テストしているパソコン(Win10,Excel2019)はWifiと
つなぐだけで、LANケーブルをつないでいません。
Wifiルータの線が抜けていて電源が供給されていない状態、これはたまたまです、
でそのVBAが動いたとき、Macアドレスは取得できませんでした。
ネットワークカードにふられたアドレスだから、
パソコンの電源が入っていたら大丈夫かといいかげんに思っていましたが
Wifiにつながっていないとか、LANケーブルがつながっていなければ
Macアドレスが取得できないということなら、もともとの
「パソコンをユニークに識別するためデバイスID」の代わりにできません。
質問は2つ
(1)Wifiにつながっていないとか、LANケーブルがつながっていなければ
Macアドレスが取得できない のでしょうか? 理由は?
(2)上記①がもしそういうことなら他の手段を教えていただきたい。
「線くらいつないどけよ」という回答はあるかもしれませんが、
これ以外の回答を希望します。
よろしくお願いします。
データの分析、グラフ作成、および通信のためのツールを備えた Microsoft 表計算ソフトウェアのファミリ。
ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。
MAC アドレスはハードウェアアドレスなので、対象のネットワーク インターフェースが有効であれば、接続の有無にかかわらず取得可能です。
管理者コマンドプロンプトで
getmac
コマンドを実行してみてください。接続の有無にかかわらず(例えば「メディアが切断されています」)MAC アドレスが取得できるでしょう。
取得できないのは取得のためのロジックに問題があるのだと思います。
Windows 10の場合ですが、Configuration Managerが使っているデバイス識別子は、[設定]-[システム]-[バージョン情報]で表示されるデバイスIDで、以下のところにあります。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQMClient
MachineId
こんにちは。
VBAに関しては専用のフォーラムが存在するため、下記へご投稿ください。
より有効な回答が得られるかと思います。
返信ありがとうございます。
回答の内容でVBAを作って動かしてみようと思ったものの
うまくいきません。
先頭のDim sql As String = "SELECT * ・・・・は
Constに直せましたが、
2行めは New に (sql)の引数がエラーになり、それをはずしても
どこに持っていくかわかりません。 文法はVBAではなく
C#のものでは?
コメントだけの表面的な感じから、提示していただいたものは、
質問した「Wifiにつながっていないとか、LANケーブルがつながっていなくても」
Macアドレスが取得できるものでないのでは。
「アダプタが有効であるか確認」してそうでなければ「Disabled」と出すという
ことから。
以前に質問してMacアドレスでとなったときに
サンプルのURLを教えてもらい
作って使っているものは、今「半分、役立たず」ですが、
以下の通りです。
Public Function Macアドレスを取得() As String
'WMI を用いて Macアドレスを取得
Dim WMIオブジェクト As Object 'WMIオブジェクト
Dim Adapterオブジェクト As Object 'ネットワークアダプタ
Dim Macアドレス As String
Macアドレス = "" ' 初期値
Set WMIオブジェクト = GetObject("winmgmts:\.\root\cimv2").ExecQuery _
("Select * From Win32_NetworkAdapterConfiguration " & _
"Where IPEnabled = True")
' ネットワークアダプタ参照
For Each Adapterオブジェクト In WMIオブジェクト
'Macアドレス参照(最初に見つけたもので確定)
Macアドレス = Adapterオブジェクト.MacAddress
Exit For
Next
Macアドレスを取得 = Macアドレス
End Function
再度質問を整理します。
(1)今回のTakashi NISHIIEさんの回答からも
Wifiにつながっていないとか、LANケーブルがつながっていなくても
取得はできなさそうですが、そうならその理由、
どんなしくみ?
(2)Macアドレスの代わりに「パソコンをユニークに
識別する情報は?
もともと「デバイスID」を取得できるかという質問に
「Macアドレス」になったのですが。
※識別するためにネットワークに正しく接続していないと
ダメという条件をつけるのかに疑問 ということで。
Macアドレスにこだわるなら、以下の方法があります。
https://devblogs.microsoft.com/scripting/powertip-use-powershell-to-find-mac-address/
要するにWMIクラスのWin32_NetworkAdapterConfigurationオブジェクトから必要な情報を拾ってくればいい。
' WMI からネットワークアダプタ設定のすべてを取得する
Dim sql As String = "SELECT * FROM Win32_NetworkAdapterConfiguration"
Dim s As ManagementObjectSearcher = New ManagementObjectSearcher(sql)
' 実際に取得
Dim objects As ManagementObjectCollection = s.Get()
For Each obj As ManagementObject In objects
' アダプタ名
Console.WriteLine(obj("Caption"))
' アダプタが有効であるか確認
If (DirectCast(obj("IPEnabled"), Boolean)) Then
Console.WriteLine("Enabled") ' 有効
' MACアドレスを取得
Console.WriteLine("MAC アドレス = " + obj("MacAddress"))
' IPアドレスを取得(IPv4 IPv6 ともに取得できる)
For Each ip As String In DirectCast(obj("IPAddress"), String())
Console.WriteLine("IP アドレス = " + ip)
Next
Else
Console.WriteLine("Disabled") ' 無効
End If
Next