NetMap.vbs
 Запускается при входе пользователя. ActiveDirectory  обязателен.
 Если юзер входит в группу, то ему подключается сетевой диск
 иначе сетевой диск с таким именем отключается(если есть).
 Имена дисков сменяться только после второго входа.


Файл NetMap.vbs
   

'###################################### [BEGIN] ######################################
' Орлов В.И.
' Дата последнего изменения: 25.10.2010
' ICQ: 5279603
'
'  
Option Explicit  
On Error Resume Next  
  
if hour(now) > 21 then
   Wscript.Quit(0) ' ибо не хрен работать после 22 часов - мешает работать обслуживающим службам сети.
end if


   Dim WshShell, objRegistry, RegPath, WshNetwork, objFSO, Msg
   Dim strUserDN, objSysInfo, GroupObj, UserGroups, UserObj 

   Set WshShell            = WScript.CreateObject("WScript.Shell")  
   Set objSysInfo          = CreateObject("ADSystemInfo")   
   strUserDN               = objSysInfo.userName   
   Set UserObj             = GetObject("LDAP://" & strUserDN)   
   Set objRegistry         = GetObject("winmgmts:\\.\root\default:StdRegProv")
   Set WshNetwork          = WScript.CreateObject("WScript.Network")  
   Set objFSO              = CreateObject("Scripting.FileSystemObject") 
   Const HKCU              = &H80000001
   Const V7_REGISTRY_PATH  = "Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2"
   UserGroups              = ""    
 
   For Each GroupObj In UserObj.Groups    
      UserGroups=UserGroups & "[" & GroupObj.Name & "]"    
   Next    
 
if InGroup("dfsprivat") then    
        MapDrv "I:", "\\domen.lan\dfs\private\"  & WshShell.ExpandEnvironmentStrings("%USERNAME%"), "Мой диск" ' У каждого юзера свой личный сетевой диск
else
        MapDrv "I:", "dell", ""
end if   

if InGroup("DFS_IT") then    
        MapDrv "Q:", "\\domen.lan\dfs\ITotdel", "IT_отдел"
else
        MapDrv "Q:", "dell", "\\domen.lan\dfs\ITotdel"  
end if   
if InGroup("DFSwork") then    
        MapDrv "R:", "\\domen.lan\dfs\works", "Работа"
else
        MapDrv "R:", "dell", "\\domen.lan\dfs\works" 
end if   
if InGroup("DFSTemp") then    
        MapDrv "T:", "\\domen.lan\dfs\Temp", "TempDisk"
else
        MapDrv "T:", "dell", "\\domen.lan\dfs\Temp"
end if   
if InGroup("DFSpublic") then    
        MapDrv "J:", "\\domen.lan\dfs\public", "Public"  ' Как правило бардак и хлам ))
else
        MapDrv "J:", "dell", "\\domen.lan\dfs\public" 
end if   


   Set objRegistry   = Nothing
   Set WshShell      = Nothing
   Set objSysInfo    = Nothing
   Set UserObj       = Nothing
   Set WshNetwork    = Nothing
   Set objFSO        = Nothing
   Wscript.Quit(0)

   
'==========================================================================  
' ДАЛЕЕ ФУНКЦИИ
' 
' Function MapDrv(DrvLet, UNCPath, DiskName)  
'  
' DrvLet -  Буква устройства  
' UNCPath - Сетевой путь  
' DiskName - Строковое название диска или сетевой путь шары при удалении
' COMMENT: Подключение сетевых дисков с записью ошибок в EventLog  
'  
'==========================================================================  
Function MapDrv(DrvLet, UNCPath, DiskName)  
   if UNCPath <> "dell" then ' Если не сказано удалить, ПОДКЛЮЧАЕМ
      ' если существует такой диск 
      if objFSO.DriveExists(DrvLet) then
         ' НО с другим путем
         if UNCPath <> CreateObject("Scripting.FileSystemObject").GetDrive(CreateObject("Scripting.FileSystemObject").GetDriveName(DrvLet)).ShareName then
            ' отключаем диск
            WshNetwork.RemoveNetworkDrive DrvLet, true, true 
            ' малость ждем`c
            wscript.sleep 500 
            ' подключаем диск
            WshNetwork.MapNetworkDrive DrvLet, UNCPath
            ' Делее переименовываем сетевой диск
               if DiskName = "" then
                  DiskName = Right(UNCPath, len(UNCPath)-InStrRev(UNCPath, "\"))
               end if
               RegPath = "\" & replace(UNCPath,"\","#") & "\"
               objRegistry.SetStringValue HKCU, V7_REGISTRY_PATH & RegPath, "_LabelFromReg", DiskName 
         end if
      else ' Если диска такого нет
            ' подключаем диск
            WshNetwork.MapNetworkDrive DrvLet, UNCPath
            ' Делее переименовываем сетевой диск
               if DiskName = "" then
                  DiskName = Right(UNCPath, len(UNCPath)-InStrRev(UNCPath, "\"))
               end if
               RegPath = "\" & replace(UNCPath,"\","#") & "\"
               objRegistry.SetStringValue HKCU, V7_REGISTRY_PATH & RegPath, "_LabelFromReg", DiskName 
      end if
   else ' Если сказано УДАЛИТЬ диск
       If objFSO.DriveExists(DrvLet) Then  ' Проверяем есть ли диск с таким именем
          ' Проверяем такой ли путь у диска (а то отключим не тот)
          ' подумал и решил. если путь диска другой то ТЕМ БОЛЕЕ ОТКЛЮЧАЕМ (а то будет доступ к диску которого не надо)
         'if DiskName = CreateObject("Scripting.FileSystemObject").GetDrive(CreateObject("Scripting.FileSystemObject").GetDriveName(DrvLet)).ShareName then
            ' ОТКЛЮЧАЕМ
            WshNetwork.RemoveNetworkDrive DrvLet, true, true 
         'end if
       End If 
   end if
   Select Case Err.Number  
        Case 0            ' No error  
  
         Case -2147024843 ' не найден сетевой путь

        Case Else  
  
            Msg = "Mapping network drive error: " & _   
                   CStr(Err.Number) & " 0x" & Hex(Err.Number) & vbCrLf & _  
                  "Error description: " & Err.Description & vbCrLf  
            Msg = Msg & "Domain: " & WshNetwork.UserDomain & vbCrLf  
            Msg = Msg & "Computer Name: " & WshNetwork.ComputerName & vbCrLf  
            Msg = Msg & "User Name: " & WshNetwork.UserName & " - " & UserObj.CN & vbCrLf & vbCrLf  
            Msg = Msg & "Device name: " & DrvLet & vbCrLf  
            Msg = Msg & "Map path: " & UNCPath   
  
'            WshShell.LogEvent 1, Msg, "\\pc101" ' Этой строкой я засирал свой евент о подключениях сетевых дисков :)
    End Select  
End Function 
 
 
'==========================================================================  
' Function InGroup(strGroup) 
' strGroup - группа, принадлежность к которой проверяем 
' COMMENT: проверка принадлежности пользователя к группе 
'==========================================================================  
Function InGroup(strGroup)    
        InGroup=False    
        If InStr(UserGroups,"[CN=" & strGroup & "]") Then    
                InGroup=True    
        End If    
End Function 

'==========================================================================  
' Function TestDisk(Dname, Dpath) возвращает true если есть такой диск.
' Dname - Имя подключенного сетевого диска например N: или P:  
' Dpath - Путь к подключаемому общему ресурсу этого диска.  например \\server\share
'==========================================================================  
function TestDisk(Dname, Dpath)
   Dim objDrv
   TestDisk = false
   Set objDrv = CreateObject("Scripting.FileSystemObject").Drives
   For Each Drive In objDrv
      if Drive.IsReady then
         if lcase(Drive.Path) = lcase(Dname) and lcase(Drive.ShareName) = lcase(Dpath) then
            TestDisk = true
            Exit for
         end if
      end if
   next
   Set objDrv = Nothing
end function

'###################################### [END] ######################################
   




Оставить запись с благодарностью..
В начало.
Hosted by uCoz