![]() |
Подключение сетевых ресурсов политикой Organizational Unit
Здравствуйте, Господа.
К сожалению я перерыл половину известных мне поисков и не нашел пошагового руководства по автоматизации подключения сетевых ресурсов. Проблема такая. Есть несколько корневых котологов в DFS. Содержимое каждого соответствует требованиям отделов. Есть Organizational Unit. На кажды отдел свой. Необходимо организовать подключение сетевого каталога в качестве диска с помощью скрипта netlogon и групповой политики. Соответственно в случае если пользователя перенести из одного Organizational Unit в другой то старый диск должен отключиться а на его место подключиться тот который соответствует данному Organizational Unit. На сайте к сожалению не нашел этой информации. Если найдеться тот который знает адрес ссылки где решается моя задача, то я с радостью приму в качестве помощи линк. С уважением, Ламер. |
echo Y|net time /set
net time /setsntp:srv1 net use O: /delete /yes net use W: /delete /yes net use K: /delete /yes net use G: /delete /yes net use y: /delete /yes net use t: /delete /yes net use i: /delete /yes net use n: /delete /yes net use x: /delete /yes net use m: /delete /yes \\srv1\netlogon\sleep.exe 2 net use O: \\srv1\departments\200-Administrative \\srv1\netlogon\sleep.exe 2 net use w: \\srv1\workgroup \\srv1\netlogon\sleep.exe 2 net use k: \\srv05\consultant$ \\srv1\netlogon\sleep.exe 2 net use g: \\srv05\garant.srv$ \\srv1\netlogon\sleep.exe 2 net use p: \\10.0.1.10\personal\%username% \\srv1\netlogon\sleep.exe 2 net use y: \\srv1\yours\%username% \\srv1\netlogon\sleep.exe 2 net use t: \\srv1\temporary \\srv1\netlogon\sleep.exe 2 net use i: \\srv1\information \\srv1\netlogon\sleep.exe 2 net use n: \\srv05\garantclient$ \\srv1\netlogon\sleep.exe 2 net use x: \\srv04\Database \\srv1\netlogon\sleep.exe 2 net use m: \\srv06\F1_TurboClient$ \\srv1\netlogon\sleep.exe 4 |
Один из товарищей мне рекомендовал использовать две функции
'========================================================Sub MapDrive(strDrive,strShare) WshShell.Run "NET USE " + strDrive + " " + strShare + " /PERSISTENT:YES", 0, true End Sub '========================================================Sub MapPrinter(strName,bDefault) WSHNetwork.AddWindowsPrinterConnection strName if bDefault then WSHNetwork.SetDefaultPrinter strName end if End Sub Я к сожалению VBA не знаю поэтому затрудняюсь понять что это :) Вопрос что такое sleep.exe 2 это дополнительная програмка которая у меня должна находиться в каталоге Netlogon? |
угу туда можешь в конец этого скиптра вставить строчку
Цитата:
и там же твой скрипт sDrive="K:\" Set oShell = CreateObject("shell.Application") oShell.NameSpace(sDrive).Self.name = "Consultant" sDrive="G:\" Set oShell = CreateObject("shell.Application") oShell.NameSpace(sDrive).Self.name = "Garant" sDrive="N:\" Set oShell = CreateObject("shell.Application") oShell.NameSpace(sDrive).Self.name = "GarantF1" sDrive="T:\" Set oShell = CreateObject("shell.Application") oShell.NameSpace(sDrive).Self.name = "Temporary" sDrive="I:\" Set oShell = CreateObject("shell.Application") oShell.NameSpace(sDrive).Self.name = "Information" sDrive="w:\" Set oShell = CreateObject("shell.Application") oShell.NameSpace(sDrive).Self.name = "Workgroup" sDrive="P:\" Set oShell = CreateObject("shell.Application") oShell.NameSpace(sDrive).Self.name = "Personal" sDrive="Y:\" Set oShell = CreateObject("shell.Application") oShell.NameSpace(sDrive).Self.name = "Yours" sDrive="O:\" Set oShell = CreateObject("shell.Application") oShell.NameSpace(sDrive).Self.name = "Department" sDrive="x:\" Set oShell = CreateObject("shell.Application") oShell.NameSpace(sDrive).Self.name = "Database" sDrive="M:\" Set oShell = CreateObject("shell.Application") oShell.NameSpace(sDrive).Self.name = "GarantF1Turbo" Можешь без этот слипа :) это просто программка в которой пауза в 1сек |
А можно еще две вещи? :)
1) можно целиком листинг на подключение одного диска? (уменя на 9 символе выдает ошибку). 2) Где скачать слип? |
Вот целиком рабочий листинг. Подключаются диски в зависимости от членства в группе.
Комментарии оставил. Изначально скрипт написан Dan Thomson (logon.vbs), я его только немного подправил. Т.о. можно подключать и принтеры ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' On Error Resume Next '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Define Variables and Constants '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim objFileSys Dim objIntExplorer Dim objWshNetwork Dim objWshShell Dim strDomain 'Domain of the user Dim strHomePage 'Homepage to be set for user Dim strLogonPath 'Path to location from where the script is running Dim strOSProdType 'OS Product type (WinNT, LanmanNT, ServerNT) Dim strWorkstation 'Local Computer Name Dim strUserGroups 'List of groups the user is a meber of Dim intCounter 'General counter Const UseNTServer = 0 'Sets whether this script runs when logging on locally 'to Windows Servers. 'Values are: 1 (Yes) OR 0 (No) Const FileSrv1 = "\\w2kserver" Const FileSrv2 = "\\calculator2" 'Initialize common scripting objects Set objFileSys = CreateObject( "Scripting.FileSystemObject" ) Set objWshNetwork = CreateObject( "WScript.Network" ) Set objWshShell = CreateObject( "WScript.Shell" ) 'Pause script until user is fully logged on (applicable only to Win 9x or ME) 'This will timeout after 10 seconds strUser = "" intCounter = 0 Do strUserID = objWshNetwork.Username intCounter = intCounter + 1 Wscript.Sleep 500 Loop Until strUserID <> "" OR intCounter > 20 'Check for error getting username If strUserID = "" Then objWshShell.Popup "Logon script failed - Contact the Helpdesk @ x 345", , _ "Logon script", 48 Call Cleanup End If 'Gather some basic system info Call GetSystemInfo If IsTerminalServerSession <> True Then 'Exit if we are logging on locally to a server and the script is set to NOT run on servers IF UseNTServer = 0 AND (strOSProdType = "LanmanNT" OR strOSProdType = "ServerNT") Then objWshShell.Popup "Windows Server - Exiting Logon Script!", 10, _ "Logon to " & strDomain, 16 Call CleanUp End if End If 'Get group memberships strUserGroups = "" Call GetLocalGroupMembership Call GetGlobalGroupMembership ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' ' This section performs actions based on group membership ' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' if InGroup("ТАИ") then MapDrv "P:", FileSrv1 & "\tai$","Папка для ТАИ" MapDrv "P:\", FileSrv1 & "\tai$","Папка для ТАИ" End If If InGroup( "ПЭО" ) Then MapDrv "P:", FileSrv1 & "\peo$","Папка для ПЭО" MapDrv "P:\", FileSrv1 & "\peo$","Папка для ПЭО" End If If InGroup( "Бухгалтерия" ) Then MapDrv "P:", FileSrv1 & "\buh$","Папка для бухгалтерии" MapDrv "P:\", FileSrv1 & "\buh$","Папка для бухгалтерии" End If If InGroup( "Администрация" ) Then MapDrv "P:", FileSrv1 & "\ruk$","Папка для администрации" MapDrv "P:\", FileSrv1 & "\ruk$","Папка для администрации" End If If InGroup( "АРС" ) Then MapDrv "P:", FileSrv1 & "\ars$","Папка для АРС" MapDrv "P:\", FileSrv1 & "\ars$","Папка для АРС" End If If InGroup( "Канцелярия" ) Then MapDrv "P:", FileSrv1 & "\zu$","Папка для канцелярии" MapDrv "P:\", FileSrv1 & "\zu$","Папка для канцелярии" End If If InGroup( "КТЦ" ) Then MapDrv "P:", FileSrv1 & "\ktc$","Папка для КТЦ" MapDrv "P:\", FileSrv1 & "\ktc$","Папка для КТЦ" End If If InGroup( "Администрация" ) Then MapDrv "P:", FileSrv1 & "\ruk$","Папка для администрации" MapDrv "P:\", FileSrv1 & "\ruk$","Папка для администрации" End If If InGroup( "НСС" ) Then MapDrv "P:", FileSrv1 & "\nss$","Папка для НСС" MapDrv "P:\", FileSrv1 & "\nss$","Папка для НСС" End If If InGroup( "ОКС" ) Then MapDrv "P:", FileSrv1 & "\oks$","Папка для ОКС" MapDrv "P:\", FileSrv1 & "\oks$","Папка для ОКС" End If If InGroup( "ОМТСиК" ) Then MapDrv "P:", FileSrv1 & "\omts$","Папка для ОМТСиК" MapDrv "P:\", FileSrv1 & "\omts$","Папка для ОМТСиК" End If If InGroup( "ОППР" ) Then MapDrv "P:", FileSrv1 & "\oppr$","Папка для ОППР" MapDrv "P:\", FileSrv1 & "\oppr$","Папка для ОППР" End If If InGroup( "Отдел Кадров" ) Then MapDrv "P:", FileSrv1 & "\ok$","Папка для Отдела кадров" MapDrv "P:\", FileSrv1 & "\ok$","Папка для Отдела кадров" End If If InGroup( "ПТО" ) Then MapDrv "P:", FileSrv1 & "\pto$","Папка для ПТО" MapDrv "P:\", FileSrv1 & "\pto$","Папка для ПТО" End If If InGroup( "Химцех" ) Then MapDrv "P:", FileSrv1 & "\hc$","Папка для Химцеха" MapDrv "P:\", FileSrv1 & "\hc$","Папка для Химцеха" End If If InGroup( "Электроцех" ) Then MapDrv "P:", FileSrv1 & "\ec$","Папка для Электроцеха" MapDrv "P:\", FileSrv1 & "\ec$","Папка для Электроцеха" End If If InGroup( "Мнемосхема" ) Then MapDrv "R:", FileSrv2 & "\mnemo","Мнемосхема" MapDrv "R:\", FileSrv2 & "\mnemo","Мнемосхема" End If If InGroup( "Директор" ) Then MapDrv "Y:", FileSrv1 & "\chief$","Конфиденциально" MapDrv "Y:\", FileSrv1 & "\chief$","Конфиденциально" End If MapDrv "V:", FileSrv1 & "\users\" & objWshNetwork.UserName, "Домашняя папка" MapDrv "V:\", FileSrv1 & "\users\" & objWshNetwork.UserName, "Домашняя папка" MapDrv "K:", FileSrv1 & "\distr", "Дистрибутивы" MapDrv "K:\", FileSrv1 & "\distr", "Дистрибутивы" MapDrv "T:", FileSrv1 & "\ctec","Папка ЦТЭЦ" MapDrv "T:\", FileSrv1 & "\ctec","Папка ЦТЭЦ" ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' End section ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' Sub: MapDrive ' ' Purpose: Map a drive to a shared folder ' ' Input: ' strDrive Drive letter to which share is mapped ' strServer Name of server that hosts the share ' strShare Share name ' ' Output: ' ' Usage: ' Call MapDrive ("P:", "w2kserver", "tai$") ' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Function MapDrv(DrvLet, UNCPath, DrvName) Dim objFSO, oShell ' Object variable Set objFSO = CreateObject("Scripting.FileSystemObject") Set objoShell = CreateObject("Shell.Application") On Error Resume Next If objFSO.DriveExists(DrvLet) Then objWshNetwork.RemoveNetworkDrive DrvLet, true, true End If objWshNetwork.MapNetworkDrive DrvLet, UNCPath objoShell.NameSpace(DrvLet).Self.Name = DrvName End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' Sub: GetLocalGroupMembership ' ' Purpose: Gather all local groups the current user belongs to ' ' Input: ' ' Output: Local group names are added to strUserGroups ' ' Usage: Call GetLocalGroupMembership ' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub GetLocalGroupMembership On Error Resume Next Dim colGroups 'Collection of groups on the local system Dim objGroup 'Object reference to individual groups Dim objUser 'Object reference to individual group member 'Verify system is not Windows 9x or ME If objWshShell.ExpandEnvironmentStrings( "%OS%" ) = "Windows_NT" Then 'Connect to local system Set colGroups = GetObject( "WinNT://" & strWorkstation ) colGroups.Filter = Array( "group" ) 'Process each group For Each objGroup In colGroups 'Process each user in group For Each objUser in objGroup.Members 'Check if current user belongs to group being processed If LCase( objUser.Name ) = LCase( strUserID ) Then 'Add group name to list strUserGroups = strUserGroups & objGroup.Name & "," End If Next Next Set colGroups = Nothing End If End Sub ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' Sub: GetGlobalGroupMembership ' ' Purpose: Gather all global groups the current user belongs to ' ' Input: ' ' Output: Global group names are added to strUserGroups ' ' Usage: Call GetGlobalGroupMembership ' ' Notes: Use WinNT connection method to be backwards ' compatible with NT 4 domains ' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub GetGlobalGroupMembership On Error Resume Next Dim objNameSpace Dim objUser Const ADS_READONLY_SERVER = 4 Set objNameSpace = GetObject( "WinNT:" ) 'Use the OpenDSObject method with the ADS_READONLY_SERVER 'value to grab the "closest" domain controller 'Connect to user object in the domain Set objUser = objNameSpace.OpenDSObject( _ "WinNT://" & strDomain & "/" & strUserID, "", "", ADS_READONLY_SERVER) 'Process each group For Each objGroup In objUser.Groups 'Add group name to list strUserGroups = strUserGroups & objGroup.Name & "," Next Set objNameSpace = Nothing End Sub ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' Function: InGroup ' ' Purpose: Determine if user belongs to specified group ' ' Input: Name of group to test for membership ' ' Output: True or False ' ' Usage: If InGroup("Domain Admins") Then <do something> ' ' Requirements: ' strUserGroups must have been previously populated via ' GetLocalGroupMembership and/or GetGlobalGroupMembership ' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Function InGroup(strGroup) On Error Resume Next InGroup = False 'Search strUserGroups for strGroup If Instr( 1, LCase( strUserGroups ), LCase( strGroup ), 1) Then InGroup = True End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' Sub: GetSystemInfo ' ' Purpose: Gather basic info about local system ' ' Input: ' ' Output: strDomain, strOSProdType, strWorkstation, strLogonPath ' ' Usage: Call GetSystemInfo ' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub GetSystemInfo On Error Resume Next 'Get domain name If objWshShell.ExpandEnvironmentStrings( "%OS%" ) = "Windows_NT" Then strDomain = objWshNetwork.UserDomain Else strDomain = objWshShell.RegRead( "HKLM\System\CurrentControlSet\" & _ "Services\MSNP32\NetWorkProvider\AuthenticatingAgent" ) End If 'Get Product Type from registry (WinNT, LanmanNT, ServerNT) strOSProdType = objWshShell.RegRead( _ "HKLM\System\CurrentControlSet\Control\ProductOptions\ProductType") 'Get computer name If IsTerminalServerSession = True Then 'Set strWorkstation to the real name and not the name of the server strWorkstation = objWshShell.ExpandEnvironmentStrings( "%CLIENTNAME%" ) Else strWorkstation = objWshNetwork.ComputerName End If 'Get the path to the location from where the script is running strLogonPath = Left( Wscript.ScriptFullName, _ ( InstrRev( Wscript.ScriptFullName, "\") -1)) End Sub ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' Function: IsTerminalServer ' ' Purpose: Determine if the script is running in a terminal server session ' ' Input: ' ' Output: ' True if running in a terminal server session ' False if not running in a terminal server session ' Usage: ' If IsTerminalServerSession = True Then <Do Something> ' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Function IsTerminalServerSession On Error Resume Next Dim strName 'Detect if this is a terminal server session 'If it is, set some names to the terminal server client name strName = objWshShell.ExpandEnvironmentStrings( "%CLIENTNAME%" ) If strName <> "%CLIENTNAME%" AND strName <> "" Then _ IsTerminalServerSession = True End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' Sub: Cleanup ' ' Purpose: Release common objects and exit script ' ' Input: ' ' Output: ' ' Usage: Call Cleanup ' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Sub Cleanup On Error Resume Next Set objFileSys = Nothing Set objWshNetwork = Nothing Set objWshShell = Nothing Set objIntExplorer = Nothing 'Exit script Wscript.Quit() End Sub |
Достаточно двух строк.
net use W: /delete /yes net use W: \\server\share Butunin Klim Не стОит копировать содержание Ваших скриптов с названиями Ваших программ, дабы не сбивать человека с толку. dimich22 Приведенный Вами скрипт выполняет слишком много функций, не нужных автору темы. |
monkkey
Согласен. Еще вчера подумал когда человек ответ дал. |
Сам вопрос задал сам отвечу.
Код:
Теперь вопрос: "Могу я создать несколько скриптов с разными шарами и на каждый Organizational Unit привязать свой?" Если такое возможно то расскажите пожалуйста по подробнее как. С уважением, Lamer-1. |
создай политику для каждо OU в свойствах политики укажи выполнение скрипта
|
net use W: /delete /yes
net use W: \\server\share1 - Для первого OU net use W: /delete /yes net use W: \\server\share2 - для второго. |
В групповой политике --> конфигурация пользователя --> сценарий входа\выхода --> вход в систему я указал расположение файла.
Но к сожалению после входа скрипт не отрабатывает :(( Вроде гдето я видел что логон скрипт надо еще включать, но где? |
Скрипт сработат через от 5-15 минут
|
Нет не за работал. :(
|
Ну еще вариант наследование стоит тогда скрипт если есть какой то выше этой ветки то выпполняться он не будет.
|
ОЮ находиться в корне ад но я поставил галочку блокирование наследования политики.
Жду 15 минут)) |
Попробуйте вручную запустить. Проверьте журнал ошибок, применение политик проверьте через gpresult или GPMC
|
В ручную все работает и на домашнем серваке работает а вот на работе чтото не получается.
Ладно буду колдовать. Тут ВПН тунель поэтому наверное пока политика на корневом домене не пропишется я ей не смогу воспользоваться. |
Блин и молчит главное :)
Тогда применения политики для сайтов смотри а так же поставь выполнение скрпитов только поле загрузки сетевого интерфеса Если ХП у тебя то машина логинется до того как поднимается сетевой интрфейс тебе это дело нужно отключить. Что бы сначало интерфейс а потом скрипты |
Конфигурация компьютера\Административные шаблоны\Система\Вход в систему\Всегда ожидать инициализации сети при загрузке и входе в систему
Computer Configuration\Administrative Templates\System\Logon\ Always wait for the network at computer startup and logon |
monkkey
Во а мне времени небыло выписывать путь, а тут решил переписать в форум а ты уже все сделал :) |
Время: 09:33. |
Время: 09:33.
© OSzone.net 2001-