- PR -

端末のネットワークドライブについて

投稿者投稿内容
fuji
常連さん
会議室デビュー日: 2004/02/04
投稿数: 34
投稿日時: 2006-01-19 17:42
方法がわからず投稿させていただきます。

ネットワークにつながっている端末上で、その端末にどのネットワークドライブがいくつマッピングされているか?ということを探し出す方法をご存知の方いらっしゃいますか?
たびたびネットワークドライブの接続質問がくるのでなんとかしたいと考えています。
ポリシーのログオンスクリプトに、batファイルをかませるのは負荷がかかるのでやめました。
ご存知であれば教えていただきたく思います。
kaz
ぬし
会議室デビュー日: 2003/11/06
投稿数: 5403
投稿日時: 2006-01-19 18:40
こんばんわ.
引用:

fujiさんの書き込み (2006-01-19 17:42) より:

ネットワークにつながっている端末上で、その端末にどのネットワークドライブがいくつマッピングされているか?ということを探し出す方法をご存知の方いらっしゃいますか?


command prompt で net use とやると,
mount している network drive の一覧が表示されます.
逆に computer の管理 ->「システムツール」->「共有フォルダ」を参照すると,
remote から接続している内容を確認できます.

以上,ご参考までに,
fuji
常連さん
会議室デビュー日: 2004/02/04
投稿数: 34
投稿日時: 2006-01-20 10:03
kazさん、返答ありがとうございます。
質問内容が良くなかったです。
例えばサーバー等でshareしているフォルダは、kazさんの方法でわかります。
これと似ていますが、サーバー上でshareしているフォルダは端末でマッピング可能です。しかしユーザーは既に適当にマッピングしています。それをこちらの意図するドライブにするために端末上でどのサーバーのどのドライブがマッピングされているのかを調べたいのです。このようなbatを仕込めばこちらの意図するネットワークドライブを当てられますが・・・・
net use e: /delete
net use f: /delete
net use g: /delete
.
.
.
net use z: /delete
net use i: \\<server-name>\<share>
net use j: \\<server-name>\<share>
これではあまりにも強引なので端末を特定できればと思います。
たびたびですが教えていただきたくお願いします。
kaz
ぬし
会議室デビュー日: 2003/11/06
投稿数: 5403
投稿日時: 2006-01-20 23:25
こんばんわ.
引用:

fujiさんの書き込み (2006-01-20 10:03) より:

net use e: /delete
net use f: /delete
net use g: /delete
.
.
.
net use z: /delete
net use i: \<server-name><share>
net use j: \<server-name><share>


net use /delete
で全部いっぺんに削除できませんでしたっけ?
※うろ覚えですので間違っていたらゴメンナサイ.
引用:

これではあまりにも強引なので端末を特定できればと思います。


端末を特定することは困難だと思います.
なぜならそれは「各端末側の都合」で mount されるので.
つまり各端末側で調べる必要があると思います.

Active Directory を利用されているなら,
logon script で
net use
とやった内容を text に redirect するなどして,
それをさらに server で回収するとか...
もっともそれをやるくらいなら,
「logon script で然るべく mapping するからその内容に即して運用してください」
と規定を作るべきだとは思いますが.

いずれにせよ,logon script を利用して,
logon 時にその端末 local で実行させて,
その結果を server 送り込むくらいのことは可能だと思います.
remote から「何とかする」よりも現実的では?

以上,あくまでもご参考までに.
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2006-01-21 02:45
引用:
例えばサーバー等でshareしているフォルダは、kazさんの方法でわかります。



それは NET SHARE の方では?

引用:
これと似ていますが、サーバー上でshareしているフォルダは端末でマッピング可能です。しかしユーザーは既に適当にマッピングしています。それをこちらの意図するドライブにするために端末上でどのサーバーのどのドライブがマッピングされているのかを調べたいのです。



これはその Client 上で動かさないと無理ですね。
ただ、WMI Script を使用してやれば、Remote からでもその端末の情報を取ってくることは可能です。
# 内部的には、Client 側で実行されて結果を返しているわけですが・・・

具体的には、Win32_LogicalDisk という Class があるのでそいつに対して、
こんな Query を投げてやればいいでしょう。

SELECT DeviceID, ProviderName FROM Win32_LogicalDisk WHERE ProviderName IS NOT NULL

詳細は、Script Center とか WMI に関する Site でお勉強ください。

なお、Client で直接実行するのであれば、WshNetwork.EnumNetworkDrives Method を
利用したほうが楽でしょうね。
minminnana
大ベテラン
会議室デビュー日: 2004/02/05
投稿数: 246
お住まい・勤務地: 盛岡
投稿日時: 2006-01-21 11:46
引用:
具体的には、Win32_LogicalDisk という Class があるのでそいつに対して、
こんな Query を投げてやればいいでしょう。

SELECT DeviceID, ProviderName FROM Win32_LogicalDisk WHERE ProviderName IS NOT NULL



こんにちは

私も同様に考え以下の様なスクリプトを作ってみてたのですが、
ローカルPCに対しては固定ドライブおよびネットワークドライブが取得できました。
しかし、リモートPCに対しては固定ドライブしか取得できません。
何故ですかね・・・。
ちなみに条件をWHERE ProviderName IS NOT NULLにしても結果は同じようでした。

Dim Disks
Dim Disk
Dim Locator
Dim Service
Dim MsgStr

Set Locator = WScript.CreateObject("WbemScripting.SWbemLocator")

'ローカル用
'Set Service = Locator.ConnectServer
'リモート用
Set Service = Locator.ConnectServer("PCName",,"UID","PWD")

'固定ドライブ
'Set Disks = Service.ExecQuery("Select * From Win32_LogicalDisk where DriveType=3")
'ネットワークドライブ
Set Disks = Service.ExecQuery("Select * From Win32_LogicalDisk where DriveType=4")

For Each Disk In Disks
MsgStr = MsgStr + Disk.Name
Next

MsgBox "ドライブは、" + vbCrLf + MsgStr + "です。"
kaz
ぬし
会議室デビュー日: 2003/11/06
投稿数: 5403
投稿日時: 2006-01-21 14:05
こんにちわ.
引用:

ちゃっぴさんの書き込み (2006-01-21 02:45) より:
引用:
例えばサーバー等でshareしているフォルダは、kazさんの方法でわかります。



それは NET SHARE の方では?


そうですね.
引用:

引用:
これと似ていますが、サーバー上でshareしているフォルダは端末でマッピング可能です。しかしユーザーは既に適当にマッピングしています。それをこちらの意図するドライブにするために端末上でどのサーバーのどのドライブがマッピングされているのかを調べたいのです。



これはその Client 上で動かさないと無理ですね。
ただ、WMI Script を使用してやれば、Remote からでもその端末の情報を取ってくることは可能です。
# 内部的には、Client 側で実行されて結果を返しているわけですが・・・


自分もこの手の内容は「client 側で調べるしかない」と思います.
client 管理の為の agent などを利用するとか...

ちょっと思いついたのですが,
logon script って standalone な Windows では使えませんでしたっけ?
もし使えるなら,ちょっと手間ですが logon script を配って
「network drive の確認->text に redirect->server へ情報を収集」
の一連の処理をやらせることができないかと.
※low-tech ですね,なんとも...
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2006-01-22 22:25
引用:
私も同様に考え以下の様なスクリプトを作ってみてたのですが、
ローカルPCに対しては固定ドライブおよびネットワークドライブが取得できました。
しかし、リモートPCに対しては固定ドライブしか取得できません。
何故ですかね・・・。



すみません。こちらでも確認しました。
Bug か仕様かどちらにしても、いただけないですね。

ちなみに NetworkDrive に関する WMI Class Win32_MappedLogicalDisk ですが、
こちらは Remote からでも取得できるようです。

ただし、こちらにも問題があって、Map されている Path の格納されているはずの
ProviderName Property に値が格納されていません。

How Can I Determine Which Drives are Mapped to Network Shares?

なんで、別の手段をとらなければならないようです。
ということで最終手段。

Client 側で Network Drive を列挙する Script を作成して、
Win32_Process.Create Method から Remote 呼び出しを行えばできるでしょう。

ただし、いろいろ注意すべきことがあります。
Win32_Process.Create Method では、実行結果を返してくれません。
なので、実行結果は Text にでも Redirect するように作ってやります。

それから、これも厄介。
Win32_Process.Create Method は非同期呼び出しです。
なので、実行を待機する部分も自作してやらなければなりません。
具体的には、ExecNotificationQuery を利用して __InstanceDeletionEvent を
監視することになりますが、これもいろいろ問題が・・・

終了が監視できれば、あとはその端末の Text を読み取ってやればよいでしょう。
# しかし、面倒ですね。

スキルアップ/キャリアアップ(JOB@IT)