Здравствуйте, Господа.
К сожалению я перерыл половину известных мне поисков и не нашел пошагового
руководства по автоматизации подключения сетевых ресурсов.
Проблема такая.
Есть несколько корневых котологов в DFS.
Содержимое каждого соответствует требованиям отделов.
Есть Organizational Unit. На кажды отдел свой.
Необходимо организовать подключение сетевого каталога в
качестве диска с помощью скрипта netlogon и групповой политики.
Соответственно в случае если пользователя перенести из одного
Organizational Unit в другой то старый диск должен отключиться а
на его место подключиться тот который соответствует данному Organizational Unit.
На сайте к сожалению не нашел этой информации. Если найдеться тот который знает
адрес ссылки где решается моя задача, то я с радостью приму в качестве помощи линк.
С уважением, Ламер.
Butunin Klim
21-03-2007, 16:01
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?
Butunin Klim
21-03-2007, 16:20
угу туда можешь в конец этого скиптра вставить строчку
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
call \\srv1\NETLOGON\start_department.vbs
и там же твой скрипт
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) Где скачать слип?
dimich22
21-03-2007, 17:32
Вот целиком рабочий листинг. Подключаются диски в зависимости от членства в группе.
Комментарии оставил. Изначально скрипт написан 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
Приведенный Вами скрипт выполняет слишком много функций, не нужных автору темы.
Butunin Klim
22-03-2007, 09:07
monkkey
Согласен. Еще вчера подумал когда человек ответ дал.
Сам вопрос задал сам отвечу.
'======================================================================
Set objWshNetwork = CreateObject( "WScript.Network" ) 'Создание объекта WshNetwork
Function MapDrv(DrvLet, UNCPath) 'функция подключения сетевого диска
Dim objFSO
Dim Drive
Set objFSO = CreateObject("Scripting.FileSystemObject") 'Создание объекта FileSystemObject
If objFSO.DriveExists(DrvLet) Then
objWshNetwork.RemoveNetworkDrive DrvLet,true, true 'происходит дисконнект диска Z
End If
WScript.Sleep 100 'пауза
objWshNetwork.MapNetworkDrive DrvLet, UNCPath 'Подсключение указанного диска с именем DrvLet и с сетевым путем UNCPath
End Function
MapDrv "Z:", "\\Имя сервера\имя шары" 'Вызов функции маппирования с заданными параметрами
Подруга сделала :)
Теперь вопрос: "Могу я создать несколько скриптов с разными шарами и на каждый Organizational Unit привязать свой?"
Если такое возможно то расскажите пожалуйста по подробнее как.
С уважением, Lamer-1.
Butunin Klim
22-03-2007, 10:14
создай политику для каждо OU в свойствах политики укажи выполнение скрипта
net use W: /delete /yes
net use W: \\server\share1 - Для первого OU
net use W: /delete /yes
net use W: \\server\share2 - для второго.
В групповой политике --> конфигурация пользователя --> сценарий входа\выхода --> вход в систему я указал расположение файла.
Но к сожалению после входа скрипт не отрабатывает :((
Вроде гдето я видел что логон скрипт надо еще включать, но где?
Butunin Klim
22-03-2007, 12:11
Скрипт сработат через от 5-15 минут
Butunin Klim
22-03-2007, 13:01
Ну еще вариант наследование стоит тогда скрипт если есть какой то выше этой ветки то выпполняться он не будет.
ОЮ находиться в корне ад но я поставил галочку блокирование наследования политики.
Жду 15 минут))
Попробуйте вручную запустить. Проверьте журнал ошибок, применение политик проверьте через gpresult или GPMC
В ручную все работает и на домашнем серваке работает а вот на работе чтото не получается.
Ладно буду колдовать. Тут ВПН тунель поэтому наверное пока политика на корневом домене не
пропишется я ей не смогу воспользоваться.
Butunin Klim
22-03-2007, 15:16
Блин и молчит главное :)
Тогда применения политики для сайтов смотри а так же поставь выполнение скрпитов только поле загрузки сетевого интерфеса
Если ХП у тебя то машина логинется до того как поднимается сетевой интрфейс тебе это дело нужно отключить.
Что бы сначало интерфейс а потом скрипты
Конфигурация компьютера\Административные шаблоны\Система\Вход в систему\Всегда ожидать инициализации сети при загрузке и входе в систему
Computer Configuration\Administrative Templates\System\Logon\ Always wait for the network at computer startup and logon
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.