Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Windows NT/2000/2003 (http://forum.oszone.net/forumdisplay.php?f=5)
-   -   Подключение сетевых дисков через .vbs (http://forum.oszone.net/showthread.php?t=71254)

XPurple 13-09-2006 14:55 484413

Подключение сетевых дисков через .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,- для группы компьютеров (не для всех компьютеров), являющихся членами домена.

Fighter 13-09-2006 23:49 484602

подключаете "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


XPurple 14-09-2006 06:16 484650

Вложений: 1
Цитата:

подключаете "W:" а проверку на наличие и удаление "Х:"?
Это описка, ежику понятно. Диск один и тот же, например Т:
Прилепил наспех из примера. Изменил код в первом сообщении, чтобы не смущать народ

Цитата:

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

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

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

Goblin34 14-09-2006 17:50 484949

1. Если Вы подключаете диски из-под учетной записи компьютера, тогда они подключаются, но недоступны компьютеру, отчего может возникнуть такое собщение. Повторно Вы обращаетесь к нему уже с правами пользователя, поэтому они доступны. Хотя, У меня такая фигня (диски с красными крестами на w2kws) бывают, даже если подключение происходит из под пользователя. Правда, не напрягает, поскольку на самом деле они доступны, просто обман зрения.
2. Разные контейнеры для компьютеров- мне нравится. У меня есть принт-серверы, stayaloneсерверы, рабочие станции, специальные группы на два-три компьютера, для каждой свои политики, в основном для управления службами и устройствами. То есть в группе рабочих станций, например, отключено всё (службы, дисководы и т.д.).

Fighter 14-09-2006 21:33 485024

Цитата:

подключаете "W:" а проверку на наличие и удаление "Х:"?
Это описка, ежику понятно. Диск один и тот же, например Т:
это была шутка, ежику понятно =)
по поводу аттача: имхо, все уже сказано..
Цитата:

Есть ли возможность разместить компьютеры домена в разных OU или это бессмыслица ?
групируйте компьютеры треб. группами (хоть в разных ОU, хоть в одном
ваше право, все дело только во вкусе, удобстве и наглядности). А ГП ведь можно распространять и на несколько групп
равно как и к группе применять несколько ГП. не так ли?

XPurple 15-09-2006 06:21 485094

Цитата:

А ГП ведь можно распространять и на несколько групп
Только, к сожалению, один и тот же компьютер, нельзя разместить в разных группах (OU), чтобы на него распространялись несколько политик.
Про несколько политик на 1 группу(OU) я что-то не подумал. Надо будет попробовать.
Цитата:

не так ли?
Так ли :). Времени нет,чтобы сесть, подумать и разложить все по полочкам.

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

Цитата:

1. Если Вы подключаете диски из-под учетной записи компьютера, тогда они подключаются, но недоступны компьютеру, отчего может возникнуть такое собщение. Повторно Вы обращаетесь к нему уже с правами пользователя, поэтому они доступны. Хотя, У меня такая фигня (диски с красными крестами на w2kws) бывают, даже если подключение происходит из под пользователя. Правда, не напрягает, поскольку на самом деле они доступны, просто обман зрения.
По поводу подключения диска без проверки прав пользователя еще как-то можно согласиться. Но почему после загрузки сетевой диск не меняет своего состояния на "подключенный" и не дает с собой ничего делать, если у пользователя есть права на данный ресурс ?
Есть такой сюжет в ералаше, где один ученик объясняет другому, что параллельные прямые не пересекаются. После 2 часов объяснений один из учеников наконец сдается и соглашается, что понял, что параллельные прямые не пересекаются. Но остался невысненным для него еще один вопрос: почему именно они не пересекаются.
Надеюсь, что я не похож на этого въедливого ученика :).

monkkey 15-09-2006 11:27 485191

Цитата:

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

Цитата:

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

XPurple 15-09-2006 11:56 485200

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


Fighter 15-09-2006 20:15 485405

Надеюсь, что я не похож на этого въедливого ученика
фигурально - нет, а что до буквально.. как знать, как знать =)

теперь по сути: имхо, все дело вот в чем, скрипт запускаемый из секции "стартап" отрабатывается
как уже упоминали, с правами системы (успешно отрабатывается)
далее, пользователь обращаясь к данному ресурсу/ярлыку
не обладая привилегиями с которыми производилось подключение
проходит повторную проверку идентификатора на что получает сооттв. системную ошибку 1219.
и.. продолжает работать используя права системы с которыми было создано подключения,
и имеет доступ к ресурсу соотв. проходя проверку со своими и кач-ве бонуса - "отключенный ресурс"
в качестве аргумента:
в сеансе User
net use X:\\server\share /user:Accounts\User&&net use X:\\server\share /user:Accounts\User2

Goblin34 16-09-2006 16:29 485629

XPurple
Насколько я понял, требуется уточнить - что значит "и на пользователей и на компьютеры". Я предполагаю, что Вы это и так знаете, просто не обращали внимания на процедуру логона, вернее включения компьютера, вернее и того и другого.
1. Когда компьютер включается в домен, для него генерируется пароль, и при следующих входах в домен компьютер предъявляет его контроллеру, как и любой доугой участник безопасности, соответственно он тоже входит в домен, аналогично пользователю. Он также имеет определенные права в домене, как и любой другой его участник.
2. В политиках имеется два раздела - политики компьютера и политики пользователя, каждая из которых отрабатывается при входе в домен соответствующего члена домена.
3. Даже если мы в один контейнер поместим и пользователя и компьютер, каждый из них возьмет из политики свою часть. Необходимо четко понимать, что применение политики происходит на целевом компьютере или на целевом компьютере на профиле для конкретного пользователя, входящего в домен и для этого сеанса. То есть, компьютер при логоне щемится в NETLOGON, читает там свою политику и делает как сказано. При входе пользователя он (пользоваетль) также ломится в NETLOOGON и читает-применяет свою политику.
4. Поэтому в политике и есть два раздела, каждый из которых служит разным целям. И если Вы хотите назначить диски пользователям, то назначайте их в разделе, предназначенном пользователям.

XPurple 18-09-2006 06:57 486082

Вложений: 1
Цитата:

Поэтому в политике и есть два раздела, каждый из которых служит разным целям. И если Вы хотите назначить диски пользователям, то назначайте их в разделе, предназначенном пользователям.
Уточняю свой вопрос.
Есть такая операция в оснастке Active Directory Пользователи и компьютеры: Создать пользователя, Группу, Подразделение, Принтер, Компьютер и т.д. Скриншот привел внизу.
Создаем группу (я так понимаю - это группа пользователей и на нее распространяется политика для пользователей). Теперь включаем в эту группу - компьютеры (Эта операция доступна -можете проверить).
Теперь создаем отдельный OU, включаем туда компьютеры и применяем политику к OU. И что мы видим? Собственно то, что и ожидалось. Политика на компьютеры из этой группы (не OU) применяется исходя не из политики OU, а из политики подразделения, к которому относятся компьютеры(если компьютеры относятся к OU Computers, то это Default Domain Policy).

Тогда зачем предусмотрена такая возможность (включение компьютеров в группу), если политика для компьютеров берется из OU, к которому компьютер принадлежит, а не исходя от политики OU, к которому принадлежит вышесозданная группа.

Может я плохо объясняю, но придется уж вам потерпеть.


Время: 22:57.

Время: 22:57.
© OSzone.net 2001-