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

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

Автор: serstr
Дата сообщения: 26.04.2006 16:16
Всем доброго времени суток. По работе начальство обязала написать на VBS скрипты для следующих целей. Прочитал весь топик, так и не нашел ответа на свои вопросы
Как создать по средствам VBS mailbox account?
Как через VBS добавить SMTP адрес для mailbox и сделать его основным?
Как установить пермишенс на удаленные папки для юзеров?
Как создать экаунт в сети через VBS?
Имею доменную сеть на 150 компов с XP.
Дайте дельные советы или примеры...
Автор: FreemanRU
Дата сообщения: 26.04.2006 17:41
urel

Цитата:
попахивает мазохизмом

Человека интересовала теория. Вот это и есть теория.

serstr
Automating Exchange 2000 Management with Windows Script Host
How to set Exchange Server 2000 and 2003 mailbox rights at the time of mailbox creation
How to Create a User's Mailbox with VBScript

И вообще при запросе в www.google.ru выпадает такой список примеров, что хватит до конца дней своих.


Цитата:
Как создать экаунт в сети через VBS?

Акаунт в чем?

Добавлено:
Sk1f
Я делаю так:


Код:
Dim distinguishedName
Dim CurObject
Set CurObject = SetObjectFromDomain()
distinguishedName = CurObject["distinguishedName"] ' н-р CN=Group1,OU=Groups,DN=domain,DN=local
cn = CurObject["cn"] ' в нашем примере будет равно Group1

path = distinguishedName.Replace("CN=" & cn &",","")' получится OU=Groups,DN=domain,DN=local
Автор: eldo
Дата сообщения: 26.04.2006 23:19
FreemanRU
большое спасибо.
urel
и Вам тоже спасибо

По поводу NetBIOS как сам по себе я имел в виду, наверное, NetBEUI. У него отдельный свой транспорт (NBF).


насколько я знаю, можно поставить NetBIEU в Windows, отключить TCP/IP и сеть будет работать. Вот только про порты для него я ничего не нашел. Наверное нету там ничего такого.
Автор: serstr
Дата сообщения: 27.04.2006 08:10

Цитата:
Акаунт в чем?


ХР экаунт в доменной сети.
Автор: freeek
Дата сообщения: 27.04.2006 08:28
serstr справка по win2k3 выдаст тебе полностью рабочий код еслиты поищеш. Код примерно такой. Я просто его изменил малость в процессе экспериментов.


OU=530
CNG="Domain Admins"
CNU="vasili"
Tel=111
path1="ou=530"
path2=",dc=test,dc=loc"
Login="vasili"
Lastname=" "
Firstname=" "
Secondname=" "
Set oRoot = GetObject("LDAP://rootDSE")
Set oDomain = GetObject("LDAP://" & oRoot.Get("defaultNamingContext"))
Set oDomain = GetObject("LDAP:// " & path1 & path2)
Set oOU=oDomain.Create("organizationalUnit","ou=" & OU)
oOU.Put "Description", "Отдел автоматизации"
oOU.SetInfo

Set oGroup = GetObject("LDAP:// CN=Domain Admins, CN=users, DC=test,DC=loc")
Set oGroup = oOU.Create("Group", "cn=" & CNG)
oGroup.Put "sAMAccountName", "Domain Admin"
oGroup.Put "Description", "Domain Admin"
oGroup.SetInfo

Set oUser = oDomain.Create("User", "cn=" & CNU)

Set oUser = oOU.Create("User", "cn=" & CNU)
oUser.Put "sAMAccountName", Login
oUser.Put "Description", Lastname & Firstname & Secondname
oUser.Put "telephoneNumber", Tel
oUser.Put "department", OU
oUser.Put "UserPrincipalName", "Василий Рылов"
oUser.Put "GivenName", FirstName
oUser.Put "sn", Lastname
oUser.SetInfo

oUser.SetPassword "123qwe$"

oUser.AccountDisabled = False
oUser.SetInfo

oGroup.Add oUser.ADSPath


Добавлено:
Помогите мне со скриптиком плиз.
Ситуация: сервер win2k3, клиент XP. Клент меняет пароль входа в домен.
Вопрос: как на серверной стороне прехватить смену пароля, перехвыатить сам пароль ( дальше я его записываю в БД).
Автор: serstr
Дата сообщения: 27.04.2006 09:07

Цитата:
Automating Exchange 2000 Management with Windows Script Host
How to set Exchange Server 2000 and 2003 mailbox rights at the time of mailbox creation
How to Create a User's Mailbox with VBScript


А поповоду этих ссылок примного благодарен!
ОГРОМНОЕ сенкс

Добавлено:
freeek
Спасибо за пример!
Автор: FreemanRU
Дата сообщения: 27.04.2006 09:59
freeek

Цитата:
, перехвыатить сам пароль ( дальше я его записываю в БД).

?????????????????
Мдя, товариСЧи... всё прогрессивное человечество борется как бы пароли спрятать и зашифровать и тут нате вам.. в БД храним... ты осознаешь, что это дыра в безопасности неимоверных размеров?
Да, забыл написать - то что ты хочешь не возможно. Можно перехватывать только сам факт смены пароля.
Автор: urel
Дата сообщения: 27.04.2006 10:14
eldo
Всетаки это не чистая реализация NetBIOS нужно смотреть на его транспорт и думать как присечь. Но он уже устарел и наверно нигде не используется.

Sk1f
я обычно так "отрезаю"

Цитата:
s="cn=wert,ou=www,dn=d1,dn=d2"
s=Right(s,Len(s)-InStr(s,","))


freeek
зачем хранить чужие пароли - когда можно в любой момент его изменить при необходимости? да и нельзя наверно так... только если сделать какой вэб форм для этих целей и запретить пользователям самим менять пароли =)

FreemanRU
предлагаю забить в шапку приведенные тобой ссылки

и еще - для того чтобы это все работало из сети на компе должны быть установлены Management Tools чугунка
Автор: freeek
Дата сообщения: 27.04.2006 10:47
Я понимаю что это дыра Пароль в БД храниться чтоб его можно было востановить. А со сменой пароля мне препод сказал чтонить придумать, вот и мучаюсь
Автор: FreemanRU
Дата сообщения: 27.04.2006 11:02
freeek
НЕЛЬЗЯ в AD восстанавлвать пароли. Н-Е-Л-Ь-З-Я. Пароль везде хранится в зашифрованном виде, без возможноти дешифровки, и реально передается только один раз - при его установке и опять же шифруется при пересылке. Далее вместо пароля используется его хэш. Т.е. клиент вводит пароль, но сам пароль никуда ен уходит, а уходит его хэш. Сервер (пусть это сразу будет DC) получает этот хэш, берет хэш пароля из своей базы, сравнивает с тем, что и пришел, и если они совпадают - то пароль принимается.
Так что перехватить пароль не получится. Может ты как-то не так понял задание?
Автор: urel
Дата сообщения: 27.04.2006 11:03
Пароль можно всегда сбросить, перехватить нельзя...
если сильно прет можно попробовать нарисовать форму на асп где пользователи должны вводить логин пароль 2 раза новый, и уже имея эту инфу твой скрипт меняет им пароль, полключаться есесно по ссл.
Автор: freeek
Дата сообщения: 27.04.2006 11:23
цитата из письма:"По поводу смены паролей. Один из вариантов - пользователь меняет пароль. В некоторый файл закидывается лог смены пароля. Какая-то отдельная программка по расписанию считывает лог и обновляет базу."
я знаю как храняться пароли как передаються , чем различаеться LM хэш от NT, знаю что востановить пароль не льзя из АК, но... надо зделать систему востановления пароля как на почтовых серверах.
Автор: urel
Дата сообщения: 27.04.2006 12:01
я так понял эта канитель должена работать для студентов или, всетаки, на предприятии?
тебе задачу не корректно поставили...

Добавлено:
как можно получить вывод внешней программы
а то приходиться запускать таким образом

cmd = "cmd /c """"" & SHAPath & """ " & inFile & " > """ & tmp2 & """"""

а потом считывать tmp2, геморно немного

Добавлено:
Как произвести запись в таблицу sql данные из файла, да и вобще просто как... HELP =)
Автор: Sk1f
Дата сообщения: 28.04.2006 10:18
FreemanRU А можешь пояснить вот эту строчку:
Set CurObject = SetObjectFromDomain() - здесь должен указываьбся адрес объекта в скобках? или что?




Добавлено:
Пробовал в msdn покапаться но нчиего такого не нашел
Автор: FreemanRU
Дата сообщения: 28.04.2006 10:26
Sk1f

Цитата:
Пробовал в msdn покапаться но нчиего такого не нашел


И не найдешь.

Цитата:
SetObjectFromDomain()

Это я просто не расписывал. Эти виртуальная функция, которая должна получать объект из домена. Её код может быть любой. Да и функции может не быть, просто всё сплошных тесктом. Главное то, что в итоге в CurObject должен быть объект из домена.

Добавлено:
freeek

Цитата:
систему востановления пароля как на почтовых серверах

Скажу по серету - там тоже пароль восстановить нельзя, если это более-менее серьзеный продукт.

Ну а если надо, то сделац как предложили - смена пароля только через скрипт, в этом же скрипте заносим пароль в базу. Такой вариант устроит?
Автор: Sk1f
Дата сообщения: 28.04.2006 10:29
пля :-D я еще думал что так, но решил сначала спросить

Добавлено:
Сейчас сидел анализировал и вдруг столкнулся с такой проблемой - смотри ситуация когда группа вложена в группу и получится что ты заменишь cn на , и у тебя полуится путь: ",,ou=test,dc=test,dc=ru"

Но вот если заменить "cn=" на "" (пустое место) но тогда нормально будет отображаться путь или нет?

Добавлено:
urel, метод Freemanа мне больше подходит, потому как у меня есть такие элементы, когда группы вложенны друг в друга - Global в Globale. И тогда в твоем способе прийдется отслеживать еще и длину, к-ю нужно отрезать, чтобы выделить только адрес OU.

Но другое дело:
disName = obj.distinguishedname
pathG = disName.Replace("CN=" & obj.cn & ",","")

Я вот так заменил все cn на пустые места, но как отобразить это?

Вопрос глупый, но я сегодня с утра туплю и пытаюсь понять, что я не правильно испольую в WSCript.Echo и почему он ничего не отображает
Автор: FreemanRU
Дата сообщения: 28.04.2006 13:33
Sk1f

Код:
strCN = "Group1"
strDN = "CN=Group1,OU=Groups,DN=domain,DN=local"
strOU = Replace(strDN,"CN="&strCN&",","")
WScript.Echo "CN="&strCN
WScript.Echo "DN="&strDN
WScript.Echo "Path="&strOU
Автор: Sk1f
Дата сообщения: 28.04.2006 13:58
очень туплю... можно два поста последних удалить
Автор: Vpsem
Дата сообщения: 28.04.2006 21:17
Есть следующая задача:
Нужно пинговать подсети путем тупого перебора IP, при этом, по возможности определять имена хостов.
Есть следующее решение:
start.cmd:

Цитата:

for /l %%I in (1,1,255) do call sping.cmd %%I
sping.vbs

sping.cmd:

Цитата:

ping -a -n 1 213.180.204.%1 >> ping.txt

sping.vbs:

Цитата:

dim Ip(1000)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile1 = objFSO.OpenTextFile("ping.txt", 1)
Set objFile2 = objFSO.CreateTextFile("IpScan.txt")
i = 0
StrItem1 = ""
StrItem2 = ""
StrItem3 = ""
Do Until objFile1.AtEndOfStream
Ip_Exists = False
IF StrItem2 <> Chr(13) AND Len(StrItem2) <> 0 Then
StrItem1 = StrItem2
End IF
StrItem2 = objFile1.ReadLine()
IF InStr(StrItem2,"Reply") <> 0 _
OR InStr(StrItem2,"ЋвўҐв") <> 0 _
Then
StrItem1 = Right(StrItem1,Len(StrItem1)-InStr(StrItem1," "))
'нужно если пинг русский StrItem1 = Right(StrItem1,Len(StrItem1)-InStr(StrItem1," "))
'нужно если пинг русский StrItem1 = Right(StrItem1,Len(StrItem1)-InStr(StrItem1," "))
StrItem1 = Left(StrItem1,InStr(StrItem1," "))
StrItem2 = Right(StrItem2,Len(StrItem2)-InStr(StrItem2," "))
StrItem2 = Right(StrItem2,Len(StrItem2)-InStr(StrItem2," "))
StrItem2 = Left(StrItem2,InStr(StrItem2,":")-1)
StrItem3 = StrItem2 + " " + StrItem1
For Each Str in Ip
IF Str = StrItem3 Then Ip_Exists = True
Next
IF Not Ip_Exists Then Ip(i) = StrItem3: i=i+1
End IF
Loop

For Each StrItem in Ip
IF NOT IsEmpty(StrItem) Then objFile2.WriteLine(StrItem)
Next

objFile1.Close()
objFile2.Close()



Получаем р-т в виде

Цитата:

213.180.204.7 charts.yandex.ru
213.180.204.8 ya.ru
213.180.204.9 cards.yandex.ru
213.180.204.10 sp-money.yandex.ru


Вопрос в следующем: что д.б. поднято в локалке что бы команда ping -a -n 1 x.x.x.x возвращала имена хостов. У меня в сети с доменом возвращает, в сети без домена нет.
Автор: FreemanRU
Дата сообщения: 29.04.2006 14:13
Vpsem
Лучше пользуй nbtstat -A IP, если сеть не сегментована.
Или nslookup, если есть ДНС
Автор: Vpsem
Дата сообщения: 29.04.2006 17:21
FreemanRU
по поводу nbtstat
- он в результаты не выводит тот IP который обрабатывается,
- у меня 192.168.0.1 - linux, на ping отвечает на nbtstat нет
- nbtstat дольше работает
- сложнее распарсить
Автор: Garik_Lugansk
Дата сообщения: 30.04.2006 15:35
Здраствуйте. Есть скрипт DSIP.vbs

Dim objWshShell

Set objWshShell = CreateObject("WScript.Shell")

objWshShell.Run "D:\Games\Lineage II\DSIP.bat", 0, false

Не видит путь к файлу. Как решить проблему с пробелом. Переименовывать папку нельзя.

Автор: Vpsem
Дата сообщения: 30.04.2006 21:38
Garik_Lugansk
objWshShell.Run """D:\Games\Lineage II\DSIP.bat""", 0, false
Автор: Tiristor
Дата сообщения: 01.05.2006 17:12
Vpsem
замени "ping -a" на "nslookup"
и парсить не сложно, и ответы гарантированные..
а "ping -a" гарантированно заставить работать в сети без доменов сложно..
Автор: Vpsem
Дата сообщения: 02.05.2006 00:02
Tiristor nslookup с каким параметром?
Автор: Sk1f
Дата сообщения: 02.05.2006 12:53
Есть список организаций
Нужен скрипт, который смог бы извлечь из него названия только те в которых есть " ПР".

Или нужна чисто функциональная часть, а не весь скрипт
Автор: serstr
Дата сообщения: 02.05.2006 16:14
Такая вот проблема.
Тут ранее был описан скрипт for Excel для получения информации из АД. Вот такой (для mail):

Sub getuserinfo()
Cells.Clear

Set objConnection = CreateObject("ADODB.Connection")
objConnection.provider = "ADsDSOObject"
objConnection.Open ("Active Directory Provider")

CommandText = "Select cn, name, mail"
CommandText = CommandText + " from 'LDAP://DC=main,DC=blrt'"
CommandText = CommandText + " where objectClass='person' and objectClass<>'computer'"
CommandText = CommandText + " ORDER BY cn"

Set objRecordset = CreateObject("ADODB.Recordset")
objRecordset.Open CommandText, objConnection

n = 1
While Not objRecordset.EOF
Cells(n, 1).Value = objRecordset.fields("cn").Value
Cells(n, 2).Value = objRecordset.fields("Name").Value
Cells(n, 3).Value = objRecordset.fields("mail").Value
objRecordset.MoveNext
n = n + 1
Wend
End Sub




Подскажите, как его переделать чтобы он вытаскивал информацию о том в каких группах состоит юзер и записывал их в ячейки. (Юзер одновременно находится в нескольких группах)
Автор: FreemanRU
Дата сообщения: 02.05.2006 17:06
serstr
objRecordset.fields("memberOf") содержит в себе массив CN групп, в которых состоит пользователь.
Автор: serstr
Дата сообщения: 03.05.2006 08:56
FreemanRU СПАСИБО!

А как сделать так чтобы он каждую группу записывал в отдельную ячейку?
Я написал вот так, но там есть несовпадения объектов Object required (Error 424)

Sub getuserinfo()
Cells.Clear

Set objConnection = CreateObject("ADODB.Connection")
objConnection.provider = "ADsDSOObject"
objConnection.Open ("Active Directory Provider")

CommandText = "Select cn, name, memberOf"
CommandText = CommandText + " from 'LDAP://DC= DOM ,DC=com'"
CommandText = CommandText + " where objectClass='person' and objectClass<>'computer'"
CommandText = CommandText + " ORDER BY cn"

Set objRecordset = CreateObject("ADODB.Recordset")
objRecordset.Open CommandText, objConnection

n = 1
m = 3
While Not objRecordset.EOF
Cells(n, 1).Value = objRecordset.fields("cn").Value
Cells(n, 2).Value = objRecordset.fields("Name").Value

For Each strGroup In objRecordset.fields("MemberOf").Value
strGroupPath = "LDAP://" & strGroup
Set objGroup = GetObject(strGroupPath)
strGroupName = objGroup.CN
Cells(n, m).Value = strGroupName.Value - ошибка ТУТ !
m = m + 1
Next
objRecordset.MoveNext
n = n + 1
Wend
End Sub

Добавлено:
Спасибо большое!
Разобрался сам

Sub getuserinfo()
Cells.Clear

Set objConnection = CreateObject("ADODB.Connection")
objConnection.provider = "ADsDSOObject"
objConnection.Open ("Active Directory Provider")

CommandText = "Select cn, name, memberOf"
CommandText = CommandText + " from 'LDAP://DC=DOM,DC=com'"
CommandText = CommandText + " where objectClass='person' and objectClass<>'computer'"
CommandText = CommandText + " ORDER BY cn"

Set objRecordset = CreateObject("ADODB.Recordset")
objRecordset.Open CommandText, objConnection

n = 2

While Not objRecordset.EOF
Cells(n, 1).Value = objRecordset.fields("cn").Value
Cells(n, 2).Value = objRecordset.fields("Name").Value
m = 3
Cells(1, 2).Value = objRecordset.fields("MemberOf").Value
If Cells(1, 2).Value = "" Then GoTo 12
For Each strGroup In objRecordset.fields("MemberOf").Value
strGroupPath = "LDAP://" & strGroup
Set objGroup = GetObject(strGroupPath)
strGroupName = objGroup.CN

Cells(n, m).Value = strGroupName
m = m + 1
Next
12: objRecordset.MoveNext
n = n + 1
Wend
End Sub
Автор: FreemanRU
Дата сообщения: 03.05.2006 10:04
serstr

Цитата:
Cells(n, m).Value = strGroupName.Value

Дык по идеи так:

Код:
Cells(n, m).Value = strGroupName

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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