Как лучше всего сканировать, чтобы найти, какие сопоставления дисков установлены для всех вошедших в систему пользователей на всех рабочих столах в домене? Это будет использоваться, чтобы определить, какие буквы дисков используются в среде.
Это в корпоративной среде в домене Active Directory 2003. В настоящее время я использую рекламу SMS 2003, которая запускает "сетевое использование" и ведет к файлу журнала. Чтобы попасть на каждый рабочий стол, требуется очень много времени. Есть ли способ лучше?
Все эти ответы были очень хорошими подсказками для меня. Спасибо.
Я наткнулся на этот пример 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
Самый быстрый способ - использовать WMI. Если вы разбираетесь в Perl, вы даже можете использовать Win32 модули. Где-то здесь у меня есть сценарий, который предоставит большую часть этой информации.
Возможно, есть способ получше, но то, как вы это делаете сейчас, на самом деле очень хорошее, и хотя он кажется медленным, скорость не должна быть проблемой.
Ваши пользователи не меняют свои сопоставления ежедневно, и даже если это так, вы, вероятно, заботитесь только о тех сопоставлениях, которые являются относительно постоянными.
Запуск рекламы сетевого использования, хотя и занимает некоторое время, необходимо выполнять всего несколько раз в месяц, чтобы быть в курсе сопоставлений дисков.
-Адам
На самом деле я однажды написал программу, которая будет запускаться как часть сценария входа в систему и собирать эту информацию, а затем публиковать ее в базе данных на веб-сайте. Было бы вам интересно заняться этим? Я мог бы стереть старый код и передать его, если хотите.