Ru-Board.club
← Вернуться в раздел «В помощь системному администратору»

» Автоматизация администрирования

Автор: felixroot
Дата сообщения: 09.11.2005 18:14
Парни а как скриптом проставить всем пользователям домашнюю директорию ???
Что бы цеплялся диск H: с путем \\server\home\user ???
Автор: KapralBel
Дата сообщения: 10.11.2005 09:44
felixroot
Ты бы написал какие системы на клиентских компьютерах и какой язык ты используешь для написания скрипта
Варианты

Код: Net Use H: /Home
Автор: felixroot
Дата сообщения: 10.11.2005 10:47
Есть домен на Windows 2000 и NetWare 5
Вся проблема в том что cn у всех заведены русскими буквами (( типа Иванов И.И.
и при попытке обращения к cn, скрипт ругается. Скрипт на WHS.
Может кто помегет с кодок чтобы на всем домене у всех прописать домашние директории.
То есть не по одному, а весь домен сразу ???
Автор: KapralBel
Дата сообщения: 10.11.2005 11:10
felixroot
1. Выделяешь несколько пользователей (Можно всех)
2. Вызываешь свойства
3. Переход на вкладку Профиль
4. "Домашняя папка"
5. Подключить H: к \\server\home\%UserName%
Автор: felixroot
Дата сообщения: 10.11.2005 12:32
C выделением не получится нужно скриптом как то сделать
Автор: AlexSSS
Дата сообщения: 10.11.2005 13:03
felixroot
лови скрипт, вставишь его в Excel-->Tools-->Macros-->Visual Basic Editor-->Modules-->add module-->Module1

скрипт работает со стандартным расположением пользователей в Users (без OU)
закомментированный кусок как раз что-то прописывает в AD

Sub test()

Cells.Select
Selection.ClearContents

On Error Resume Next

Const E_ADS_PROPERTY_NOT_FOUND = &H8000500D
Set objOU = GetObject("LDAP://cn=users,dc=dom1,dc=dom2")

objOU.Filter = Array("user")
n = 0
For Each objUser In objOU
n = n + 1
Sheets("Users").Cells(n, 1).Value = objUser.cn
Sheets("Users").Cells(n, 2).Value = objUser.samAccountName
Sheets("Users").Cells(n, 3).Value = objUser.FirstName
Sheets("Users").Cells(n, 4).Value = objUser.LastName
Sheets("Users").Cells(n, 5).Value = objUser.DisplayName
Sheets("Users").Cells(n, 6).Value = objUser.AccountDisabled
Sheets("Users").Cells(n, 7).Value = objUser.LastLogin
Sheets("Users").Cells(n, 8).Value = objUser.PrimaryGroupID
Sheets("Users").Cells(n, 9).Value = objUser.LoginScript

' If Trim(objUser.LoginScript) = "init" Then
' objUser.LoginScript = "init.bat its"
' objUser.SetInfo
' End If

Next

Selection.Sort Key1:=Range("I1"), Order1:=xlAscending, Key2:=Range("H1") _
, Order2:=xlAscending, Key3:=Range("A1"), Order3:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

End Sub

Добавлено:
PS. Тебе нужно прописывать не скрипт, а home директори, найди сам, как точно называется это свойство. Если не найдешь, освобожусь, сам найду
Автор: KapralBel
Дата сообщения: 10.11.2005 13:09
felixroot
1. А в чем проблема с выделением?
2. Net use H: /Home пробовал?
3. Приведи скрипт на WSH и что именно он ругается/в каком месте
Автор: felixroot
Дата сообщения: 10.11.2005 14:27
Подожди но ты обращаешься тут по CN "LDAP://cn=users
А вот как реализовать обращение через samAccountName ????
Реализация с OU проблем нету но опять же ты реализешь на одного пользователя
а как придумать циклом ???
Автор: AlexSSS
Дата сообщения: 10.11.2005 14:41
> Подожди но ты обращаешься тут по CN "LDAP://cn=users
> А вот как реализовать обращение через samAccountName ????
> но опять же ты реализешь на одного пользователя
> а как придумать циклом ???
я в цикле ( For Each objUser In objOU ) просматриваю ВСЕХ пользователей, которые находятся в Users. Если ты не используешь OU, то они в Users все.

а samAccountName - это одно из свойств обьекта objUser
Автор: felixroot
Дата сообщения: 10.11.2005 15:20
Что то не работает (((
Автор: AlexSSS
Дата сообщения: 10.11.2005 15:30
1. чтобы получить право доступа к этим обьектам, надо запускать эксель под правами сервер оператора или домен админа
2. dc=dom1,dc=dom2 - на имя своего домена заменил?
3. убери на время On Error Resume Next - на чем будет ошибка?
Автор: felixroot
Дата сообщения: 10.11.2005 15:42
1 Название домена поменял
2 Запускаю на контроллере домена
3 создал скрипт home.vbs в котором этот код запускаю с консоли
4 ругается на символ ":" Selection.Sort Key1:

Добавлено:
И если я вот эту строку LDAP://cn=users,dc=dom1,dc=dom2
изменю вот так он не будет искать по OU "LDAP://cn=users,ou=TEST,dc=dom1,dc=dom2" ????
Автор: AlexSSS
Дата сообщения: 10.11.2005 16:03
так этот код заточен именно под Эксель
советую все же встроить его именно в эксель, тогда он тебе там выдаст полный список пользователей. А после того, как обновить нужное тебе свойство, там же посмотришь, обновилось оно или нет
Автор: KapralBel
Дата сообщения: 10.11.2005 16:26
felixroot
Что-то вы мудрите на пару с AlexSSS.
Сейчас проверил с выделением всех пользователей - прошло на ура.
Поясни чем плох этот способ с выделением пользователей и заменой свойств
Автор: AlexSSS
Дата сообщения: 10.11.2005 16:33
> Сейчас проверил с выделением всех пользователей - прошло на ура.
на DC Windows 2000 этот вариант не проходит. Если же у felixroot DC Windows 2003, то он действительно себе усложняет задачу

Добавлено:
> И если я вот эту строку LDAP://cn=users,dc=dom1,dc=dom2
> изменю вот так он не будет искать по OU "LDAP://cn=users,ou=TEST,dc=dom1,dc=dom2" ????

похоже тут не хватает запятых, вопроса не понял.

>LDAP://cn=users,ou=TEST,dc=dom1,dc=dom2
будут просматриваться пользователи именно этого OU
хотя тут ты точно ошибся в пути, правильно
LDAP://ou=TEST,cn=users,dc=dom1,dc=dom2
Автор: felixroot
Дата сообщения: 11.11.2005 10:56
А на VBS как перевести а то через EXEL как то не красиво получается
Автор: Nello
Дата сообщения: 11.11.2005 11:24
felixroot


Код:
Option Explicit
On Error Resume Next
Dim objConn, objComm, objRS, objUser
Dim strBase, strFilter, strAttrs, strScope
'*******************************************************************
'Set the ADO search criteria
'*******************************************************************
strBase = "<LDAP://ou=My OU,dc=domain,dc=local>;"
strFilter = "(&(objectclass=user)(objectcategory=Person));"
strAttrs = "ADsPath;"
strScope = "Subtree"

set objConn = CreateObject("ADODB.Connection")
objConn.Provider = "ADsDSOObject"
objConn.Open
'*******************************************************************
'Need to enable Paging in case there are more than 1000 objects returned
'*******************************************************************
Set objComm = CreateObject("ADODB.Command")
Set objComm.ActiveConnection = objConn
objComm.CommandText = strBase & strFilter & strAttrs & strScope
objComm.Properties("Page Size") = 1000
Set objRS = objComm.Execute( )
While not objRS.EOF
Set objUser = GetObject( objRS.Fields.Item("ADsPath").Value )
Profile_Dir = objUser.Get("sAMAccountName")
objUser.homeDirectory = "\\server\profile$\"+Profile_Dir
objUser.Homedrive="Z:"
objUser.LoginScript = "start.bat"
objUser.SetInfo
if Err.Number <> 0 Then
Wscript.Echo objUser.Name & " error occurred"
Err.Clear
Else
' Если юзеров много, то это лучше закомментировать
Wscript.Echo objUser.Name & " modified"
End if
objRS.MoveNext
Wend
Автор: Breaker
Дата сообщения: 11.11.2005 15:16
Подскажите скрипт, а то что-то не получается
Надо скопировать ярлык на рабочий стол
Т.к. не все входят под учетными записями домена, то скрипт придется ставить на загрузку комьютера? И ярлык копировать придется в \all users\desktop.

if not exist "%homedrive%%homepath%\Рабочий стол\111.lnk" xcopy "\\%userdomain%\netlogon\111.lnk" "%homedrive%%homepath%\Рабочий стол\"

Но это только для пользователей домена, а надо для локальных юзеров.
Автор: felixroot
Дата сообщения: 14.11.2005 07:45
Что то ругается на эту строчку Set objRS = objComm.Execute( )
Автор: alecsandrb
Дата сообщения: 16.11.2005 15:08
Подскажите пожалуйста следующее:
- при создании новых OU необходимо убедиться что таких еще нет или же они есть
и следовательно создавать заново ненужно.

Если использовать следующую конструкцию запроса как получить
ответ что такой OU (Sample) существует/не существует?
Set objOU = GetObject("LDAP://OU=Sample,dc=dom1,dc=dom2")
Автор: KapralBel
Дата сообщения: 16.11.2005 15:28
Breaker
Поясни что ты хочешь сделать
Скопировать ярлык с сервера в папку на локальном диске для доменных пользователей и для локальных?
Автор: FreemanRU
Дата сообщения: 16.11.2005 15:47
Breaker
Я делаю так:

Код:
Option Explicit

Dim WshShell, oShellLink, Path

Set WshShell = Wscript.CreateObject("Wscript.Shell")
Set oShellLink = WshShell.CreateShortcut(WshShell.SpecialFolders("AllUsersDesktop")+"\Excel.lnk")
oShellLink.TargetPath = "c:\program files\microsoft office\office10\excel.exe"
oShellLink.IconLocation = "c:\program files\microsoft office\office10\excel.exe, 0"
oShellLink.Save

Set oShellLink = WshShell.CreateShortcut(WshShell.SpecialFolders("AllUsersDesktop")+"\Word.lnk")
oShellLink.TargetPath = "c:\program files\microsoft office\office10\winword.exe"
oShellLink.IconLocation = "c:\program files\microsoft office\office10\winword.exe, 0"
oShellLink.Save

Set oShellLink = Nothing
Автор: alecsandrb
Дата сообщения: 17.11.2005 05:56
FreemanRU

Пытаюсь выполнить следующее:

CurStrOU = "OU=Domain controllers"
CommandText = "LDAP://dc=dom1,dc=dom2"
Set objDomain = GetObject(CommandText)
Set objOU = objDomain.Create("organizationalUnit", CurStrOU)
objOU.SetInfo

If objOU = Null Then
MsgBox 1
Else
MsgBox 2
End If

Точно знаю что такой OU уже есть но сообщение об ошибке
вылетает при выполнении оператора:
objOU.SetInfo - (Такой объет уже существует),
а мне нужно чтобы появлялось либо сообщение 1 либо 2.
Пробовал комментарить этот оператор (objOU.SetInfo),
но тогда вылетает с ошибкой (Неправильный аргумент или свойство).
Какое свойство этого объекта необхождимо сравнивать с null в данном случае?
Автор: AlexSSS
Дата сообщения: 17.11.2005 07:59
alecsandrb
поставь в начало скрипта (или перед SetInfo)
On Error Resume Next
тогда системное сообщение об ошибке будет подавлено
Автор: alecsandrb
Дата сообщения: 17.11.2005 13:34
AlexSSS

Это не решит проблемы: как узнать есть ли такой OU или еще нет
и его надо создать.
Автор: pazdak
Дата сообщения: 17.11.2005 14:17
alecsandrb
Как раз именно это и решит проблему !!!
Не зависимо от того есть OU или его нет он будет !!!
Автор: AlexSSS
Дата сообщения: 17.11.2005 14:43
> Это не решит проблемы: как узнать есть ли такой
> OU или еще нет и его надо создать.
ну так проверь вначале, есть ли такой OU.
А ты пытаешься создать уже существующее OU (objDomain.Create) и удивляешься, что вылетает ошибка.
Я показал, как обрабатывать ошибку по твоему коду.
Автор: alecsandrb
Дата сообщения: 17.11.2005 14:51
Проверил скрипт:

CurStrOU = "OU=Domain controllers"
CommandText = "LDAP://OU=Текущий OU,dc=dom1,dc=dom2"
On error resume next
Set objDomain = GetObject(CommandText)

If objDomain = Null Then
MsgBox 1
Else
MsgBox 2
End If

Результат: вне зависимости от того есть данный OU в AD или нет,
всегда выдается сообщение 1, т.е objDomain = null всегда.

pazdak

А почему не решит проблемы - это просто: мне не нужно принудительно
создавать OU вне зависимости от того есть он или нет, мне нужно именно
убедиться в том что если такой OU уже существует то создавать заново
его не надо и все его дочерние объекты не уничтожать.

Добавлено:
AlexSSS

Так я спрашивал как проверить существует ли заданный OU или нет.
Автор: AlexSSS
Дата сообщения: 17.11.2005 15:00
> Так я спрашивал как проверить существует ли заданный OU или нет.
ладно, проехали
как вариант,

On Error Resume Next
Set objou = GetObject("LDAP://ou=domain controllers,dc=dom1,dc=dom2")
If IsObject(objou) Then
MsgBox ("Found")
Else
MsgBox ("Not Found")
End If

PS. Если еще не скачал, скачай "TechNet Script Center Sample Scripts --- recomend" из шапки. Совершенно великолепная подборка по использованию скриптов
Автор: alecsandrb
Дата сообщения: 17.11.2005 15:09
AlexSSS

Скачал, спасибо. Подборка хорошая но я не нашел там данной проверки
именно для OU.
Твой пример также выдает постоянно одно и тоже - Found.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Зеркалирование дисков Win2000


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.