Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Автоматизация администрирования. Часть 2

Модерирует : lynx, Crash_Master, dg, emx, ShriEkeR

ShriEkeR (23-05-2011 23:06): Автоматизация администрирования. Часть 3  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114

   

FreemanRU



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
 

                               Коллеги-администраторы  ....  


Часть 2я

Часть 1
Думаю каждый из вас сталкивался с необходимостью выполнять некие несложные рутинные операции, на котороые уходит много драгоценного времени.
 Например, создать определенную структуру каталогов для каждого пользователя домена, изменить некие параметры в профилях всех или части пользователей, изменить полномочия/владельца однотипных файлов в разных каталогах т.д.  
Я, как сисадмин, тоже не раз был вынужден делать все это.  Руками делать это тоскливо и муторно, как вы понимаете. Должен заметить, что по неким "религиозным" убеждениям я всегда старался избегать любых отношений с бейсиком и его производными. Еще мой отец учил меня не иметь с ним никаких дел. Буквально. А теперь я учу своего сына тому же. Но, тем не менее, полностью избежать этого, по всей видимости, невозможно, тем более, что бейсик от M$ сейчас уже далеко не та "лапша", которой он был изначально, а современный структурированный язык, нашедший множество применений. Похоже, что для меня в очередной раз настала пора выучить еще что-то. Знаете, как курильщик много раз безуспешно пытается бросить курить, так и я не раз пытался подступиться к изучению VBScript, но пока никак не одолел. Лень, знаете ли. А инструмент в делах административных был бы весьма пользительный, должен заметить, для быстрого написания всякого рода скриптов.

 
    Внимание   !  !  !  

  • Поскольку данный топ весьма не мал, не забывайте  использовать "версию для печати" для более удобного поиска по теме. А также МЕГА ПОИСКОВИК от NEPa

  • Дабы не раздувать топ,  примеры своих  скриптов  заключаем в тег  "more"

Консольные команды. Командный интерпретатор

Windows Script Host (WSH) &  VBScript  &  JScript


Вышеперечисленные буки можно  взять здесь

    ТOOLS :
  1. Autoit+readme.rus
  2. Scriptologic
  3. AutoMate
  4. KIXTART
  5. nnCron-Планировщик с поддержкой скриптового языка --  РЕКОМЕНДУЮ
  6. WGET, GREP, GETMAIL, BLAT for Windows замечательные консольные утилиты
  7. 4dos/4nt -- отличная замена стандартного коммандного интерпретатора  
  8. JudoScript - java подобный скриптовый язык с исходниками
  9. VBS2EXE - утилита для компиляции vbs и js скриптов в exe выдранная из пакета PrimalScript

    Дружественные темы :
  1. Автоматическая (unattended) установка Windows
  2. Интересные команды при работе с Linux
  3. Отличный сайт по скриптингу, и не только
  4. Использование KIX
  5. Использование WMI
  6. Программирование "удобняшек" на VBScript

 
Подробнее...
Создается по материалам данного топа

 
Надеюсь данная тема будет полезна для Вас.
 Предложения по реформированию шапки принимаю в ПМ Jovanotti

 

Всего записей: 3794 | Зарегистр. 16-07-2004 | Отправлено: 17:27 11-12-2006 | Исправлено: Smitis, 12:30 20-08-2008
cluster

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
$strFilter = "user"  
   
$Domain = [adsi]"LDAP://OU=MyOU, DC=fabrikam, DC=com"  
$Searcher = New-Object System.DirectoryServices.DirectorySearcher  
$Searcher.SearchRoot = $Domain  
$Searcher.SearchScope = "Subtree"  
$Searcher.PageSize = 1000  
 
$Searcher.Filter = "(objectCategory=$strFilter)"  
 
$s = ""  
 
$Searcher.FindAll() | ForEach-Object -Process {  
    $Entry = $_.GetDirectoryEntry()  
    $s += $Entry.sAMAccountName + ";" + $Entry.Name + ";" + $Entry.Department + "`n"  
}  
Out-File -filepath users.txt -inputobject  $s

Скрипт создания списка пользователей из АД на Power Shell.
Не работает у меня, уже не помню ошибки. Но хотелось бы тоже самое на vbs.

Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 09:11 12-12-2007
Etalon

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
cluster
Могу предположить, что ошибка в строке
$Domain = [adsi]"LDAP://OU=MyOU, DC=fabrikam, DC=com"

Всего записей: 306 | Зарегистр. 03-02-2006 | Отправлено: 19:02 12-12-2007
cluster

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Etalon
Не-не, не дурак. Всё поправлено под свои нужды.

Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 19:59 12-12-2007
FreemanRU



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
cluster

Код:
 
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
Set LogFile=FSO.CreateTextFile("userlist.txt",true)
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.CommandText = _
"Select Name, sAMAccountName, Department from 'LDAP://OU=MyOU, DC=fabrikam, DC=com' " _
& "where objectCategory='user'"  
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Timeout") = 30  
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE  
objCommand.Properties("Cache Results") = False  
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
 
Do Until objRecordSet.EOF
 LogFile.WriteLine(objRecordSet.Fields("Name").Value&";"&objRecordSet.Fields("sAMAccountName").Value&";"&objRecordSet.Fields("department").Value)
 
objRecordSet.MoveNext
Loop
 


----------
Если не получается с первого раза - прочти инструкцию. (с)
"Откуда нам знать, что такое война, если мы не знаем мира..."(с)
Записки

Всего записей: 3794 | Зарегистр. 16-07-2004 | Отправлено: 22:59 12-12-2007
cluster

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FreemanRU
Оо, здорово! Всё прекрасно работает.
 
А как сохранять этот файл в DOS кодировке?

Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 14:02 13-12-2007
FreemanRU



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
cluster

Цитата:
А как сохранять этот файл в DOS кодировке

"Этот файл" - подразумевается выходной? Если да, то замени строку  

Код:
 
LogFile.WriteLine(objRecordSet..................
 

на

Код:
 
WScript.Echo(objRecordSet..................
 

, удали первые две строки и запускай его вот так:
Win+R, cmd:

Код:
cscript //nologo scriptname.vbs > userslist.txt


----------
Если не получается с первого раза - прочти инструкцию. (с)
"Откуда нам знать, что такое война, если мы не знаем мира..."(с)
Записки

Всего записей: 3794 | Зарегистр. 16-07-2004 | Отправлено: 14:22 13-12-2007
Sun Ray

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Какие альтернативы ест в винде линуксевому diff'у?

Всего записей: 461 | Зарегистр. 17-03-2006 | Отправлено: 15:21 18-12-2007
cluster

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нашёл вот такой вот скриптик

Код:
strGroupDN = "<GroupDN>"  ' e.g. cn=SalesGroup,ou=Groups,dc=rallencorp,dc=com
strMemberDN = "<MemberDN>" ' e.g. cn=jsmith,cn=users,dc=rallencorp,dc=com
 
set objGroup = GetObject("LDAP://" & strGroupDN)
' Add a member
objGroup.Add("LDAP://" & strMemberDN)

И есть простой txt-список пользователей, которых нужно добавить скопом в одну группу. Как бы это сделать поавтоматически?
 
FreemanRU

Цитата:
cscript //nologo scriptname.vbs > userslist.txt  

Сделал так. Пасиба.

Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 16:50 18-12-2007
cluster

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Раз никто не знает, тогда другой вопрос.
Как вытащить "destiguishedName" для каждого пользователя?
Скрипт выше вытаскивает sAMAccountName, Name.. а вот с destiguishedName не работает.

Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 10:02 20-12-2007
FreemanRU



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
cluster
Может все-таки distinguishedName
cluster

Цитата:
есть простой txt-список пользователей

Что в файле? account или полный путь?

----------
Если не получается с первого раза - прочти инструкцию. (с)
"Откуда нам знать, что такое война, если мы не знаем мира..."(с)
Записки

Всего записей: 3794 | Зарегистр. 16-07-2004 | Отправлено: 11:51 20-12-2007
cluster

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FreemanRU

Цитата:
Может все-таки distinguishedName  
Да. Это я тут описАлся.
 

Цитата:
Что в файле? account или полный путь?
DisplayName
 
Вот есть скрипт, который добавляет в указаную группу массив пользователей. Но используется distinguishedName. Вот если бы Domain\logon хотя бы..
 

Код:
set objGroup = GetObject("LDAP://" & strGroup1)  
Const ADS_PROPERTY_APPEND = 3  
 
objGroup.PutEx ADS_PROPERTY_APPEND, _  
    "member", Array("CN=Богданова Мария Владимировна,OU=Автосалоны,OU=Персонал,DC=domain,DC=ru", _  
       "CN=Богидаева Жанна Радиславовна,OU=Автострахование,OU=Персонал,DC=domain,DC=ru")
 
if err.number<>0 then
    wscript.echo "Error adding to group " & err.number, err.description  
    err.Clear  
end if  
 
objGroup.setInfo

Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 12:12 20-12-2007
FreemanRU



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
cluster
1й вариант:
1. Читаем файл по строке
2. Формируем из прочитанных строк запрос вида "..... where DisplayName='user1' or тут была ошибка в логике DisplayName='user2'.......",  
3. выполняем
4. создаем массив CN-нок,  
5. запускаем команду, что ты выше указал
Вариант 2й
1. Читаем файл по строке
2. Для каждой строки запускаем запрос ".... where DisplayName='user1'" и добавляем в один массив
и далее, как вариант 1.
 

Цитата:
Как вытащить "destiguishedName" для каждого пользователя


Код:
 
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")  
Set LogFile=FSO.CreateTextFile("userlist.txt",true)  
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.CommandText = _  
"Select Name, sAMAccountName, distinguishedName, Department from 'LDAP://OU=MyOU, DC=fabrikam, DC=com' " _  
& "where objectCategory='user'"  
objCommand.Properties("Page Size") = 1000  
objCommand.Properties("Timeout") = 30  
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE  
objCommand.Properties("Cache Results") = False  
Set objRecordSet = objCommand.Execute  
objRecordSet.MoveFirst  
 
Do Until objRecordSet.EOF  
LogFile.WriteLine(objRecordSet.Fields("Name").Value&";"&objRecordSet.Fields("sAMAccountName").Value&";"&objRecordSet.Fields("department").Value&";"&objRecordSet.Fields("distinguishedName").Value)
 
objRecordSet.MoveNext  
Loop  
 


----------
Если не получается с первого раза - прочти инструкцию. (с)
"Откуда нам знать, что такое война, если мы не знаем мира..."(с)
Записки

Всего записей: 3794 | Зарегистр. 16-07-2004 | Отправлено: 13:00 20-12-2007 | Исправлено: FreemanRU, 14:23 20-12-2007
cluster

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FreemanRU

Цитата:
objCommand.CommandText = _  
"Select Name, sAMAccountName, distinguishedName, Department from 'LDAP://OU=MyOU, DC=fabrikam, DC=com' " _  
& "where objectCategory='user'"    

оо, госпади.. я же это видел!  
 
Я пока всё ручками сделал. Это оказалось быстрее. Тупо вставляешь всех этих пользователей скопом в диалог добавления пользователя в группу и готово.
Но на будущее всё пригодится. Спасибо за помощь.

Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 22:00 20-12-2007
FreemanRU



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
cluster

Цитата:
оо, госпади.. я же это видел!  

не понял...это ты к чему?

----------
Если не получается с первого раза - прочти инструкцию. (с)
"Откуда нам знать, что такое война, если мы не знаем мира..."(с)
Записки

Всего записей: 3794 | Зарегистр. 16-07-2004 | Отправлено: 00:15 21-12-2007
cluster

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FreemanRU
Да просто забыл добавить нужный параметр в ту строку

Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 10:11 21-12-2007
north_crow

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
может кому пригодится...
скрипт установки обоев для юзеров. можно конечно через ГПО выставить - но мне не нравиться этот способ, т.к. пользователь потом не может сменить обои и еще экран не всегда обновляется и у пользователя или экран без картинки или часть картинки.
а этот скрипт делает все коректно.
скрипт наполовину мой, на половину с инета
 

Код:
 
'==========================================================================
'
' Копируем на комп и устанавливаем обои
'
'==========================================================================
 
On Error Resume Next
' имя файла обоев
FileName = "wallpaper.bmp"
Const OverwriteExisting = True
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("Wscript.Shell")
' заносим в Folder путь к папке профиля пользователя
Folder = WshShell.ExpandEnvironmentStrings("%UserProfile%")
' копируем обои на комп
objFSO.CopyFile "\\shares\" & FileName , Folder & "\", OverwriteExisting
' записываем в реестр имя файла обоев
WshShell.RegWrite "HKCU\Control Panel\Desktop\Wallpaper", Folder & "\" & FileName  
' ставим значение растянуть на весь экран
WshShell.RegWrite "HKCU\Control Panel\Desktop\WallpaperStyle", "2"
WshShell.RegWrite "HKCU\Software\Microsoft\Internet Explorer\Desktop\General\BackUpWallpaper", Folder & "\" & FileName  
WshShell.RegWrite "HKCU\Software\Microsoft\Internet Explorer\Desktop\General\Wallpaper", Folder & "\" & FileName  
' обновляем экран
WshShell.Run "%SystemRoot%\System32\RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters", 1, False
 

Всего записей: 172 | Зарегистр. 04-12-2002 | Отправлено: 14:50 22-12-2007
snayper7



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
north_crow
нет, который каждый день рандомно выставляет обои?

Всего записей: 1088 | Зарегистр. 18-07-2006 | Отправлено: 19:11 22-12-2007
north_crow

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
snayper7
подправь мой скрипт таким образом...
убери копирование файла обоев с сервака на машины
создай масив обоев на доступном для пользователей ресурсе
и через randomize подставляй имя файла

Всего записей: 172 | Зарегистр. 04-12-2002 | Отправлено: 19:49 22-12-2007
se111



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
помогите с задачкой.
есть текстовый файл
1) найти часть слова в файле и удалить всё слово
 например <field GUID="ALKSJDASDLJKH" name="name here"> найдя guid удалить GUID="ALKSJDASDLJKH"
2) найдя часть слова заменить всё слово(разделителем в данном случае выступает пробел) указанным  например:
<dlc ac="865A1401F77D5801FC0064002700" >
найдя слово ac= заменить ac="статистика"
 
строку удалить и заменить нашел как - нужна теперь махинация со словами.
очень на вас надеюсь.
 
 
нашел единственное что вроде бы около моей задачи, но никак допетрить не могу как выполнить то что мне надо
 
Dim UserKey
 
....
 
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Documents and Settings\MyAccount\Desktop\index.php", 1)
 
strText = objFile.ReadAll
objFile.Close
 
Set regexp = CreateObject("VBScript.RegExp")
regexp.Global = True
regexp.IgnoreCase = True
regexp.Pattern = "$UserKey = .0123456789101-.........."
 
Set matches = regexp.Execute(strText)
For Each m In matches
strText = Replace(strText, UserKey)
Next
MsgBox strText
 
Set objFile = objFSO.OpenTextFile("C:\Documents and Settings\MyAccount\Desktop\index.php", 2)
objFile.Write strText
objFile.Close
 
взято тут
http://www.xtremevbtalk.com/archive/index.php/t-240406.html

Всего записей: 782 | Зарегистр. 21-04-2005 | Отправлено: 19:39 24-12-2007 | Исправлено: se111, 21:24 24-12-2007
hamet2000

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
скажите как добавить событие с типом "Ошибка" в нужный мне лог например "Scripts"  
В скрипт центре нашел  
 Set WshShell = WScript.CreateObject("WScript.Shell")
 
strCommand = "eventcreate /T Error /ID 100 /L Scripts /D " & _
    Chr(34) & "Test event." & Chr(34)
WshShell.Run strcommand
    все работает, вот только не пойму как сделать тип события "ошибка" ключ вроде \T ERROR стоит а все равно в журнале событие типа "Уведомление"

Всего записей: 57 | Зарегистр. 21-12-2005 | Отправлено: 11:16 26-12-2007
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114

Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Автоматизация администрирования. Часть 2
ShriEkeR (23-05-2011 23:06): Автоматизация администрирования. Часть 3


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru