Vbs подключить сетевой диск

Обновлено: 06.07.2024

' Задаем имя файлового сервера, при использовании нескольких серверов
' создаем несколько констант и используем их при вызове MapDrv
Const FileSrv1 = "\\TAPIR"
'Const FileSrv2 = "\\DM-DSS-DC"

Set UserObj = GetObject("LDAP://" & strUserDN)

For Each GroupObj In UserObj.Groups
UserGroups=UserGroups & "[" & GroupObj.Name & "]"
Next

'MsgBox "Member of "& UserGroups

if InGroup("Domain Admins") then
MapDrv "I:", FileSrv1 & "\INSTALL$","INSTALL"
end if

if InGroup("DSS_Administration") then
MapDrv "W:", FileSrv1 & "\DSS_Administration$","Администраци я"
end if

if InGroup("DSS_Zeml") then
MapDrv "W:", FileSrv1 & "\DSS_Zeml$","Землеустроители"
end if

if InGroup("DSS_Kap") then
MapDrv "W:", FileSrv1 & "\DSS_Kap$","Кап. строительство"
end if

if InGroup("DSS_Plan") then
MapDrv "W:", FileSrv1 & "\DSS_Plan$","Отдел планирования"
end if

if InGroup("DSS_Service") then
MapDrv "W:", FileSrv1 & "\DSS_Service$","Отдел сервисного обслуживания"
end if

if InGroup("DSS_Tehnadzor") then
MapDrv "W:", FileSrv1 & "\DSS_Tehnadzor$","Служба технадзора"
end if

if InGroup("DSS_Economic") then
MapDrv "W:", FileSrv1 & "\DSS_Economic$","Экономисты"
end if

'======================================= ===================================
'
' Function MapDrv(DrvLet, UNCPath, DrvName)
'
' DrvLet - Буква устройства
' UNCPath - Сетевой путь
' DrvName - Название диска отображаемое в проводнике Windows
'
' COMMENT: Подключение сетевых дисков с записью ошибок в EventLog
'
'======================================= ===================================

Function MapDrv(DrvLet, UNCPath, DrvName)

Dim objFSO, oShell ' Object variable
Dim Msg

Set objFSO = CreateObject("Scripting.FileSystemObject" )
Set oShell = CreateObject("Shell.Application")

On Error Resume Next

If objFSO.DriveExists(DrvLet) Then
WshNetwork.RemoveNetworkDrive DrvLet, true, true
End If

WshNetwork.MapNetworkDrive DrvLet, UNCPath
oShell.NameSpace(DrvLet).Self.Name = DrvName

Select Case Err.Number
Case 0 ' No error

Case -2147023694
WshNetwork.RemoveNetworkDrive DrvLet, true, true
WshNetwork.MapNetworkDrive DrvLet, UNCPath
oShell.NameSpace(DrvLet).Self.Name = DrvName

Case -2147024811
WshNetwork.RemoveNetworkDrive DrvLet, true, true
WshNetwork.MapNetworkDrive DrvLet, UNCPath
oShell.NameSpace(DrvLet).Self.Name = DrvName

WshShell.LogEvent 1, Msg, FileSrv1
End Select
End Function

Function InGroup(strGroup)
InGroup=False
If InStr(UserGroups,"[CN=" & strGroup & "]") Then
InGroup=True
End If
End Function

Есть скрипт для подключения сетевых дисков.
Текст vbs-скрипта:

Если запускаю этот скрипт из секции logon, то происходит подключение диска, который пользователь во время сеанса может самостоятельно отключить.
Если запустить этот же скрипт из секции Startup, то происходит подключение диска, который система помечает как отключенный, но тем не менее ресурс остается подключенным.

Понятно, что это разные секции и отвечают за загрузку для пользователей и компьютеров.

Вопрос 1. Если это так и задумано, то кто может объяснить природу такого поведения подключаемых дисков.
Особенно интересует 2 случай (неотключаемый диск).
Вопрос 2. Как распространить скрипт ,запускаемый из секции Startup,- для группы компьютеров (не для всех компьютеров), являющихся членами домена.

-------
Кто не задает вопросы - тот не получает ответы

подключаете "W:" а проверку на наличие и удаление "Х:"?
впрочем, ваше право
а что за "может самостоятельно отключить"? вы имеете ввиду подключенный скриптом диск?
если да, гм.. а не проблемы ли это индейцев?
что до "стартап" и "логон" опять же, первый выполняется как известно с правами системы,
второй - пользователя. ./или я что то пропускаю?
что касается распространения: опять же, гм..
а ГП распространяется на что? на группу (требуемую) компьютеров?
впрочем, опять же ваше..

Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

"? вы имеете ввиду подключенный скриптом диск?
если да, гм.. а не проблемы ли это индейцев?

Прицепил для наглядности картинку, что происходит при использовании этого скрипта из секции Startup (для компьютеров)
Смотрите в аттачменте.

Ругательное окно, появляющееся на экране, возникает в результате попытки пользователя отключить диск. Хотя сам диск (внимание!) оказывается благополучно подключенным. При открытии диска Т: он показывает содержимое сетевого диска.

По 2-му вопросу хочу добавить пояснения.
Суть в том, что можно ,конечно, создать OU. Перетащить доменные компьютеры в этот OU.
И назначить политику для компьютеров , входящих в данный OU ,прописав в политике запуск какого-нибудь скрипта.
Хотелось бы иметь возможность размещения компьютеров домена в разных OU (например, для запуска разных скриптов)
Есть ли возможность разместить компьютеры домена в разных OU или это бессмыслица ?

var $strDomain = "SameDomen"
var $strUser = "SameUser";

LogonServer=WshShell.ExpandEnvironmentStrings("%LogonServer%")
MsgBox "Logon server: " & LogonServer

Set UserObj = GetObject("LDAP://" & strUserDN)

For Each GroupObj In UserObj.Groups
UserGroups=UserGroups & "[" & GroupObj.Name & "]"
Next

MsgBox "Member of "& UserGroups

if InGroup("CN=Administrators") then
MsgBox "This user - Admin"
end if

Option Explicit
On Error Resume Next

Dim WshShell, WshNetwork

Set WshShell = WScript.CreateObject("WScript.Shell")


Function MapDrv(DrvLet, UNCPath)

On Error Resume Next
WshNetwork.RemoveNetworkDrive DrvLet
WshNetwork.MapNetworkDrive DrvLet, UNCPath

Case -2147023694
WshNetwork.RemoveNetworkDrive DrvLet
WshNetwork.MapNetworkDrive DrvLet, UNCPath

Case -2147024811
WshNetwork.RemoveNetworkDrive DrvLet
WshNetwork.MapNetworkDrive DrvLet, UNCPath

это мощный коммандный процессор, ориентированный именно на логон скрипты
скажем, твоя задачка там решается примерно так

Use K: /DELETE /PERSISTENT
Use J: /DELETE /PERSISTENT

Dim WshShell, WshNetwork
Dim strUserDN, objSysInfo, GroupObj, UserGroups, UserObj


Set WshShell = WScript.CreateObject("WScript.Shell")
Set objSysInfo = CreateObject("ADSystemInfo")

Set UserObj = GetObject("LDAP://" & strUserDN)

For Each GroupObj In UserObj.Groups
UserGroups=UserGroups & "[" & GroupObj.Name & "]"
Next


Function MapDrv(DrvLet, UNCPath)

On Error Resume Next
WshNetwork.RemoveNetworkDrive DrvLet
WshNetwork.MapNetworkDrive DrvLet, UNCPath

Case -2147023694
WshNetwork.RemoveNetworkDrive DrvLet
WshNetwork.MapNetworkDrive DrvLet, UNCPath

Case -2147024811
WshNetwork.RemoveNetworkDrive DrvLet
WshNetwork.MapNetworkDrive DrvLet, UNCPath

Тип события: Ошибка
Источник события: WSH
Категория события: Отсутствует
Код события: 1
Дата: 23.12.2005
Время: 11:37:45
Пользователь: Н/Д
Компьютер: Hamet
Описание:
Mapping network drive error: -2147022646 0x800708CA
Error description: Сетевое подключение не существует.

Основные возможности работы с сетью можно реализовать при помощи встроенной утилиты NET и утилит, поставляемых в составе Resource Kit и Support Tools . Большинство возможностей WSH реализовано при помощи объекта WScript . Network . Создание этого объекта можно произвести так:

У созданного объекта - всего три свойства и восемь методов, но они могут оказаться очень полезными.

Свойства ComputerName , UserDomain и UserName возвращают, соответственно, имя компьютера, имя домена и имя текущего пользователя. Очень удобно:

  • для протоколирования выполнения скрипта - записывается информация о том, на каком компьютере произошло то или иное событие;
  • для выполнения каких-либо действий только на том компьютере или только с тем пользователем, который указан в нашем списке (при помощи утилит Resource Kit можно основываться и на членстве пользователей в группах).

Кроме того, можно просто отображать полученную информацию - например, на Web -странице, которая используется в качестве обоев для пользователя.

  • UserDomain показывает только имя домена в формате имени NetBIOS . Имена в формате Active Directory не выводятся. Если компьютер работает не в домене, а в рабочей группе, выводится пустая строка;
  • свойство UserName часто некорректно работает при применении в сценариях регистрации под Windows 95/98/ ME : при выполнении сценария значение свойства UserName оказывается пустым (операционная система еще не поняла, под каким именем вошел пользователь). Лечится так:

Do While sUser = ""

WScript.Sleep(500)

Метод EnumNetworkDrives используется для получения коллекции сетевых дисков на компьютере , MapNetworkDrive - подключение сетевых дисков , RemoveNetworkDrive - удаление сетевого диска . Возможностей гораздо больше, чем у команды NET - в частности, средствами WSH можно проверить наличие уже имеющихся сетевых ресурсов, реализовать обработку ошибок и т.п.

Реализация обработки ошибок при подключении к сетевому ресурсу - обязательна. Обычно при помощи специальной функции:

Sub ErrCheck ( nr )

Select Case nr

Case 0

' Все в порядке

Case -2147024829

WScript . Echo "Сетевой ресурс не существует"

Case -2147024811

WScript . Echo "Диск уже подключен"

WScript.Echo "Другая ошибка" & CStr(nr)

End Select

End Sub

Далее подключение выглядит так:

On Error Resume Next

WshNetwork.MapNetworkDrive "Z:", "\\London\Setup", true

ErrCheck Err . Number

true означает - сохранить информацию о подключении в профиле пользователя (сделать подключение постоянным). Кроме того, в качестве необязательных параметров можно передать имя пользователя и пароль для подключения.

Конечно, в функцию ErrCheck , помимо Echo , можно включить и другую обработку ошибок. В некоторых ситуациях для исключения ошибок можно сделать так:

On Error Resume Next

WSHNetwork.RemoveNetworkDrive "Z:"

WshNetwork.MapNetworkDrive "Z:", "\\London\Setup", true

Теперь о том, что нельзя сделать при помощи утилиты NET : как подключить сетевой принтер. Работа с принтерами - при помощи методов AddPrinterConnection, AddWindowsPrinterConnection, EnumPrinterConnections, RemovePrinterConnections, SetDefaultPrinter.

Конечно, и в этом случае лучше реализовать обработку ошибок. Выглядеть она может так:

On Error Resume Next

WshNetwork.AddPrinterConnection "LPT1", \\London\HP5LJ

On Error GoTo 0 'Отключить обработку ошибок On Error Resume Next

  • метод AddPrinterConnection позволяет подключать принтеры только к какому-либо порту, AddWindowsPrinter - необязательно к порту;
  • при работе скрипта под Windows 95/98 драйвер принтера должен быть уже установлен - иначе возникнет ошибка

После установки принтера можно назначить его принтером по умолчанию:

WshNetwork . SetDefaultPrinter "\\ London \ HP 5 LJ "

WshShell.LogEvent 1, Msg, "\\SRV"
End Select

и вот так примерно должен выглядеть результат: скрипт мапит по группе диски и меняет старые пути к дискам на новые:

Dim WshShell, WshNetwork
Dim strUserDN, objSysInfo, GroupObj, UserGroups, UserObj

Set WshShell = WScript.CreateObject("WScript.Shell")
Set objSysInfo = CreateObject("ADSystemInfo")

Set UserObj = GetObject("LDAP://" & strUserDN)

For Each GroupObj In UserObj.Groups
UserGroups=UserGroups & "[" & GroupObj.Name & "]"
Next

if InGroup("Supports Admins") then
MapDrv "Z:", "\\SRV\SUPPORT$"
end if

Function MapDrv(DrvLet, UNCPath)

On Error Resume Next
WshNetwork.RemoveNetworkDrive DrvLet
WshNetwork.MapNetworkDrive DrvLet, UNCPath

Case -2147023694
WshNetwork.RemoveNetworkDrive DrvLet
WshNetwork.MapNetworkDrive DrvLet, UNCPath

Case -2147024811
WshNetwork.RemoveNetworkDrive DrvLet
WshNetwork.MapNetworkDrive DrvLet, UNCPath

WshShell.LogEvent 1, Msg, "\\SRV"
End Select
End Function

mapDrivesInGroup.vbs v1.1 с возможностью именования дисков

Dim WshShell, WshNetwork
Dim strUserDN, objSysInfo, GroupObj, UserGroups, UserObj

Set UserObj = GetObject("LDAP://" & strUserDN)

For Each GroupObj In UserObj.Groups
UserGroups=UserGroups & "[" & GroupObj.Name & "]"
Next

if InGroup("Domain Admins") then
MapDrv "P:", FileSrv1 & "\SUPPORT$","Tools & Apps"
end if

Function MapDrv(DrvLet, UNCPath, DrvName)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set oShell = CreateObject("Shell.Application")

On Error Resume Next

If objFSO.DriveExists(DrvLet) Then
WshNetwork.RemoveNetworkDrive DrvLet, true, true
End If

WshNetwork.MapNetworkDrive DrvLet, UNCPath
oShell.NameSpace(DrvLet).Self.Name = DrvName

Case -2147023694
WshNetwork.RemoveNetworkDrive DrvLet, true, true
WshNetwork.MapNetworkDrive DrvLet, UNCPath
oShell.NameSpace(DrvLet).Self.Name = DrvName

Case -2147024811
WshNetwork.RemoveNetworkDrive DrvLet, true, true
WshNetwork.MapNetworkDrive DrvLet, UNCPath
oShell.NameSpace(DrvLet).Self.Name = DrvName

WshShell.LogEvent 1, Msg, FileSrv1
End Select
End Function

Function InGroup(strGroup)
InGroup=False
If InStr(UserGroups,"[CN=" & strGroup & "]") Then
InGroup=True
End If
End Function

подключение сетевых дисков не только по группе но и по пользователю

Мапит диски, принтеры, вносит изменения в регистр .

Dim WshShell, WshNetwork
Dim strUserDN, objSysInfo, GroupObj, UserGroups, UserObj, Printers

Читайте также: