Как я могу узнать, какие сетевые диски подключены пользователями?
Каков наилучший способ сканирования, чтобы определить, какие сопоставления дисков установлены для всех зарегистрированных пользователей на всех рабочих столах домена? Это будет использоваться для определения того, какие буквы дисков используются в среде.
Это в корпоративной среде в домене Active Directory 2003. В настоящее время я использую объявление SMS 2003, которое запускает "net use" и передает в файл журнала. Требуется очень много времени, чтобы поразить каждый рабочий стол. Есть ли способ лучше?
4 ответа
Все эти ответы были очень хорошими подсказками, чтобы заставить меня идти. Спасибо.
Я наткнулся на этот пример VBScript, который делает именно то, что я искал и работает хорошо.
Вот фрагмент кода из этого поста:
'Define variables, constants and objects
strComputer="REMOTE MACHINE HERE"
Const HKEY_USERS = &H80000003
Set objWbem = GetObject("winmgmts:")
Set objRegistry = GetObject("winmgmts://" & strComputer & "/root/default:StdRegProv")
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
'Go and get the currently logged on user by checking the owner of the Explorer.exe process.
Set colProc = objWmiService.ExecQuery("Select Name from Win32_Process" & " Where Name='explorer.exe' and SessionID=0")
If colProc.Count > 0 Then
For Each oProcess In colProc
oProcess.GetOwner sUser, sDomain
Next
End If
'Loop through the HKEY_USERS hive until (ignoring the .DEFAULT and _CLASSES trees) until we find the tree that
'corresponds to the currently logged on user.
lngRtn = objRegistry.EnumKey(HKEY_USERS, "", arrRegKeys)
For Each strKey In arrRegKeys
If UCase(strKey) = ".DEFAULT" Or UCase(Right(strKey, 8)) = "_CLASSES" Then
Else
Set objSID = objWbem.Get("Win32_SID.SID='" & strKey & "'")
'If the account name of the current sid we're checking matches the accountname we're looking for Then
'enumerate the Network subtree
If objSID.accountname = sUser Then
regpath2enumerate = strkey & "\Network" 'strkey is the SID
objRegistry.enumkey hkey_users, regpath2enumerate, arrkeynames
'If the array has elements, go and get the drives info from the registry
If Not (IsEmpty(arrkeynames)) Then
For Each subkey In arrkeynames
regpath = strkey & "\Network\" & subkey
regentry = "RemotePath"
objRegistry.getstringvalue hkey_users, regpath, regentry, dapath
wscript.echo subkey & ":" & vbTab & dapath
Next
End If
End If
End If
Next
Может быть, есть и лучший способ, но то, как вы делаете это сейчас, на самом деле очень хорошо, и, хотя это кажется медленным, скорость не должна быть проблемой.
Ваши пользователи не меняют свои сопоставления ежедневно, и даже если это так, вы, вероятно, заботитесь только о тех сопоставлениях, которые являются относительно постоянными.
Запуск рекламы сетевого использования, хотя и занимает некоторое время, необходимо выполнять только несколько раз в месяц, чтобы поддерживать отображение дисков.
-Адам
Я на самом деле написал программу в определенный момент времени, которая будет работать как часть сценария входа в систему и собирать эту информацию, а затем публиковать ее в базе данных с веб-сайтом. Будет ли это то, что вы хотели бы запустить? Я мог бы стереть старый код и передать его, если хотите.