Показать полную графическую версию : Подключение сетевых дисков через .vbs
Есть скрипт для подключения сетевых дисков.
Текст vbs-скрипта:
set fs=Wscript.CreateObject("Scripting.FileSystemObject")
set wn=Wscript.CreateObject("Wscript.Network")
if fs.DriveExists("T:") then wn.RemoveNetworkDrive "T:", true, true
wn.MapNetworkDrive "T:","\\server\share",true
Если запускаю этот скрипт из секции logon, то происходит подключение диска, который пользователь во время сеанса может самостоятельно отключить.
Если запустить этот же скрипт из секции Startup, то происходит подключение диска, который система помечает как отключенный, но тем не менее ресурс остается подключенным.
Понятно, что это разные секции и отвечают за загрузку для пользователей и компьютеров.
Вопрос 1. Если это так и задумано, то кто может объяснить природу такого поведения подключаемых дисков.
Особенно интересует 2 случай (неотключаемый диск).
Вопрос 2. Как распространить скрипт ,запускаемый из секции Startup,- для группы компьютеров (не для всех компьютеров), являющихся членами домена.
подключаете "W:" а проверку на наличие и удаление "Х:"?
впрочем, ваше право =)
а что за "может самостоятельно отключить"? вы имеете ввиду подключенный скриптом диск?
если да, гм.. а не проблемы ли это индейцев?
что до "стартап" и "логон" опять же, первый выполняется как известно с правами системы,
второй - пользователя. ./или я что то пропускаю?
что касается распространения: опять же, гм..
а ГП распространяется на что? на группу (требуемую) компьютеров?
впрочем, опять же ваше..
==========================================================================
'
' VBScript Source File
'
' NAME: MapDrivesInGroup.vbs
'
' COMMENT: Подключение сетевых дисков на основе групп с записью ошибок в EventLog
'
'==========================================================================
Option Explicit
'On Error Resume Next
Dim WshShell, WshNetwork
Dim strUserDN, objSysInfo, GroupObj, UserGroups, UserObj
UserGroups=""
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objSysInfo = CreateObject("ADSystemInfo")
strUserDN = objSysInfo.userName
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 "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)
'
' DrvLet - Буква устройства
' UNCPath - Сетевой путь
'
' COMMENT: Подключение сетевых дисков с записью ошибок в EventLog
'
'==========================================================================
Function MapDrv(DrvLet, UNCPath)
Dim WshNetwork,objFSO ' Object variable
Dim Msg
Set WshNetwork = WScript.CreateObject("WScript.Network")
Set objFSO = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
If objFSO.DriveExists(DrvLet) Then
WshNetwork.RemoveNetworkDrive DrvLet
End If
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
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 & vbCrLf & vbCrLf
Msg = Msg & "Device name: " & DrvLet & vbCrLf
Msg = Msg & "Map path: " & UNCPath
WshShell.LogEvent 1, Msg, "\\SRV"
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 Functio
подключаете "W:" а проверку на наличие и удаление "Х:"?
Это описка, ежику понятно. Диск один и тот же, например Т:
Прилепил наспех из примера. Изменил код в первом сообщении, чтобы не смущать народ
"? вы имеете ввиду подключенный скриптом диск?
если да, гм.. а не проблемы ли это индейцев?
Прицепил для наглядности картинку, что происходит при использовании этого скрипта из секции Startup (для компьютеров)
Смотрите в аттачменте.
Ругательное окно, появляющееся на экране, возникает в результате попытки пользователя отключить диск. Хотя сам диск (внимание!) оказывается благополучно подключенным. При открытии диска Т: он показывает содержимое сетевого диска.
По 2-му вопросу хочу добавить пояснения.
Суть в том, что можно ,конечно, создать OU. Перетащить доменные компьютеры в этот OU.
И назначить политику для компьютеров , входящих в данный OU ,прописав в политике запуск какого-нибудь скрипта.
Хотелось бы иметь возможность размещения компьютеров домена в разных OU (например, для запуска разных скриптов)
Есть ли возможность разместить компьютеры домена в разных OU или это бессмыслица ?
Goblin34
14-09-2006, 17:50
1. Если Вы подключаете диски из-под учетной записи компьютера, тогда они подключаются, но недоступны компьютеру, отчего может возникнуть такое собщение. Повторно Вы обращаетесь к нему уже с правами пользователя, поэтому они доступны. Хотя, У меня такая фигня (диски с красными крестами на w2kws) бывают, даже если подключение происходит из под пользователя. Правда, не напрягает, поскольку на самом деле они доступны, просто обман зрения.
2. Разные контейнеры для компьютеров- мне нравится. У меня есть принт-серверы, stayaloneсерверы, рабочие станции, специальные группы на два-три компьютера, для каждой свои политики, в основном для управления службами и устройствами. То есть в группе рабочих станций, например, отключено всё (службы, дисководы и т.д.).
подключаете "W:" а проверку на наличие и удаление "Х:"?
Это описка, ежику понятно. Диск один и тот же, например Т:
это была шутка, ежику понятно =)
по поводу аттача: имхо, все уже сказано..
Есть ли возможность разместить компьютеры домена в разных OU или это бессмыслица ?
групируйте компьютеры треб. группами (хоть в разных ОU, хоть в одном
ваше право, все дело только во вкусе, удобстве и наглядности). А ГП ведь можно распространять и на несколько групп
равно как и к группе применять несколько ГП. не так ли?
А ГП ведь можно распространять и на несколько групп
Только, к сожалению, один и тот же компьютер, нельзя разместить в разных группах (OU), чтобы на него распространялись несколько политик.
Про несколько политик на 1 группу(OU) я что-то не подумал. Надо будет попробовать.
не так ли?
Так ли :). Времени нет,чтобы сесть, подумать и разложить все по полочкам.
Меня давно мучает вопрос (из серии боялись, но очень хотелось спросить) - для чего предназначена возможность включения в группы пользователей - компьютеров. Смысла то в этом нет. Политики распространяются все равно на уровне пользователей, а не компьютеров ?
Или я что-то упустил?
1. Если Вы подключаете диски из-под учетной записи компьютера, тогда они подключаются, но недоступны компьютеру, отчего может возникнуть такое собщение. Повторно Вы обращаетесь к нему уже с правами пользователя, поэтому они доступны. Хотя, У меня такая фигня (диски с красными крестами на w2kws) бывают, даже если подключение происходит из под пользователя. Правда, не напрягает, поскольку на самом деле они доступны, просто обман зрения.
По поводу подключения диска без проверки прав пользователя еще как-то можно согласиться. Но почему после загрузки сетевой диск не меняет своего состояния на "подключенный" и не дает с собой ничего делать, если у пользователя есть права на данный ресурс ?
Есть такой сюжет в ералаше, где один ученик объясняет другому, что параллельные прямые не пересекаются. После 2 часов объяснений один из учеников наконец сдается и соглашается, что понял, что параллельные прямые не пересекаются. Но остался невысненным для него еще один вопрос: почему именно они не пересекаются.
Надеюсь, что я не похож на этого въедливого ученика :).
для чего предназначена возможность включения в группы пользователей - компьютеров
У политики есть два уровня - для компьютеров и для пользователей...
Политики распространяются все равно на уровне пользователей, а не компьютеров ? И на то, и на другое.
monkkey
Проверим
Немного усовершенствовал код, представленный в первом сообщении. Может, кому-нибудь еще пригодится.
Const CheckGroup = "cn=бухгалтерия"
Const ConnectShare="\\server\share"
Const MapNetDisk="T:"
On error resume next 'На всякий случай :)
Set wshNetwork = CreateObject("WScript.Network")
set fs=CreateObject("Scripting.FileSystemObject")
Set ADSysInfo = CreateObject("ADSystemInfo")
Set CurrentUser = GetObject("LDAP://" & ADSysInfo.UserName)
if isArray(CurrentUser.MemberOf) then
numGroups = UBound(CurrentUser.MemberOf)+1
else
if CurrentUser.MemberOf<>"" then
numGroups=1
end if
end if
select case numGroups
case 0
strGroups = "Нет группы"
case 1
strGroups = LCase(CurrentUser.MemberOf)
case else
strGroups = LCase(Join(CurrentUser.MemberOf))
end select
if InStr(strGroups, CheckGroup) And fs.DriveExists(MapNetDisk) then
wshNetwork.RemoveNetworkDrive MapNetDisk, true, true
end if
If InStr(strGroups, CheckGroup) And fs.FolderExists(ConnectShare) Then
wshNetwork.MapNetworkDrive MapNetDisk,ConnectShare,true
End If
Надеюсь, что я не похож на этого въедливого ученика
фигурально - нет, а что до буквально.. как знать, как знать =)
теперь по сути: имхо, все дело вот в чем, скрипт запускаемый из секции "стартап" отрабатывается
как уже упоминали, с правами системы (успешно отрабатывается)
далее, пользователь обращаясь к данному ресурсу/ярлыку
не обладая привилегиями с которыми производилось подключение
проходит повторную проверку идентификатора на что получает сооттв. системную ошибку 1219.
и.. продолжает работать используя права системы с которыми было создано подключения,
и имеет доступ к ресурсу соотв. проходя проверку со своими и кач-ве бонуса - "отключенный ресурс"
в качестве аргумента:
в сеансе User
net use X:\\server\share /user:Accounts\User&&net use X:\\server\share /user:Accounts\User2
Goblin34
16-09-2006, 16:29
XPurple
Насколько я понял, требуется уточнить - что значит "и на пользователей и на компьютеры". Я предполагаю, что Вы это и так знаете, просто не обращали внимания на процедуру логона, вернее включения компьютера, вернее и того и другого.
1. Когда компьютер включается в домен, для него генерируется пароль, и при следующих входах в домен компьютер предъявляет его контроллеру, как и любой доугой участник безопасности, соответственно он тоже входит в домен, аналогично пользователю. Он также имеет определенные права в домене, как и любой другой его участник.
2. В политиках имеется два раздела - политики компьютера и политики пользователя, каждая из которых отрабатывается при входе в домен соответствующего члена домена.
3. Даже если мы в один контейнер поместим и пользователя и компьютер, каждый из них возьмет из политики свою часть. Необходимо четко понимать, что применение политики происходит на целевом компьютере или на целевом компьютере на профиле для конкретного пользователя, входящего в домен и для этого сеанса. То есть, компьютер при логоне щемится в NETLOGON, читает там свою политику и делает как сказано. При входе пользователя он (пользоваетль) также ломится в NETLOOGON и читает-применяет свою политику.
4. Поэтому в политике и есть два раздела, каждый из которых служит разным целям. И если Вы хотите назначить диски пользователям, то назначайте их в разделе, предназначенном пользователям.
Поэтому в политике и есть два раздела, каждый из которых служит разным целям. И если Вы хотите назначить диски пользователям, то назначайте их в разделе, предназначенном пользователям.
Уточняю свой вопрос.
Есть такая операция в оснастке Active Directory Пользователи и компьютеры: Создать пользователя, Группу, Подразделение, Принтер, Компьютер и т.д. Скриншот привел внизу.
Создаем группу (я так понимаю - это группа пользователей и на нее распространяется политика для пользователей). Теперь включаем в эту группу - компьютеры (Эта операция доступна -можете проверить).
Теперь создаем отдельный OU, включаем туда компьютеры и применяем политику к OU. И что мы видим? Собственно то, что и ожидалось. Политика на компьютеры из этой группы (не OU) применяется исходя не из политики OU, а из политики подразделения, к которому относятся компьютеры(если компьютеры относятся к OU Computers, то это Default Domain Policy).
Тогда зачем предусмотрена такая возможность (включение компьютеров в группу), если политика для компьютеров берется из OU, к которому компьютер принадлежит, а не исходя от политики OU, к которому принадлежит вышесозданная группа.
Может я плохо объясняю, но придется уж вам потерпеть.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.