Справка - Поиск - Участники - Войти - Регистрация
Полная версия: Пишем скрипты для облегчения администрирования.
Частный клуб Алекса Экслера > Наши сети притащили > Администрирование сетей
Страницы: 1, 2, 3, 4, 5
Chief
30 января 2006, 18:00
Таки решил создать эту тему после того, как меня просили найти (не встречал ли я)/написать несколько скриптов в течении месяца.
В данной теме приветствуются любые скрипты, облегчающие управление сеткой.
Но есть и некоторые условия:
1. Скрипты разные для разных языков (perl, php, python, vbs, shell под разные системы), так что на чем написан скрипт и для какой системы - указывать очень желательно
2. Объяснять для каких целей и с каким софтом работает скрипт так же обязательно.
3. Писать, что скрипт и его часть написаны не верно (не не работают у Вас, а именно неверно написаны) без внесения собственных работающих, по Вашему мнению, исправлений, категорически запрещено. Данные потуги будут считаться безоснавательными утверждениями (не приведено доказательств) и злостным оофтопом, караемым по закону военного времени....
4. Задавать уточняющие вопросы по скриптам не возбраняется, так же как и просьбы по их доработке, но совсем уж элементарные вещи будут удаляться, хелп прочитать может каждый.
5. Если постите чужие скрипты, указывайте копирайт, если знаете. Иначе это просто не прилично.

Начну с нескольких своих скриптов...

Добавление пользователя почты под Unix при установленом Postfix + Cyrus-Sasl2 + Cyrus-Imapd, при этом необходим системный пользователь (не переделано на другую базу).Так же пользователь добавляется в общий список рассылки (не через менеджеров рассылки пока, потом поставлю менеджер и перепишу скрипт) и в отсотированый по имени список почтовых адресов фирмы на виндовом серваке (нет необходимости вести базу на самом сервере). newalises перезагрузка postfix вещи абсолютно не обязательные, но первое было сделано еще под sendmail, второе просто на всякий smile.gif В качестве параметров скрипту передаются логин и пароль пользователя.
CODE
#!/bin/sh
USER=$1
PASS=$2
/bin/echo $PASS | /usr/local/sbin/saslpasswd2 -p -c $USER
/bin/echo cm user.$USER | /usr/local/bin/cyradm -u admin localhost
/bin/echo sam user.$USER $USER all | /usr/local/bin/cyradm -u admin localhost
postfix reload
echo $USER'@'mydomain' >> /home/user/.forward
newaliases
/usr/sbin/pw useradd -n $USER -d /nonexistent -s /usr/sbin/nologin
cat /home/user/.forward | sort -n > /home/user/.forwards
mount_smbfs -I 192.168.0.1 -N //administrator@server/G$ /mnt/G$
cp /home/user/.forwards /mnt/G$/Файлопомойка/mail.list
umount /mnt/G$


Мироринг базы Касперского из под nix с помощью ncftp на виндовый сервак (естественно все параметры mount_smbfs прописаны в конфиге):
CODE
#!/bin/sh
if (ls /mnt/windows/Windows/Antivir/AVP/clrav/CLRAV.COM)
                  then
                           exit
                  else /usr/sbin/mount_smbfs -I 192.168.0.1 -N //administrator@server-1/Distr /mnt/windows && \
                                                                        cd /mnt/windows/Windows/Antivir/AVP/bases/ && \
                                                              /usr/local/bin/ncftpget -R -u anonymous ftp://ftp.avp.ru/updates_ext/ && \
                                                              cd /work && \
                                                              /sbin/umount /mnt/windows                                                                        
fi



Добавление пользователя ProFtpd при использовании базы НЕ системных пользователей, согласно статье с чтрутом их в их домашние директории...

CODE
#!/bin/sh
USER=$1
PASS=$2
/work/ftp/adduserftp.pl --file /work/ftp/userftp.txt --gid 65533 --home /work/ftp/users/$USER --name $USER -m nogroup --shell /sbin/nologin --uid 65534 --passwd
cat /work/ftp/userftp | grep /sbin > /work/ftp/userftp.txt
mkdir /work/ftp/users/$USER
chown nobody:nogroup /work/ftp/users/$USER
chmod 755 /work/ftp/users/$USER
/usr/local/etc/rc.d/proftpd.sh restart


Синхронизирующий бэкап папки под Windows:
CODE
"e:\program files\winrar\rar" a -r -ep2 -u -as -ow -os -m5 e:\back\arch.rar c:\Archive\*.*


Пока я приостановлюсь, есть немало народа, у которых куча скриптов гораздо лучше написанныхsmile.gif
Chief
2 февраля 2006, 09:05
Скрипт для смены пароля локального админа (в АД надо прописать в логон или запускать удаленно) VBS
CODE
strPsw = ""
strSeq = ""
strName = ""

'####################################
' Initialize random-number generator.
'####################################
Randomize


'####################
' Generate password
'####################
for intCnt = 0 To 15
MyValue = Int((94 * Rnd) + 32)      
'If Asc(PrevChr) = MyValue Or MyValue=34 Or MyValue=39 Or 'InStr(strPsw,ChrW(MyValue))>0 Then
'    intCnt = intCnt - 1
' Else
   PrevChr = ChrW(MyValue)
   strPsw = strPsw&PrevChr
   strSeq = strSeq&":"&CStr(MyValue)
' End If
Next
WScript.Echo strPsw

'###########################
'get username of local admin
'###########################
strComputer = "manager2"
Set objWMIService = GetObject("winmgmts:\\"&strComputer&"\root\cimv2")
   Set colItems = objWMIService.ExecQuery("Select * from Win32_UserAccount    Where LocalAccount = True and SID like 'S-1-5-21%500'")
   For Each objItem in colItems
     strName =    objItem.Name
   Next
                                                                             
'############################
'run net user to set password
'############################
Set objShell = Wscript.CreateObject("Wscript.Shell")
strExec = "net user "&strName&" "&strPsw

WScript.Echo strExec
Set objExecObject = objShell.Exec(strExec)

Автор
aZone
5 февраля 2006, 18:17

Chief написал: (в АД надо прописать в логон или запускать ужаленно)

Как-как запускать? bigeyes2.gif

От себя пара глупых скриптов для обработки лог-файлов считалки трафика ipfm. Написаны на shell, работают под FreeBSD. На машине работают ДВЕ копии ipfm: одна считает внешний интерфейс, другая - внутренний.

1. Скрипт, запускающийся раз в месяц, и копирующий сторонний скрипт (всем известный count.pl) обработки логов в папку текущего месяца (скрипт обрабатывает логи в папке, в которой лежит):

CODE
#!/bin/sh
cp -R /usr/local/ipfm/in/count.pl /usr/local/ipfm/in/$(date +'%Y')/$(date +'%m')/
cp -R /usr/local/ipfm/out/count.pl /usr/local/ipfm/out/$(date +'%Y')/$(date +'%m')/


2. Скрипт подсчета и последующего размещения отчетов в папке веб-сервера (запускается каждый день, не замещает старый отчет):

CODE
#!/bin/sh

# Making directories
mkdir /usr/home/www/ipfm/$(date +'%Y')/
mkdir /usr/home/www/ipfm/$(date +'%Y')/$(date +'%m')
mkdir /usr/home/www/ipfm/$(date +'%Y')/$(date +'%m')/inside/
mkdir /usr/home/www/ipfm/$(date +'%Y')/$(date +'%m')/outside/

# Count IN
cd /usr/local/ipfm/in/$(date +'%Y')/$(date +'%m')/
/usr/local/ipfm/in/$(date +'%Y')/$(date +'%m')/count.pl $(date +'%m')
cp -R /usr/local/ipfm/otchet/inside-$(date +'%m') /usr/home/www/ipfm/$(date +'%Y')/$(date +'%m')/inside/IN-$(date +'%m')-$(date +'%d').ipfm

# Count OUT
cd /usr/local/ipfm/out/$(date +'%Y')/$(date +'%m')/
/usr/local/ipfm/out/$(date +'%Y')/$(date +'%m')/count.pl $(date +'%m')
cp -R /usr/local/ipfm/otchet/outside-$(date +'%m') /usr/home/www/ipfm/$(date +'%Y')/$(date +'%m')/outside/OUT-$(date +'%m')-$(date +'%d').ipfm
ZW
8 февраля 2006, 10:18
А есть гденибудь скрипт под линукс выполняющий следующую задачу: проход по каталогу и удаление файлов в каталоге и подкаталогах старше заданной даты и удалении опустевших каталогов
Chief
14 февраля 2006, 16:49

ZW написал: А есть где-нибудь скрипт под линукс выполняющий следующую задачу: проход по каталогу и удаление файлов в каталоге и подкаталогах старше заданной даты и удалении опустевших каталогов

Могу без особых проблем написать для last modification time и для пустых папок (man find), а вот по созданию что то ничего в голову не приходит...
yura_a
14 февраля 2006, 19:31
Наверное, можно вот так найти файлы/папки модифицированных до указанной даты:
CODE

#!/bin/sh

DATE_TIME=<тут дата>

SECONDS_NOW=`date  +%s`                            
SECONDS_BEFORE=`eval "date --date='$DATE_TIME' +%s"`
SECONDS=`expr $SECONDS_NOW - $SECONDS_BEFORE`      
MINUTES=`expr $SECONDS / 60`                        
                                                   
for i in `find * -mmin +$MINUTES`                  
 do                                                
   echo "Deleting $i"                              
done                                              


Наверное жутко неоптимально smile.gif
Не пинайте. Всяких скриптов в подобном стиле мною написано множество, но они представляют узко специальный интерес smile.gif
Chief
14 февраля 2006, 19:52

yura_a написал: Наверное жутко неоптимально

Это вообще чистым фаиндом можно сделать (только его средствами, по крайней мере под фрю), только это на модификациюsmile.gif
На пустые папки тоже find великолепно работает, но вот "файлы старше" в нем не катят...
То что ты описал делается банальной строкой:
sh
find -atime n[smhdw] /path -delete
где n - число
smhdw - секунды, минуты, часы, дни, недели...
yura_a
14 февраля 2006, 20:08

это вообще чистым фаиндом можно сделать (только его средствами, по крайней мере под фрю), только это на модификацию

Хорошо, а как правильно?
ps.gif я вообще-то больше Оракляный админ smile.gif Но подобным скриптом кое что удалю. Для моих задач работает. Есть и другой вариант, но он основан на том, что дата_время содержится в имени файла - тут задача тривиальна совсем.
ps.gif
ps.gif
Да у меня собственно файнд и используется.
for i in `find * -mmin +$MINUTES`
Просто дата задается в более удобной форме.
Chief
14 февраля 2006, 23:17

yura_a написал: Хорошо, а как правильно?

Не правильнее, под задачу удобнее, у ZW же таки по конкретным срокам..smile.gif Я написал позже, потом саму строчку добавлялsmile.gif

yura_a написал: Просто дата задается в более удобной форме.

А вот это как раз под задачуsmile.gif
Chief
20 февраля 2006, 12:40
Скрипт для смены либо перезавода машины в домен. VBS
CODE
strComputer = "servant"
Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & пере завода
strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" & _
strComputer & "'")
CurrentDomain = objComputer.Domain
intAnswer = MsgBox("Текущий домен: " & CurrentDomain & vbCrLf _
& "Будем менять домен?", VBYesNo)
If Not intAnswer = 6 Then
Wscript.Quit
End If
strDomain = Ucase(InputBox("Введите имя нового домена:"))
strUser = InputBox("Имя пользователя:")
strPassword = InputBox("Введите пароль:")
ReturnValue = objComputer.JoinDomainOrWorkGroup(strDomain, _
strPassword, strDomain & "\" & strUser, NULL, 33)
WScript.Sleep(2000)
If ReturnValue = 0 Then
Wscript.Echo "Компьютер введен в домен " & strDomain _
& vbCrLf & "Для перезагрузки нажмите ОК"
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate,(Shutdown)}!\\" _
& strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
ObjOperatingSystem.Win32Shutdown(6)
Next
Else
Wscript.Echo "Ошибка при вводе в домен " & strDomain
End If

Автор
Chief
20 февраля 2006, 13:12
Смена пароля локального админа на компах сети.
Стартап скрипт VBS
CODE
strComputer = "."
Set colLocalUsers = GetObject("WinNT://" & strComputer & "")
colLocalUsers.Filter = Array("user")
For Each objUser In colLocalUsers
If objUser.Name = "Administrator" Or objUser.Name = "Администратор" Then
objUser.SetPassword "zdravstvui-tiotia-novai-god-2005"
objUser.SetInfo
End If
Next

Скрипт, крутящийся на сервере. VBS
CODE
Set WshShell = WScript.CreateObject("WScript.Shell")
Set FileSys = CreateObject("Scripting.FileSystemObject")
Set FileTxt = FileSys.OpenTextFile("c:\psw_local_adm.log", 8, TRUE)
Set colComputers = GetObject("WinNT://company.ru")
colComputers.Filter = Array("computer")
On Error Resume Next
For Each objComputer In colComputers
strComputer = objComputer.Name
If Not strComputer = "SERVANT" Then
Set objUser = GetObject("WinNT://" & strComputer & "/Administrator,user")
objUser.SetPassword "123456"
objUser.SetInfo
If Err.Number =0 Then
FileTxt.WriteLine strComputer & " - password changed"
Else
FileTxt.WriteLine strComputer & " - computer is offline or error occured"
End If
End If
Next
FileTxt.Close
intReturn = WshShell. Run("notepad.exe c:\psw_local_adm.log", 4, false)

Из недостатков последнего:
В этом варианте медленный - если комп в офлайне - обработчик ошибок долго ждет, пока ошибка выскочит.
Автор
Chief
20 февраля 2006, 13:25
Ввод пользователей в локальные админы стартап (не логон) скриптом... VBS
CODE
Set WshNetwork = CreateObject("WScript.Network")
strComputer = WshNetwork.ComputerName
strCompNTName = strComputer & "$"
' Ниже NetBIOS-имя домена без суффикса
strNetBIOSDomain = "company"
Set objTrans = CreateObject("NameTranslate")
objTrans.Init 3, ""
objTrans.Set 3, strNetBIOSDomain & "\" & strCompNTName
strCompDN = objTrans.Get(1)
Set objComp = GetObject("LDAP://" & strCompDN)
Set objOU = GetObject(objComp.Parent)
Select Case Mid(objOU.Name, 4)
Case "Workstations1"
strAdmin = "first" ' имена админов также NT, т.е logon-names
Case "Workstations2"
strAdmin = "second"
Case "Workstations3"
strAdmin = "third"
Case Else
WScript.Quit
End Select
Set objUser = GetObject("WinNT://" & strNetBIOSDomain _
& "/" & strAdmin & ",user")
Set objGroup = GetObject("WinNT://" & strComputer _
& "/Administrators,group")
For Each Member in objGroup.Members
If Member.Name = objUser.Name Then
WScript.Quit
End If
objGroup.Add(objUser.ADsPath)

Автор все тотжеsmile.gif
ZW
20 февраля 2006, 20:02

Chief написал:
Могу без особых проблем написать для last modification time и для пустых папок (man find), а вот по созданию что то ничего в голову не приходит...

last modification date то вообщемто и нуженsmile.gif
catbegemot
20 февраля 2006, 22:30
Пользуясь случаем хочу попросить помощи у знающих камрадов.
Есть пакет статистики (awstats) который генерит отчеты посещаемости. Нужно результат работы (страницу, генерируемую по URL) копировать в область, доступную пользователю в виде статического HTML. Хорошо бы, чтобы эта радость запускалась раз в неделю. На сервере (это хостинг) стоит Bash, cPanel и все такое.
Chief
20 февраля 2006, 23:08

ZW написал: last modification date то вообщемто и нужен

Тогда либо мою строчку в скрипт либо в чистом виде скрипт yura_a, на фре работают оба варианта, проверено, на линухе думаю тоже...
Для пустых папок и файлов достаточно строчки
find -emty /path -delete (может слегка покомбинировав, это не проверялsmile.gif
Monstr
23 февраля 2006, 08:36

catbegemot написал: Пользуясь случаем хочу попросить помощи у знающих камрадов.
Есть пакет статистики (awstats) который генерит отчеты посещаемости. Нужно результат работы (страницу, генерируемую по URL) копировать в область, доступную пользователю в виде статического HTML. Хорошо бы, чтобы эта радость запускалась раз в неделю. На сервере (это хостинг) стоит Bash, cPanel и все такое.

В cron.weekly создай файл содержащий "cp <from> <to>" .
Chief
24 февраля 2006, 01:13

Monstr написал: В cron.weekly создай файл содержащий "cp <from> <to>" .

А есть уверенность, что пользователь один?
tathagata
10 марта 2006, 12:14
Официальный сайт майрософт.

http://www.microsoft.com/technet/scriptcenter/default.mspx
По ссылке можно скачать так называемый Script center в котором пара сотен скриптов с использованием
WMI и VBS рассортирована в chm и разбита по категориям.

А также кучу полезного хелпа по скриптоводству.
Chief
10 марта 2006, 12:50

tathagata написал: По ссылке можно скачать

Скачать то можно, только там очень общие скрипты, все их надо серьезно переделывать под себя, я потому сюда эту ссылку и не давал, тут все же предпочтительней готовые скрипты... Ладно, пусть висит, по факту переделывать будемsmile.gif
tathagata
10 марта 2006, 12:54

Chief написал: Скачать то можно, только там очень общие скрипты, все их надо серьезно переделывать под себя, я потому сюда эту ссылку и не давал, тут все же предпочтительней готовые скрипты... Ладно, пусть висит, по факту переделывать будем

Тогда к ссылке со скриптами можно привесить ссылку по vbs. там тоже есть chm'ка. Дело то нехитрое smile.gif
Chief
10 марта 2006, 13:06

tathagata написал: Тогда к ссылке со скриптами можно привесить ссылку по vbs. там тоже есть chm'ка. Дело то нехитрое

Повторюсь, тут все же надо конкретные скрипты постить, я по инету тоже могу кучу найти общих скриптов с хелпом, и могу просто ман по sh повесить, сказав, что там все есть. Больше таких ссылок не надо, конкретные скрипты под конкретную задачу - приветствуется, если своих жалко, сюда их никто не заставляет постить, но за такие ссылки в следующий раз дам бан 1 день.
П. Ушкин
16 марта 2006, 23:40
Столкнулся сегодня с задачей внедрить DHCP в сетке на 50+ Windows-машин со статическими IP-шниками. Обращаться к каждой - лень.

Перетащил их в AD в отдельный OU и назначил им скрипт на заргузку:

CODE
netsh interface show interface|find "Выделенный">nets.txt
netsh interface show interface|find "Dedicated">>nets.txt
if not exist nets.txt goto end
for /F "tokens=3*" %%i in (nets.txt) do netsh interface ip set address "%%i %%j" source=dhcp
for /F "tokens=3*" %%i in (nets.txt) do netsh interface ip set dns "%%i %%j" source=dhcp
del nets.txt
:end


Сработало.
catbegemot
5 апреля 2006, 23:58

Monstr написал:


Chief написал:

Проблема решилась - был найден скрипт, который вытаскивает статистику из закрытой части (с логином/паролем). Все работает, чувствует себя превосходно.

Кстати, лог-файлы порекомендовали копировать через

CODE
cp -pr <from> <to>
ZW
18 апреля 2006, 10:09

Chief написал: 
Тогда либо мою строчку в скрипт либо в чистом виде скрипт yura_a, на фре работают оба варианта, проверено, на линухе думаю тоже...
Для пустых папок и файлов достаточно строчки
find -emty /path -delete (может слегка покомбинировав, это не проверялsmile.gif 

#!/bin/sh
#remove files oldest N days
#rmold.sh path days
#Max argument 2
MAX2=2

if [ $# -lt "$MAX2" ];
then
echo
echo "rmold.sh path days"
echo
exit 0
fi

if [ $# -gt "$MAX2" ];
then
echo
echo "I waiting $MAX2 arguments"
echo
exit 0
fi

PATH=$1
DAYS=$2
echo $1
echo $2

/bin/find $PATH -ctime +$DAYS -exec rm -r {} \;



Toronga Leela
21 апреля 2006, 12:38
Поменять описание компьютера в сетевом окружении при логине пользователя на имя этого залогинившегося юзера.

CODE

'********************************************************************
'*
'* File:        comp_description.VBS
'* Created:     Ноябрь 2005
'* Version:     1.5
'*
'* Main Function: Пишет в комментарии компьютера (не контроллера домена)
'* в сетевом окружении имя залогинившегося пользователя (не админа) .
'*
'*
'********************************************************************

set oShell = wscript.CreateObject("Wscript.Shell")

Function main()
dim username
username=""
'Ищем логин пользователя:
    Set objNetwork = Wscript.CreateObject("Wscript.Network")
    samUser = objNetwork.UserName
    LocalMashine=objNetwork.Computername
    'Ищем имя прользователя:
   Const adStateOpen = 1
   Dim objConn  'ADO Connection object
   Dim objRS    'ADO Recordset object
   Set objConn = CreateObject("ADODB.Connection")
   objConn.Provider = "ADSDSOObject"
objConn.Open ""
If not(objConn.State = adStateOpen) Then
  WScript.Quit(1)
End If
'В этой стройке указываем свой Base DN
               Set objRS = objConn.Execute _
  ("<LDAP://dc=microsoft,dc=com>;(&(ObjectClass=User)(ObjectCategory=Person)(samaccountname="&samuser&"));" & "Name;SubTree")
While Not objRS.EOF
    username=objRS.Fields.Item("name").Value
    objRS.MoveNext
   Wend
   'В этой стройке указываем свой Base DN
   Set objRS = objConn.Execute _
  ("<LDAP://OU=Domain Controllers, dc=microsoft,dc=com>;(&(ObjectClass=Computer)(name="&LocalMashine&"));" & "name;Onelevel")
'Если  контроллер домена, то выходим (name="&LocalMashine&")
If  not(objRS.EOF) then
 wscript.Quit(0)
end if
 objConn.Close
   Set objRS = Nothing
'Если  пользователь не найден, то выходим
If (username = "") or (username = "Администратор") Then
 wscript.Quit(0)
 End If
oshell.run("net config server /srvcomment:"+chr(34)+username+chr(34))
       '
end function

call main()

У пользователя прописан logon script start.bat с одной строчкой
CODE

название vbs скрипта, лежащего в той же папке NETLOGON
Moisha Ryubman
19 мая 2006, 11:26
Возникла следующая задача: сменился корпоративный стандарт, согласно ему требуется изменить выводимое имя в актив директори.

Ранее было так:
Имя: Имя человека
Инициалы: Пусто
Фамилия: Фамилия человека
Выводимое имя: Имя Фамилия

Теперь надо:
Имя: Имя человека
Инициалы: Пусто
Фамилия: Фамилия человека
Выводимое имя: Фамилия Имя

Вопрос:
Каким образом возможно скриптом поменять в актив директори данные всех пользователей домена? Потому как записей порядка 300... Да и записи разбросаны по подразделениям в актив директори.
ЗЫ. Прилагаю скриншот типа "как было - как должно быть".
alibek
19 мая 2006, 13:55
Домена нет, поэтому проверить не могу. Проверяй сам smile.gif
Но должно работать.
CODE
On Error Resume Next

Const ADS_SCOPE_SUBTREE = 2

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection

objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

objCommand.CommandText = _
   "SELECT Name FROM 'LDAP://dc=fabrikam,dc=com' WHERE objectCategory='user'"  
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst

WScript.Echo "Processing..."
Do Until objRecordset.EOF
 strADsPath = objRecordset.Fields("ADsPath")
 Set objUser = GetObject(strADsPath)
 strNameFirst = objUser.givenName
 strNameInitials = objUser.initials
 strNameLast = objUser.sn
 strNameDisplay = objUser.displayName
 strNameNew = strNameLast & " " & strNameFirst
 WScript.Echo "  - " & strNameDisplay & " -> " & strNameNew
 'Если работает правильно, то следующие две строчки можно раскомментировать
 'objUser.Put "displayName", strNameNew
' objUser.SetInfo
 objRecordSet.MoveNext
Loop
WScript.Echo "Done."
Moisha Ryubman
19 мая 2006, 15:40
Все работает, спасибо. Правда, пришлось внести некоторые изменнения в скрипт:

objCommand.CommandText = _
"SELECT Name, ADsPath FROM 'LDAP://dc=sub,dc=domain,dc=com'
Alex_Z
24 мая 2006, 10:05
Здравствуйте!

Можно-ли через web интерфейс предоставить пользователю возможность смены своего пароля в AD?
Пробовал
Set objUser = Getobject("LDAP://cn=test,ou=users,dc=firma,dc=lan")
objUser.ChangePassword "123", "345"
Говорит что объект не найден.
Пробовал еще:
Set objUser = Getobject("WinNT://FIRMA/test,user")
это работает, но говорит что новый пароль не соответствует локальным политикам, хотя там все можно. С консоли меняется без проблем
Спасибо!
Alex_Z
24 мая 2006, 14:33
Вот что выдает LDP.EXE при поиске юзера "test"
***Searching...
ldap_search_s(ld, "CN=users,DC=FIRMA,DC=LAN", 2, "(givenName=test)", attrList, 0, &msg)
Error: Search: Ошибка операций. <1>
Server error: 00000000: LdapErr: DSID-0C090627, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, vece
Result <1>: 00000000: LdapErr: DSID-0C090627, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, vece
Matched DNs:
Getting 0 entries:
Alex_Z
26 мая 2006, 10:21
Все оказалось банально просто. Сам виноват опыта нет вот сам запутался и всех запутал smile.gif
Я писал в таком виде:
Set objUser = Getobject("LDAP://cn=test,ou=users,dc=firma,dc=lan")
objUser.ChangePassword "123", "345"

Ошибка у меня здесь: OU=users! А надо CN=users.
Прошу прощения что морочил голову. Спасибо!
Alex_Z
13 июня 2006, 11:36
Здравствуйтеэ
Еще проблемка...

Подскажите, как можно найти юзера в AD по его логину sAMAccountName.
Если известно CN юзера то находит без проблем, см. ниже:
Set objUser = GetObject("LDAP://CN=test CN=Users,DC=home,DC=local")
Но вот как найти по sAMAccountName? можно ли в строку запроса как-то фильтр включить? если да, то как?

Спасибо!
Alex_Z
20 июня 2006, 16:45
Уже разобрался smile.gif
Chief
20 июня 2006, 17:05

Alex_Z написал: Уже разобрался

Ну так отпишисьsmile.gif
Alex_Z
20 июня 2006, 17:37
dim objConnection
dim objCommand
dim strUser, sPassword, sNewPassword, objRecordSet, cher
dim strADsPath, ADsPath
dim objUser
dim strNameDisplay
Const ADS_SCOPE_SUBTREE = 2

objConnection = CreateObject("ADODB.Connection")
objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open("Active Directory Provider")
objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

strUser = request("txtUserName")
sPassword = request("txtPassword")
sNewPassword = request("txtNewPassword")

On Error Resume Next

objCommand.CommandText = "SELECT Name, distinguishedName FROM 'LDAP://dc=home,dc=lan' WHERE objectCategory='user'and sAMAccountName='"& strUser &"'"
objRecordSet = objCommand.Execute
strADsPath = objRecordset.Fields("distinguishedName").value
objUser = GetObject("LDAP://" & strADsPath & " ")
strNameDisplay = objUser.displayName
objUser.ChangePassword(sPassword, sNewPassword)

Барбарисыч
20 июня 2006, 19:26

Alex_Z написал:

Если хочется просто сменить пароль одному юзеру в домене или локальному юзеру компа "по user id", то это можно сделать проще если использовать провайдера WinNT:


CODE
Dim ads As IADsUser

strDomain = request("txtDomain")
strUser = request("txtUserName")
strNewPassword = request("txtNewPassword")

Set ads = GetObject("WinNT://" & strDomain & "/" & strUser" & ",user")
ads.SetPassword strNewPassword


strDomain может быть именем домена или рабочей станции
corban
4 октября 2006, 04:13
Доброго времени суток!
Я в скриптах не силен, да и не было вроде необходимости.
Однако, наткнувшись на эту ветку заинтересовался не по-детски и решил попробовать для начала этот:

Toronga Leela написала: Поменять описание компьютера в сетевом окружении при логине пользователя на имя этого залогинившегося юзера.

И че получилось?
Из всех юзеров скрипт работает только у членов группы Администраторы схемы, у всех - остальных тишина. У всех юзеров профили перемещаемые, скрипт лежит в папке \\server\netlogon, запускается из батника. В батнике кроме строки запуска скрипта строка net use она работает у всех пользователей. Сервер w2003se, клиенты wXP.
Где у меня косяк?
код батника
CODE

@echo off
net use \\serveric.guvd 344212 /user:a012001
cscript \\server\netlogon\comp_desc.vbs
exit

сам батник находится \\server\sysvol\domain\policies\...\users\scripts\logon
код скрипта не трогал, только вставил свои значаения для домена
Chief
4 октября 2006, 12:19

corban написал: Из всех юзеров скрипт работает только у членов группы Администраторы схемы

Он только у них отрабатывает или только у них запускается?
corban
4 октября 2006, 13:44
запускается
alibek
4 октября 2006, 13:47
Запускать надо под администраторской учетной записью.
runas, например, или через службу.
Chief
4 октября 2006, 13:51

corban написал: запускается

Простой пользователь не может переименовать машину...
TOSha_n
4 октября 2006, 14:31
А выполнение бэкапов считается в тему?
corban
5 октября 2006, 02:32

Chief написал:
Простой пользователь не может переименовать машину...

но там не переименование, а изменение коментариев - описание компа
alibek
6 октября 2006, 08:11

corban написал: но там не переименование, а изменение коментариев - описание компа

Там ведь наверняка SetInfo?
А почему бы не задавать описание с домен-консоли?
corban
6 октября 2006, 08:57

alibek написал:
Там ведь наверняка SetInfo?
А почему бы не задавать описание с домен-консоли?

это как?
alibek
9 октября 2006, 12:17

corban написал: это как?

Я, например, пользовался старым добрым Server Manager с NT4.
Но можно и обычной консолью пользоваться, подключившись к AD.
corban
10 октября 2006, 02:39
хм... если я правильно понял - то задача скрипта показывать кто из юзеров в данный момент залогинился на конкретной тачке. естессно юзеров никто не собирается заставлять самим править комменты, а вот скриптом при логоне юзера - другое дело. и в принципе меня интересует вопрос почему он не работает у простых юзеров домена?
Chief
20 октября 2006, 02:54
Хм...
Господа, у меня кризис жанра: Нужно - копировать ТОЛЬКО изменения... С ls я справился на ура, скрипт - тоже легко, но нет возможности разобраться, чтоб копировались только обновленные файлы с ПОЛНЫМ путем, и сохранением пути...
То есть нужен инкрементный бекап без сервиса типа ftp...
Поискать я смогу и найду, просто времени нет...
Сорри за просьбу...
bilbo
20 октября 2006, 08:14

Chief написал: чтоб копировались только обновленные файлы с ПОЛНЫМ путем, и сохранением пути...


Ключ -EP3  — сохранять полные пути файлов, включая букву диска


Ключ -U  — обновить файлы

Ты про это?
Chief
20 октября 2006, 12:04

bilbo написал: Ты про это?

Хм, это в каком мане?
Дальше >>
Эта версия форума - с пониженной функциональностью. Для просмотра полной версии со всеми функциями, форматированием, картинками и т. п. нажмите сюда.
Invision Power Board © 2001-2017 Invision Power Services, Inc.
модификация - Яро & Серёга
Хостинг от «Зенон»Сервера компании «ETegro»