Vbs отключить все сетевые диски
var $strDomain = "SameDomen"
var $strUser = "SameUser";
set WshShell = CreateObject("WScript.Shell")
Set WshNetwork = WScript.CreateObject("WScript.Network")
Set objSysInfo = CreateObject("ADSystemInfo")
LogonServer=WshShell.ExpandEnvironmentStrings("%LogonServer%")
MsgBox "Logon server: " & LogonServer
Set UserObj = GetObject("LDAP://" & strUserDN)
'Init Groups
Dim UserGroups
Dim GroupObj
UserGroups=""
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")
MapDrv "L:", "\\SRV\Users\" & WshShell.ExpandEnvironmentStrings("%USERNAME%")
MapDrv "R:", "\\SRV\Archive"
MapDrv "W:", "\\SRV\Work"
MapDrv "P:", "\\SRV\SUPPORT$"
Function MapDrv(DrvLet, UNCPath)
Dim WshNetwork ' Object variable
Dim Msg
Set WshNetwork = WScript.CreateObject("WScript.Network")
On Error Resume Next
WshNetwork.RemoveNetworkDrive DrvLet
WshNetwork.MapNetworkDrive DrvLet, UNCPath
Select Case Err.Number
Case 0 ' No error
Case -2147023694
WshNetwork.RemoveNetworkDrive DrvLet
WshNetwork.MapNetworkDrive DrvLet, UNCPath
Case -2147024811
WshNetwork.RemoveNetworkDrive DrvLet
WshNetwork.MapNetworkDrive DrvLet, UNCPath
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 & vbCrLf & vbCrLf
Msg = Msg & "Device name: " & DrvLet & vbCrLf
Msg = Msg & "Map path: " & UNCPath
WshShell.LogEvent 1, Msg, "\\SRV"
End Select
это мощный коммандный процессор, ориентированный именно на логон скрипты
скажем, твоя задачка там решается примерно так
Use K: /DELETE /PERSISTENT
Use J: /DELETE /PERSISTENT
IF @UserID='_alex'
use k: '\\server\alex$'
ENDIF
Option Explicit
'On Error Resume Next
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
'MsgBox "Member of "& UserGroups
if InGroup("Supports Admins") then
MapDrv "Z:", "\\SRV\SUPPORT$"
end if
if InGroup("1C Users") then
MapDrv "W:", "\\SRV\Base"
end if
MapDrv "L:", "\\SRV\Users\" & WshShell.ExpandEnvironmentStrings("%USERNAME%")
Function MapDrv(DrvLet, UNCPath)
Dim WshNetwork ' Object variable
Dim Msg
Set WshNetwork = WScript.CreateObject("WScript.Network")
On Error Resume Next
WshNetwork.RemoveNetworkDrive DrvLet
WshNetwork.MapNetworkDrive DrvLet, UNCPath
Select Case Err.Number
Case 0 ' No error
Case -2147023694
WshNetwork.RemoveNetworkDrive DrvLet
WshNetwork.MapNetworkDrive DrvLet, UNCPath
Case -2147024811
WshNetwork.RemoveNetworkDrive DrvLet
WshNetwork.MapNetworkDrive DrvLet, UNCPath
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 & vbCrLf & vbCrLf
Msg = Msg & "Device name: " & DrvLet & vbCrLf
Msg = Msg & "Map path: " & UNCPath
WshShell.LogEvent 1, Msg, "\\SRV"
End Select
End Function
Тип события: Ошибка
Источник события: WSH
Категория события: Отсутствует
Код события: 1
Дата: 23.12.2005
Время: 11:37:45
Пользователь: Н/Д
Компьютер: Hamet
Описание:
Mapping network drive error: -2147022646 0x800708CA
Error description: Сетевое подключение не существует.
Путь в формате Universal Naming Convention (UNC) однозначно определяет ресурс в сети. Он описывает расположение тома, папки или файла, используя формат\\server\volume\file. Однако большинство пользователей предпочитает применять назначенную системой Windows букву диска вместо пути UNC, так как букву проще запомнить. Вследствие этого сценариям иногда приходится работать с сетевыми дисками и ресурсами. Именно в таких случаях на помощь приходят объекты WshNetwork и FileSystemObject
Объекты WshNetwork и FileSystemObject образуют надежный тандем при работе с сетевыми дисками в сценариях Windows Script Host (WSH). Помимо возможностей, аналогичных классу Win32_MappedLogicalDisk из набора Windows Management Instrumentation (WMI), объект WshNetwork предусматривает методы для создания и удаления дисковых подключений. Объект FileSystemObject располагает методами для получения информации о системных дисках. Как видно из приведенных ниже примеров, с помощью объектов WshNetwork и FileSystemObject вы легко сможете решать различные задачи, связанные с подключением дисков.
Подключена ли общая папка
Функция IsDriveMapped в листинге 1 показывает, как можно использовать объект WshNetwork, чтобы определить, подключена ли общая папка. Вот как работает эта функция. Сначала она использует метод EnumNetworkDrives из объекта WshNetwork для получения списка подключенных сетевых дисков на компьютере в виде коллекции. Эта коллекция содержит по паре элементов для каждого подключенного сетевого диска: локальное имя диска и соответствующий путь UNC. Нумерация элементов коллекции начитается с нуля, следовательно, четные элементы в коллекции являются именами дисков, а нечетные — соответствующими UNC путями. Таким образом, функция обрабатывает в цикле каждый второй элемент в коллекции, сравнивая его с указанной общей папкой. Если соответствие найдено, функция вернет значение true. Иначе возвращается значение Nothing, которое преобразуется в логическое значение false.
Для применения функции IsDriveMapped в сценарии нужно вызвать ее, используя код, аналогичный приведенному ниже:
Находим следующую доступную букву
В большинстве случаев нежелательно, чтобы подключенный ресурс или общая папка получали случайную букву диска. Таким образом, имеет смысл определить следующую свободную букву. Хотя метод EnumNetworkDrives объекта WshNetwork вполне подходит для получения списка подключенных дисков, он не помогает найти свободные буквы диска. Лучше всего использовать коллекцию Drives из объекта FileSystemObject, так как в ней содержится информация и о локальных, и о сетевых дисках в системе.
Функция GetNextDrive в листинге 2 находит следующий свободный диск. Функция начинается с присвоения номеров кодам ASCII, которые представляют собой возможные буквы диска. При таком подходе счетчик цикла функции легко сможет конвертировать коды ASCII в буквы диска, применяя функцию Chr () и добавляя двоеточие. Например, код ASCII со значением 65, который представляет собой заглавную А, будет преобразован в А:.
Функция GetNextDrive преобразует один код ASCII за один раз. Как только происходит преобразование, функция задействует метод DriveExists из объекта FileSystemObject, чтобы определить, существует ли такой диск. Метод DriveExists возвращает значение true, если диск уже существует, и значение false, если не существует. Если диска не существует, то функция возвращает значение, которым будет текущая буква диска.
Чтобы использовать функцию GetNextDrive, необходимо настроить начальные и конечные значения для цикла в строке
так, чтобы они соответствовали диапазону свободных букв дисков в вашей системе. Например, если диски А и В заняты съемными устройствами, а диск С занят первым разделом жесткого диска, следует поменять эту строку на
Можно использовать функцию GetNextDrive в коде, аналогичном приведенному ниже:
Этот код использует функцию GetNextDrive, чтобы найти следующую свободную букву, затем назначает эту букву сетевой папке \\Svr1\Electronic\. Для подключения диска данный код использует метод MapNetworkDrive из объекта WshNetwork, о котором я расскажу чуть позже.
Отключение сетевого диска
Для отключения сетевого диска можно применить метод RemoveNetworkDrive из объекта WshNetwork. Этот метод имеет один обязательный и два дополнительных аргумента.
- Name. Используйте этот обязательный аргумент типа string для указания имени сетевого диска, который хотите отключить. Имя может быть локальным или удаленным, в зависимости от способа подключения диска.
- Force. Задействуйте этот дополнительный аргумент типа boolean, если хотите отключить сетевой диск, даже когда используются файлы. Значения true и false.
- UpdateProfile.Используйте этот дополнительный аргумент типа boolean, если хотите, чтобы диск был удален из профиля данного пользователя. Этот аргумент может применяться, например, в случае, если метод RemoveNetworkDrive используется в сценарии входа в систему.
Например, если вы хотите удалить диск Z, даже в случаях, когда ресурс используется, вам нужно ввести код
Подключение сетевого диска
Можно использовать метод MapNetworkDrive из объекта Wsh
Network, чтобы назначить букву диска общей папке или любой ее дочерней папке. Функция MapNetworkDrive имеет два обязательных и три дополнительных аргумента.
- LocalName. Используйте этот обязательный аргумент типа string, чтобы указать диск, который хотите подключить. Если именем является буква диска, нужно добавить двоеточие (например, G:).
- RemoteName. Используйте этот обязательный аргумент типа string, чтобы указать UNC путь для общей папки (например, \\ServerName\ShareName,\\ServerName\ShareName\FolderName).
- UpdateProfile.Используйте этот дополнительный аргумент типа boolean, когда вам нужно сохранить информацию о подключении в данном профиле пользователя. Значения true и false.
- UserName. Задействуйте этот дополнительный аргумент типа string, когда вам необходимо подключить сетевой диск, используя учетные данные кого-то другого, а не данного пользователя.
- Password.Используйте этот дополнительный аргумент типа string, чтобы указать пароль для идентификации пользователя, заданного аргументом UserName.
В большинстве случаев будет достаточно применять только обязательные аргументы, чтобы подключить диск. Хотя в сценариях администратора, возможно, придется указывать альтернативные учетные данные или учетные данные с более высокими правами для подключения к общей папке, потому что вы не сможете подключить папку в качестве сетевого диска, пока у вас не будет доступа к ней. Когда соединение установлено, предоставленные учетные данные открывают доступ к сетевому диску на время соединения.
При использовании метода MapNetworkDrive важно добавить в сценарий код обработки ошибок, так как есть несколько условий, при которых данный метод не сработает. Обычные причины: недостаточный уровень доступа, попытка использования занятой локальной буквы диска и наличие постоянного подключения (которое восстанавливается после перезагрузки или выхода из системы). Например, сценарий MapNetworkDrive.vbs в листинге 3 обрабатывает два вида ошибок: локальная буква диска уже используется и постоянное соединение существует. Последняя ошибка не фатальна, так как вы все равно можете отключить диск в рамках данной сессии, используя метод RemoveNetworkDrive.
Чтобы подключить диск D к удаленной общей папке \\Svr1\Electronic\, следует применить сценарий:
По умолчанию MapNetworkDrive.vbs не обновляет информацию о подключении в профиле данного пользователя. Если вы хотите обновить профиль данного пользователя, вы можете изменить строку в сноске А на
Незаменимые инструменты
Листинг 1. Функция IsDriveMapped
Листинг 2. Функция GetNextDrive
Листинг 3. Сценарий MapNetworkDrive.vbs
Коллеги, столкнулся со странной ситуацией - не пойму, где копать
Подключаю и отключаю сетевые диски vbs. Столкнулся с проблемой при смене имене в vbs скрипте куда мапить диск, да и вообще с повторным подключением дисков, если этот диск уже был подключен.
Что получилось: при отключении дисков, в моем компьютере остаются "типо" подключенные диски с красными крестиками, которые ссылаются на старое место.
Что делалось:
1. Перепробовал все отсюда: http://support.microsoft.com/kb/308582 - не помогает.
2. Правой кнопкой - отключить - пишет "The network connection could not be found"
3. Сервис - отключить сетевые диски - там этих дисков нет.
4. net use z: \\test\c$ - подключает но путь остается старым (в моем компьютере) (в net use все правильно)
5. net use z: /delete - отключает диск (диск в моем компьютере остается старый и не отключается)
6. net use - эти диски не выводятся
7. в реестре HKCU\Network - этих дисков нет.
8. рестарт службы server ничего не дал
9. в реестре вообще нет этого пути и сервера
10. лечится перезагрузкой компа с отключенными дисками, но мне надо их отключать без перезагрузки.
Если вы что-то не любите, то вы это просто не умеете готовить.
Ответы
VBS если указан как скрипт входа, выполняется с правами администратора. Из за этого сетевые диски подключенные с параметром "/PERSISTENT:NO " (false в vbs) не видятся под пользователем если включен UAC.
Из за UAC диски также и не отключаются если были прописаны с параметром "/PERSISTENT:yes " (true в vbs) так как отключение происходило под пользователем а под админом они оставались.
Лечится 2мя способами
1. сценарий входа запускается из пакетного bat файла
2. Отключается UAC на компьютере.
Всем спасибо за помощь.
Если вы что-то не любите, то вы это просто не умеете готовить.
Все ответы
Попробовал завершить процесс explorer.exe помогло, как без перезапуска этого процесса их отключить?
Если вы что-то не любите, то вы это просто не умеете готовить.
Не уверен, что поможет, но попробуйте подключать диски через "net use" с ключом "/PERSISTENT:NO".
WshNetwork.MapNetworkDrive "Z:", "\\London\Setup", true
true означает - сохранить информацию о подключении в профиле пользователя (сделать подключение постоянным). Кроме того, в качестве необязательных параметров можно передать имя пользователя и пароль для подключения.
диски подключаются скриптом vbs
И отключаются тоже
'Отключаем все прописанные диски
For i = 0 to oDrives.Count - 1 Step 2
'msgbox "Drive " & oDrives.Item(i) & " = " & oDrives.Item(i+1)
objNetwork.RemoveNetworkDrive oDrives.Item(i),1,1
Next
'Совсем убиваем все подключения через net use
Set Wshshell = WScript.CreateObject("WScript.Shell")
WSHShell.run "net use * /delete /y",0
'Настраиваем поиск ключей в реестре
const HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set objReg=GetObject("winmgmts:!\\"&_
strComputer & "\root\default:StdRegProv")
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\"
'Ищем ключи в реестре
objReg.EnumKey HKEY_CURRENT_USER, strKeyPath, arrSubKeys
For Each subkey In arrSubKeys
'Если ключи соответствуют регекспу - удаляем
if ObjRegExp.Test(subkey) then
path = "Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\"&subkey
objReg.DeleteKey HKEY_CURRENT_USER, path
end if
next
Естественно хотелось бы получить что нибудь на vbs или хотя бы куда копать, рестарт процесса explorer.exe не выход.
Коллеги, столкнулся со странной ситуацией - не пойму, где копать
Подключаю и отключаю сетевые диски vbs. Столкнулся с проблемой при смене имене в vbs скрипте куда мапить диск, да и вообще с повторным подключением дисков, если этот диск уже был подключен.
Что получилось: при отключении дисков, в моем компьютере остаются "типо" подключенные диски с красными крестиками, которые ссылаются на старое место.
Что делалось:
1. Перепробовал все отсюда: http://support.microsoft.com/kb/308582 - не помогает.
2. Правой кнопкой - отключить - пишет "The network connection could not be found"
3. Сервис - отключить сетевые диски - там этих дисков нет.
4. net use z: \\test\c$ - подключает но путь остается старым (в моем компьютере) (в net use все правильно)
5. net use z: /delete - отключает диск (диск в моем компьютере остается старый и не отключается)
6. net use - эти диски не выводятся
7. в реестре HKCU\Network - этих дисков нет.
8. рестарт службы server ничего не дал
9. в реестре вообще нет этого пути и сервера
10. лечится перезагрузкой компа с отключенными дисками, но мне надо их отключать без перезагрузки.
Если вы что-то не любите, то вы это просто не умеете готовить.
Ответы
VBS если указан как скрипт входа, выполняется с правами администратора. Из за этого сетевые диски подключенные с параметром "/PERSISTENT:NO " (false в vbs) не видятся под пользователем если включен UAC.
Из за UAC диски также и не отключаются если были прописаны с параметром "/PERSISTENT:yes " (true в vbs) так как отключение происходило под пользователем а под админом они оставались.
Лечится 2мя способами
1. сценарий входа запускается из пакетного bat файла
2. Отключается UAC на компьютере.
Всем спасибо за помощь.
Если вы что-то не любите, то вы это просто не умеете готовить.
Все ответы
Попробовал завершить процесс explorer.exe помогло, как без перезапуска этого процесса их отключить?
Если вы что-то не любите, то вы это просто не умеете готовить.
Не уверен, что поможет, но попробуйте подключать диски через "net use" с ключом "/PERSISTENT:NO".
WshNetwork.MapNetworkDrive "Z:", "\\London\Setup", true
true означает - сохранить информацию о подключении в профиле пользователя (сделать подключение постоянным). Кроме того, в качестве необязательных параметров можно передать имя пользователя и пароль для подключения.
диски подключаются скриптом vbs
И отключаются тоже
'Отключаем все прописанные диски
For i = 0 to oDrives.Count - 1 Step 2
'msgbox "Drive " & oDrives.Item(i) & " = " & oDrives.Item(i+1)
objNetwork.RemoveNetworkDrive oDrives.Item(i),1,1
Next
'Совсем убиваем все подключения через net use
Set Wshshell = WScript.CreateObject("WScript.Shell")
WSHShell.run "net use * /delete /y",0
'Настраиваем поиск ключей в реестре
const HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set objReg=GetObject("winmgmts:!\\"&_
strComputer & "\root\default:StdRegProv")
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\"
'Ищем ключи в реестре
objReg.EnumKey HKEY_CURRENT_USER, strKeyPath, arrSubKeys
For Each subkey In arrSubKeys
'Если ключи соответствуют регекспу - удаляем
if ObjRegExp.Test(subkey) then
path = "Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\"&subkey
objReg.DeleteKey HKEY_CURRENT_USER, path
end if
next
Естественно хотелось бы получить что нибудь на vbs или хотя бы куда копать, рестарт процесса explorer.exe не выход.
Коллеги, столкнулся со странной ситуацией - не пойму, где копать
Подключаю и отключаю сетевые диски vbs. Столкнулся с проблемой при смене имене в vbs скрипте куда мапить диск, да и вообще с повторным подключением дисков, если этот диск уже был подключен.
Что получилось: при отключении дисков, в моем компьютере остаются "типо" подключенные диски с красными крестиками, которые ссылаются на старое место.
Что делалось:
1. Перепробовал все отсюда: http://support.microsoft.com/kb/308582 - не помогает.
2. Правой кнопкой - отключить - пишет "The network connection could not be found"
3. Сервис - отключить сетевые диски - там этих дисков нет.
4. net use z: \\test\c$ - подключает но путь остается старым (в моем компьютере) (в net use все правильно)
5. net use z: /delete - отключает диск (диск в моем компьютере остается старый и не отключается)
6. net use - эти диски не выводятся
7. в реестре HKCU\Network - этих дисков нет.
8. рестарт службы server ничего не дал
9. в реестре вообще нет этого пути и сервера
10. лечится перезагрузкой компа с отключенными дисками, но мне надо их отключать без перезагрузки.
Если вы что-то не любите, то вы это просто не умеете готовить.
Ответы
VBS если указан как скрипт входа, выполняется с правами администратора. Из за этого сетевые диски подключенные с параметром "/PERSISTENT:NO " (false в vbs) не видятся под пользователем если включен UAC.
Из за UAC диски также и не отключаются если были прописаны с параметром "/PERSISTENT:yes " (true в vbs) так как отключение происходило под пользователем а под админом они оставались.
Лечится 2мя способами
1. сценарий входа запускается из пакетного bat файла
2. Отключается UAC на компьютере.
Всем спасибо за помощь.
Если вы что-то не любите, то вы это просто не умеете готовить.
Все ответы
Попробовал завершить процесс explorer.exe помогло, как без перезапуска этого процесса их отключить?
Если вы что-то не любите, то вы это просто не умеете готовить.
Не уверен, что поможет, но попробуйте подключать диски через "net use" с ключом "/PERSISTENT:NO".
WshNetwork.MapNetworkDrive "Z:", "\\London\Setup", true
true означает - сохранить информацию о подключении в профиле пользователя (сделать подключение постоянным). Кроме того, в качестве необязательных параметров можно передать имя пользователя и пароль для подключения.
диски подключаются скриптом vbs
И отключаются тоже
'Отключаем все прописанные диски
For i = 0 to oDrives.Count - 1 Step 2
'msgbox "Drive " & oDrives.Item(i) & " = " & oDrives.Item(i+1)
objNetwork.RemoveNetworkDrive oDrives.Item(i),1,1
Next
'Совсем убиваем все подключения через net use
Set Wshshell = WScript.CreateObject("WScript.Shell")
WSHShell.run "net use * /delete /y",0
'Настраиваем поиск ключей в реестре
const HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set objReg=GetObject("winmgmts:!\\"&_
strComputer & "\root\default:StdRegProv")
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\"
'Ищем ключи в реестре
objReg.EnumKey HKEY_CURRENT_USER, strKeyPath, arrSubKeys
For Each subkey In arrSubKeys
'Если ключи соответствуют регекспу - удаляем
if ObjRegExp.Test(subkey) then
path = "Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\"&subkey
objReg.DeleteKey HKEY_CURRENT_USER, path
end if
next
Естественно хотелось бы получить что нибудь на vbs или хотя бы куда копать, рестарт процесса explorer.exe не выход.
Читайте также: