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

» Автоматизация администрирования. Часть 2

Автор: cluster
Дата сообщения: 12.12.2007 08:11

Цитата:
$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.
Автор: Etalon
Дата сообщения: 12.12.2007 18:02
cluster
Могу предположить, что ошибка в строке
$Domain = [adsi]"LDAP://OU=MyOU, DC=fabrikam, DC=com"
Автор: cluster
Дата сообщения: 12.12.2007 18:59
Etalon
Не-не, не дурак. Всё поправлено под свои нужды.
Автор: FreemanRU
Дата сообщения: 12.12.2007 21:59
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
Автор: cluster
Дата сообщения: 13.12.2007 13:02
FreemanRU
Оо, здорово! Всё прекрасно работает.

А как сохранять этот файл в DOS кодировке?
Автор: FreemanRU
Дата сообщения: 13.12.2007 13:22
cluster

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

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

Код:
LogFile.WriteLine(objRecordSet..................
Автор: Sun Ray
Дата сообщения: 18.12.2007 14:21
Какие альтернативы ест в винде линуксевому diff'у?
Автор: cluster
Дата сообщения: 18.12.2007 15:50
Нашёл вот такой вот скриптик

Код: 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)
Автор: cluster
Дата сообщения: 20.12.2007 09:02
Раз никто не знает, тогда другой вопрос.
Как вытащить "destiguishedName" для каждого пользователя?
Скрипт выше вытаскивает sAMAccountName, Name.. а вот с destiguishedName не работает.
Автор: FreemanRU
Дата сообщения: 20.12.2007 10:51
cluster
Может все-таки distinguishedName
cluster

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

Что в файле? account или полный путь?
Автор: cluster
Дата сообщения: 20.12.2007 11:12
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
Автор: FreemanRU
Дата сообщения: 20.12.2007 12:00
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
Автор: cluster
Дата сообщения: 20.12.2007 21:00
FreemanRU

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

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

Я пока всё ручками сделал. Это оказалось быстрее. Тупо вставляешь всех этих пользователей скопом в диалог добавления пользователя в группу и готово.
Но на будущее всё пригодится. Спасибо за помощь.
Автор: FreemanRU
Дата сообщения: 20.12.2007 23:15
cluster

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

не понял...это ты к чему?
Автор: cluster
Дата сообщения: 21.12.2007 09:11
FreemanRU
Да просто забыл добавить нужный параметр в ту строку
Автор: north_crow
Дата сообщения: 22.12.2007 13:50
может кому пригодится...
скрипт установки обоев для юзеров. можно конечно через ГПО выставить - но мне не нравиться этот способ, т.к. пользователь потом не может сменить обои и еще экран не всегда обновляется и у пользователя или экран без картинки или часть картинки.
а этот скрипт делает все коректно.
скрипт наполовину мой, на половину с инета


Код:
'==========================================================================
'
' Копируем на комп и устанавливаем обои
'
'==========================================================================

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
Автор: snayper7
Дата сообщения: 22.12.2007 18:11
north_crow
нет, который каждый день рандомно выставляет обои?
Автор: north_crow
Дата сообщения: 22.12.2007 18:49
snayper7
подправь мой скрипт таким образом...
убери копирование файла обоев с сервака на машины
создай масив обоев на доступном для пользователей ресурсе
и через randomize подставляй имя файла
Автор: se111
Дата сообщения: 24.12.2007 18:39
помогите с задачкой.
есть текстовый файл
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
Автор: hamet2000
Дата сообщения: 26.12.2007 10:16
скажите как добавить событие с типом "Ошибка" в нужный мне лог например "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 стоит а все равно в журнале событие типа "Уведомление"
Автор: hamet2000
Дата сообщения: 27.12.2007 10:35
не пойму как с помощью vbs поменять нужную мне строку, например 4ю в txt файле?
Автор: jONES1979
Дата сообщения: 27.12.2007 20:52
hamet2000 ну а что понимаешь в vbs? а как построчно файл прочитать понимаешь?
Автор: veryom
Дата сообщения: 27.12.2007 21:47
hamet2000

Цитата:
не пойму как с помощью vbs поменять нужную мне строку, например 4ю в txt файле?

Нужно именно четвертую? А если просто найти и заменить? Например, так:
Код: Const ForReading = 1
Const ForWriting = 2

strFileName = Wscript.Arguments(0)
strOldText = Wscript.Arguments(1)
strNewText = Wscript.Arguments(2)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFileName, ForReading)

strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, strOldText, strNewText)

Set objFile = objFSO.OpenTextFile(strFileName, ForWriting)
objFile.WriteLine strNewText
objFile.Close
Автор: 5555555
Дата сообщения: 27.12.2007 21:56
veryom
а если содержимое 4-ой строки = части 8-ой строки, которую не надо править?
это я так, придираюсь - шутю.. ))
Автор: veryom
Дата сообщения: 27.12.2007 22:15
5555555

Цитата:
а если содержимое 4-ой строки = части 8-ой строки, которую не надо править?


Цитата:
Replace(expression, find, replacewith[, start[, count[, compare]]])

start
Optional. Position within expression where substring search is to begin. If omitted, 1 is assumed. Must be used in conjunction with count.

count
Optional. Number of substring substitutions to perform. If omitted, the default value is -1, which means make all possible substitutions. Must be used in conjunction with start.

В вышеприведенном скрипте заменятся все вхождения подстроки, но, можно поставить count=1, тогда в 8 строке замены не будет. В общем, можно играться параметрами. В конце-концов, можно тупо перебрать все строки файла, одну за одной, записывая новый файл.
Автор: crazy_dead
Дата сообщения: 29.12.2007 11:28
Всех с наступающим!

Спецы, прошу помощи. Тривиальная задачка: внести изменение в реестр на всех тачках в сети Netware. Ессно, все юзеры не имеют админских прав. Так вот именно это и мешает мне ее решить. Как изменить реестр Виндовс из-под пользователя?
Автор: 5555555
Дата сообщения: 29.12.2007 17:10

Цитата:
реестр Виндовс из-под пользователя

смотря какую его ветвь, если пользовательскую - придумывать ничего и не надо..
Автор: veryom
Дата сообщения: 01.01.2008 11:32
crazy_dead

Цитата:
Тривиальная задачка: внести изменение в реестр на всех тачках в сети Netware. Ессно, все юзеры не имеют админских прав. Так вот именно это и мешает мне ее решить. Как изменить реестр Виндовс из-под пользователя?

Создаем скрипт, который должен делать следующее:Проверить доступность машины, например, при помощи пинга.Если коннект есть, то подсоединиться к машине и изменить нужную ветку реестра.Повторить предыдущие пункты по числу машин в сети.В сети Windows AD я бы запускал скрипт под доменной учетной записью, имеющей права локального администратора на машинах сети.

Пример того, что можно делать в цикле:
Код: Const HKEY_LOCAL_MACHINE = &H80000002

strComputer = "<сюда нужно подставлять имена или IP-адреса машин>"

Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\default:StdRegProv")

strKeyPath = "SOFTWARE\System Admin Scripting Guide"
strValueName = "String Value Name"
strValue = "string value"
oReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue

strValueName = "DWORD Value Name"
dwValue = 82
oReg.SetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,dwValue
Автор: crazy_dead
Дата сообщения: 09.01.2008 10:18
5555555

HKLM/Software
Автор: mistx
Дата сообщения: 10.01.2008 15:32
veryom

Цитата:
сюда нужно подставлять имена или IP-адреса машин

1.указывать машины через запятую ?
2. Если нужно изменить несколько значений в одном ключе, например сделать автологон на всех машинах в домене, то просто можно добавить несколько strValue?

Цитата:
dwValue = 82

3. Что означает 82?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576

Предыдущая тема: BackUp Win2003Serer


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