понедельник, 10 апреля 2017 г.

Скрипт подключения сетевых дисков

Как-то давно была поставлена задача подключать все общие сетевые ресурсы(сетевые диски) в домене Active Derectory автоматически, а не руками каждый раз при создании новой учетной записи. Написал Vbs скрипт. Скрипт рабочий и используется по сей день.
Скрипт проверяет:  подключены ли соответствующие диски?
Правильно для дисков прописан путь?
Если не подключен - подключает.
Если не правильно подключен - отключает и подключает правильно
Если подключен - оставляет как есть (не отключает диск и не подключает заново).
Все диски (вне зависимости от статуса) переименовываются.


Option Explicit 'все переменные данного модуля должны быть объявлены с помощью операторов DIM или REDIM
Dim objNetwork, objShell, WshShell, usernames
Dim bukva, put, t, Return
Set objNetwork = WScript.CreateObject("WScript.Network")'Создаем объект WshNetwork
Set objShell = WScript.CreateObject("Shell.Application")'Создаем объект ...
Set objNetwork = wscript.CreateObject("wscript.network")
Set WshShell = CreateObject("WScript.Shell")
On Error Resume Next 'продолжать даже при ошибках
t = DiskMap("W", "\\srv1\Work")  'подключаем диски
wscript.sleep 2000 'думаем
objShell.NameSpace("W:").Self.Name = "Work" 'переименовываем диски
UserName = WshShell.ExpandEnvironmentStrings("%USERNAME%") 'Определяем имя пользователя
objShell.NameSpace("W:").Self.Name=UserName 'переименовываем диск-домашнюю папку
Function DiskMap(bukva, put) 'подключаем диски
bukva = bukva&":"
If Not IsShareCorrect(bukva, put) Then 'если диск не правильно подключен или не подключён то
If IsDriveMapped(bukva) Then 'если буква диска используется - отключим его
Return = WshShell.Run("net use "&bukva&" /delete /yes", 0, true)
End If
objNetwork.MapNetworkDrive bukva, put , True ' подключаем диск
End If
End Function
Function IsShareCorrect(strDriveLetter, strShare) 'проверяет, правильно ли подключён диск
    Dim objNetwork
    Dim colDrives
    Dim i
    Set objNetwork = CreateObject("WScript.Network")
    Set colDrives = objNetwork.EnumNetworkDrives
    If colDrives.Count = 0 Then
        IsShareCorrect = False
    Else
        IsShareCorrect = False
        If Len(strShare) = 0 Then
            For i = 0 To (colDrives.Count - 1) Step 2
                If UCase(colDrives.Item(i)) = UCase(strDriveLetter) Then
                    IsShareCorrect = True
                    Exit For
                End If
            Next
        Else
            For i = 0 To (colDrives.Count - 1) Step 2
                If UCase(colDrives.Item(i)) = UCase(strDriveLetter) _
                    And UCase(colDrives.Item(i + 1)) = UCase(strShare) _
                Then
                    IsShareCorrect = True
                    Exit For
                End If
            Next
        End If
    End If
End Function
Function IsDriveMapped(strDriveLetter) 'проверяет, вообще диск подключён?
    IsDriveMapped = IsShareCorrect(strDriveLetter, "")
End Function