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

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

Автор: integer
Дата сообщения: 09.03.2006 20:21
помогите написать скрипт (vbs или js ) которой подключается к LDAP серверу и получает список адресов , напремер так делает ето The bat ! или адресная книга Outlook , LDAP требует авторизацию , поисковая база ou=OU_contact_ххххх,dc=ххх,dc=ххх,dc=ххх,dc=хх
Автор: Uriu
Дата сообщения: 10.03.2006 06:33
rosalin
Я попробую Вам помочь.

Добавлено:
Вам не понятен сам скрипт или нужно просто запускать его в скрытом окне?
Автор: rosalin
Дата сообщения: 10.03.2006 07:34
Uriu
Спасибо заранее

Добавлено:
Uriu
Нужно запускать в скрытом окне
Автор: FreemanRU
Дата сообщения: 10.03.2006 09:40
rosalin
А GPO
"Конфигурация Пользователя->Административные Шаблоны->Система->Сценарии->Выполнять сценарии входа с отображением команд" не спасает разве?
Автор: rosalin
Дата сообщения: 10.03.2006 09:51
FreemanRU
нет всеравно свернутое окно видно
Автор: FreemanRU
Дата сообщения: 10.03.2006 10:07
а как ты его запускаешь?
Автор: rosalin
Дата сообщения: 10.03.2006 10:27
он у меня лежит в логоне
Автор: FreemanRU
Дата сообщения: 10.03.2006 10:40
rosalin
Эт я понял. Скрипт можно запустить 3мя способами.
1. script.vbs
2. cscript //nologo script.vbs
3. wscript script.vbs
Автор: rosalin
Дата сообщения: 10.03.2006 10:50
1.способом
Автор: FreemanRU
Дата сообщения: 10.03.2006 11:01
Странно. Если выключено
Цитата:
Выполнять сценарии входа с отображением команд

и первый способ - ДОЛЖНО ничего ен отображатся.

А если попробовать cscript //nologo script.vbs >> null
Автор: Garreth
Дата сообщения: 11.03.2006 14:58
Коллеги!
А никто не задумывался как можно обновить адресную книгу Outlook Express на 400 компьютерах домена? Причем у каждого пользователя есть свои личные адреса, которые затирать нельзя, т.е. просто перепись wab-файла не прокатит.
Автор: Uriu
Дата сообщения: 11.03.2006 18:57
rosalin
В Вашем сценарии есть константа в самом начале: Const SW_SHOWMINNOACTIVE = 7
Попробуйте присвоить ей значение: Const SW_SHOWMINNOACTIVE = 12
Посмотрите что получится.
Автор: deenick
Дата сообщения: 12.03.2006 18:19
Подскажите пожалуйста, можно ли автоматизировать процесс создания домашней директории пользователя на файловом сервере(\\fileserver\users\), с указанными директориями (My word, My Excel, My Powerpoint etc.)в папке My Documents, при этом задав автоматически права на запись файлов только в вышеуказанные поддиректории.
Вроде для этого нужно ADSI...Но как? А также не понятен процесс создания папок с подпапками на удаленном сервере.

Не пинайте пожалуйста, тока учусь
Спасибо за помощь!!!
Автор: rosalin
Дата сообщения: 13.03.2006 08:37
Uriu
Супер все сработало еще потестю.....

Добавлено:
deenick
Было бы интересно посмотреть предложенные варианты

Добавлено:
В сети имею компы не только с XP но и 98 подскажите как запускать скрипты для таких станций
Автор: alecsandrb
Дата сообщения: 13.03.2006 14:17
>> deenick

Попробуй вот так:
[more]
' Создание папок пользователей внесенных в AD и папок для отделов (OU)
' раздаются права для доступа к личным папкам пользователей
' принцип: Domain Admins - full,
' User - Full (only on personal folder),
' System - full,

Set WshShell = CreateObject("Wscript.Shell")

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

' Запрос информации по всем учетным записям пользователей
' исправь строку запроса в соответствии со структурой твоего домена
CommandText = "Select cn, name, distinguishedName, sAMAccountName"
CommandText = CommandText + " from 'LDAP://OU=ou1,OU=ou2,DC=dc1,DC=dc2'"
CommandText = CommandText + " where objectClass='person' and objectClass<>'computer'"
CommandText = CommandText + " ORDER BY cn"

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

While Not objRecordset.EOF
' общая информация включая полный перечень всех OU
dn = objRecordset.fields("distinguishedName").Value
' название имени пользователя для создания его личной папки
UsersFolderName = objRecordset.fields("sAMAccountName").Value
myArray = Split(dn, ",")
Path = ""
For Each rec In myArray
If Left(rec, 3) = "OU=" Then
Path = Mid(rec, 4) + Path
End If
Next
DepartmentPath = Mid(Path, 12)

' создаем папку пользователя
' при запуске не на сервере а удаленно
' поменяй E:\Users на что-то вроде \\имя сервера\шара с папками пользователей
FolderUser = "E:\Users\" + UsersFolderName
Set objFld1 = CreateObject("Scripting.FileSystemObject")
If objFld1.FolderExists(FolderUser) Then
Else
Set objFolder1 = objFld1.CreateFolder(FolderUser)
End If

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

' формируем строку с назначением прав на личную папку
' положи xcacls.exe в папку со скриптом или укажи к нему полный путь в команде
StrCmdRightUsers = "xcacls.exe " + FolderUser + " /g ""DOMAIN ADMINS"":F System:f " + UsersFolderName + ":f /y "
RetVal = WshShell.Run("%COMSPEC% /c " & StrCmdRightUsers, 1, False)

objRecordset.MoveNext
Wend
[/more]

Прошу прощения за длинный пост.
Автор: Sish
Дата сообщения: 13.03.2006 14:30
alecsandrb
Такие длинные посты рекомендуется создавать под тегом [more].
Автор: Cac2s
Дата сообщения: 13.03.2006 15:24
Прошу прощения (вопрос уже поднимался - http://forum.ru-board.com/topic.cgi?forum=8&topic=1908&start=560#12), но не могу узнать владельца у конкретного каталога (точнее - в подкаталогах 1-го УРОВНЯ). В примере от MS - все файлы в каталоге (т.е. вообще все, включая подкаталоги всех уровней). Нормально-подробную документацию по NameSpace и GetDetailsOf обнаружить не удалось, по крайней мере - ничего, что помогло бы мне. Разными путями получаю только название 8-го атрибута (Владелец), а значение атрибута - не могу... Не поможете ли?

Общая цель - по NTFS добавить владельца как конкретного пользователя с полными правами на подкаталоги первого уровня (при работе с файлами офиса владелец меняется, если оставлять права просто на создателя-владельца - создатель подкаталога теряет все права на файл).
Путь решения (тот, который вижу) - перебирать все подкаталоги (повторюсь - первого уровня, поскольку на файлы и подкаталоги глубже права наследуются) и добавлять права пользователю, являющемуся владельцем.
Автор: deenick
Дата сообщения: 13.03.2006 20:27
alecsandrb
Спасибо!
Все работает кроме:
Если ставить сетевую папку то при исполнении скрипта в 44 строке ошибку выдает : Path Not Found.
А при исполнении с локальной сетевой папкой создается папка пользователя в виде d:\usersIvanovIvan, а не d:\users\IvanovIvan
И можно ли сделать так, что когда этот скрипт запускается через групповую политику, то пользовательская папка создавалась именно с именем того, кто логинется?
Автор: Refugee
Дата сообщения: 14.03.2006 02:36
Cac2s
Set oADsSecurityUtility = CreateObject("ADsSecurityUtility")
set sd = oADsSecurityUtility.GetSecurityDescriptor("c:\Temp\bcg", 1, 1)
WScript.Echo sd.Owner

Работает в 2003 или в 2000 с пересаженной от 2003 activeds.dll

или
function GetOwner(fname)
{
    fname.match(/^(.+)\\(.+?)\\?$/);
    var app=new ActiveXObject("Shell.Application");
    var fo=app.Namespace(RegExp.$1);
    return fo.GetDetailsOf(fo.Items().Item(RegExp.$2),8)
}
Автор: alecsandrb
Дата сообщения: 14.03.2006 05:44
deenick


Цитата:
Если ставить сетевую папку то при исполнении скрипта в 44 строке ошибку выдает : Path Not Found.


-> Сделай папку расшаренной и дай доступ группе Everyone на изменение, после этого должно заработать и из сети


Цитата:
А при исполнении с локальной сетевой папкой создается папка пользователя в виде d:\usersIvanovIvan, а не d:\users\IvanovIvan


-> проверь чтобы у тебя строка формирования полного пути к папке была как я написал:
FolderUser = "E:\Users\" + UsersFolderName
(Слеш после названия корневой папки обязателен)


Цитата:
И можно ли сделать так, что когда этот скрипт запускается через групповую политику, то пользовательская папка создавалась именно с именем того, кто логинется?


-> Можно, при логоне пользователя запускать похожий скрипт, но не выбирать всех пользователей из АД, а брать только текущего который логинится только придется каждый раз либо пересоздавать папки для него либо проверять на существование папки для логинящегося пользователя. В примере который я привел есть проверка не существует ли уже папка для текущего пользователя.
Могу дать скрипт и для текущего логинящегося пользователя, если интересно.
Автор: Uriu
Дата сообщения: 14.03.2006 07:17
Cac2s
Вот Вам пример как определить владельца. Скрипт я не доделал, можно еще добавить функции для "расшифровки"
AccessMasK & ACL.

[more]
Код: '********************** Начало *************************************
' Присваиваем начальные значения переменным
strComputer = "."
strNamespace = "Root\CIMV2"

'Пространство имен
Set objService = GetObject("WinMgmts:\\" & strComputer & _
"\" & strNamespace)

Set objFile = objService.Get("Win32_LogicalFileSecuritySetting.Path='C:\\Test\\Test.vbs'")

WSH.Echo " --Свойства объекта класса Win32_LogicalFileSecuritySetting.Path='C:\\Test\\Test.vbs ---- "
    'WScript.Echo "Caption: " & objFile.Caption
    WScript.Echo "ControlFlags - Флаги наследования: " & objFile.ControlFlags
    WScript.Echo "Description: " & objFile.Description
    WScript.Echo "OwnerPermissions: " & objFile.OwnerPermissions
    WScript.Echo "Path: " & objFile.Path
    'WScript.Echo "SettingID: " & objFile.SettingID


'Выполняю метод
iErr= objFile.GetSecurityDescriptor(objSecDescr)
'Проверяю на ошибку
If iErr <> 0 Then
WSH.Echo "Ошибка выполнения метода = " & iErr
End If
WSH.Echo "---- Дискриптор безопасности Win32_SecurityDescriptor ---"
'Вывожу свойства объекта класса Win32_SecurityDescriptor
WSH.Echo "Битовые флаги дискриптора " & objSecDescr.ControlFlags

WSH.Echo " ------------ Владелец Owner -----"

'Вывожу свойство внедренного объекта класса Win32_Trustree
' Один вложенный объект
WSH.Echo "Доменная учетная запись " & objSecDescr.Owner.Domain
WSH.Echo " SID владельца " & objSecDescr.Owner.SIDString
WSH.Echo"Имя владельца " & objSecDescr.Owner.Name
WSH.Echo ""

' WSH.Echo "Группа владельца у меня не определена???
'WSH.Echo "Доменная учетная запись " & objSecDescr.Group.Domain
'WSH.Echo " SID владельца " & objSecDescr.Group.SIDString
'WSH.Echo"Имя владельца " & objSecDescr.Group.Name
'WSH.Echo ""
'Так нужно работать с типом данных array of uint8
'For Each oSID In objSecDescr.Owner.SID
' WSH.Echo osid
'Next
'Так нужно работать с типом данных array of object:Win32_ACE
WSH.Echo "-------- Разрешения DACL ---------"
For Each oDACL In objSecDescr.DACL
WSH.Echo " Объект: " &_
"Domain: " & oDACL.Trustee.Domain &_
"\Name: " & oDACL.Trustee.Name &_
"\SID: " & oDACL.Trustee.SIDString

WSH.Echo " Не внедренные свойства == "
WSH.Echo "AccessMask " & oDACL.AccessMask
WSH.Echo "Флаги наследования ACE " & oDACL.AceFlags
WSH.Echo "Тип записи ACE " & oDACL.AceType
WSH.Echo ""
Next
' Аудит тоже array of object:Win32_ACE
WSH.Echo "------- Аудит SACL--------"
For Each oSACL In objSecDescr.SACL
WSH.Echo " Объект: " &_
"Domain: " & oSACL.Trustee.Domain &_
"\Name: " & oSACL.Trustee.Name &_
"\SID: " & oSACL.Trustee.SIDString


WSH.Echo " Не внедренные свойства =="
WSH.Echo "AccessMask " & oSACL.AccessMask
WSH.Echo "Флаги наследования ACE " & oSACL.AceFlags
WSH.Echo "Тип записи ACE " & oSACL.AceType
WSH.Echo ""


Next                    
Автор: DiEZZZ
Дата сообщения: 14.03.2006 08:36
Коллеги, подскажите, как автоматизировать в консоле Data Source ODBC, вкладка system DSN, процесс добавления системных источников данных?
Пытался через реестр - не получилось, видима не те ключи меняю. Очень надо!!!!


Извеняюсь, вопрос снимаеться. Сам написал.
Если кому понадобиться в будущем, вот пример:

var WSHShell = WScript.CreateObject("WScript.Shell");
WSHShell.Popup("Установка параметров ODBC");

WSHShell.RegWrite("HKLM\\SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources\\TEST", "SQL Server");
WSHShell.RegWrite("HKLM\\SOFTWARE\\ODBC\\ODBC.INI\\testdir\\", "testdir");
WSHShell.RegWrite("HKLM\\SOFTWARE\\ODBC\\ODBC.INI\\testdir\\Database", "testdatabase");
WSHShell.RegWrite("HKLM\\SOFTWARE\\ODBC\\ODBC.INI\\testdir\\Driver", "G:\\WINDOWS\\system32\\SQLSRV32.dll");
WSHShell.RegWrite("HKLM\\SOFTWARE\\ODBC\\ODBC.INI\\testdir\\LastUser", "TestUser");
WSHShell.RegWrite("HKLM\\SOFTWARE\\ODBC\\ODBC.INI\\testdir\\Server", "testSQLServer");
WSHShell.RegWrite("HKLM\\SOFTWARE\\ODBC\\ODBC.INI\\testdir\\Trusted_Connection", "Yes");

WSHShell.Popup("Установка завершена");
Автор: deenick
Дата сообщения: 14.03.2006 11:49
alecsandrb
Точно ступил изменить права
Все заработало
И можно получить скрипт для текущего пользователя? Тогда можно в групповую политику закинуть и шоколадно все будет
Спасибо!
Автор: alecsandrb
Дата сообщения: 14.03.2006 13:47
deenick

Держи, сам я не проверял но должно быть примерно так:
[more]
' Создание пользовательских папок при логоне пользователя
' раздаются права для доступа к личным папкам пользователей
' принцип: Domain Admins - full,
' User - Full (only on personal folder),
' System - full,


' определение текущего UserName
Set WshShell = CreateObject("Wscript.Shell")
UsersFolderName = WshShell.ExpandEnvironmentStrings("%username%")

' создаем папку пользователя
FolderUser = "\\имя сервера\имя шары\" + UsersFolderName
Set objFld1 = CreateObject("Scripting.FileSystemObject")
If objFld1.FolderExists(FolderUser) Then
Else
Set objFolder1 = objFld1.CreateFolder(FolderUser)

' формируем строку с назначением прав на личную папку
' положи xcacls.exe в папку со скриптом или укажи к нему полный путь в команде
StrCmdRightUsers = "xcacls.exe " + FolderUser + " /g ""DOMAIN ADMINS"":F System:f " + UsersFolderName + ":f /y "
RetVal = WshShell.Run("%COMSPEC% /c " & StrCmdRightUsers, 1, False)

End If

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

objRecordset.MoveNext
Wend

[/more]

Скрипт немного оптимизировал чтобы раздача прав была после создания папки и потом при повторном логоне этого же пользователя папка не создавалась и права вновь не назначались.
Автор: aikz6
Дата сообщения: 14.03.2006 14:26
Есть занчение реестра которое нужно установить

[HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles]
"W:\\buch\\1\\"="Типовая"

Делаю так...

set wshShell = WScript.CreateObject("WScript.Shell")
sub AddBases1c
key = "HKCU\Software\1C\1Cv7\7.7\Titles\"
wshShell.RegWrite key & "W:\\buch\\1\\", "Типовая"
end sub
AddBases1c

само сабой не работает....

то есть вместо строкового праметра W:\\buch\\1\\ оно создает строковый параметр 1
а всё что перед цифрой 1 считает за путь.

Как решить проблему?
Автор: FreemanRU
Дата сообщения: 14.03.2006 14:48
aikz6
Синтаксис для JS:

Цитата:

RegWrite strName,anyValue[, strType]
Если параметр strName оканчивается символами \\, то этот метод записывает разделж если такого раздела нет, он будет создан. Если в конце strName отсутвуют символы \\, то производится запись указанного параметра в нужный раздел.
Параметр anyValue задает значение, которе нужно записать в заданный параметром
strName параметр или раздел реестра......
Автор: deenick
Дата сообщения: 14.03.2006 15:20
alecsandrb
Странно, но на 30 строке ошибка
Автор: alecsandrb
Дата сообщения: 14.03.2006 15:32
deenick

Прошу прощения, неубрал до конца оператор цикла - тебе же в данном случае нужен только один пользователь и операция должна быть только один раз.
Исправил, должно быть так [more]
' Создание пользовательских папок при логоне пользователя
' раздаются права для доступа к личным папкам пользователей
' принцип: Domain Admins - full,
' User - Full (only on personal folder),
' System - full,


' определение текущего UserName
Set WshShell = CreateObject("Wscript.Shell")
UsersFolderName = WshShell.ExpandEnvironmentStrings("%username%")

' создаем папку пользователя
FolderUser = "\\имя сервера\имя шары\" + UsersFolderName
Set objFld1 = CreateObject("Scripting.FileSystemObject")
If objFld1.FolderExists(FolderUser) Then
Else
Set objFolder1 = objFld1.CreateFolder(FolderUser)

' формируем строку с назначением прав на личную папку
' положи xcacls.exe в папку со скриптом или укажи к нему полный путь в команде
StrCmdRightUsers = "xcacls.exe " + FolderUser + " /g ""DOMAIN ADMINS"":F System:f " + UsersFolderName + ":f /y "
RetVal = WshShell.Run("%COMSPEC% /c " & StrCmdRightUsers, 1, False)

End If

' аналогично можешь создать нужные тебе подпапки внутри уже созданной
' для пользователя папки
[/more]
Автор: deenick
Дата сообщения: 14.03.2006 15:57
alecsandrb
Супер!!! Спасибо огромное!!!
Как получается все не так сложно, но и не просто Надо будет сесть и подробно изучить язык скриптов. К сожалению из-за рутины, руки просто не доходят
Автор: Uriu
Дата сообщения: 15.03.2006 06:43
rosalin

Цитата:
В сети имею компы не только с XP но и 98 подскажите как запускать скрипты для таких станций

Я посмотрел кое какую документацию.
WSH 5.6 (Сервер сценариев.) является стандартной частью Win XP/2003. Эту версию можно установить и использовать во всех предыдущих 32-разрядных Win 95/98/ME/NT/2000. Нужно скачать инсталяционный файл для WSH 5.6 с сайта Майкрософт.

Сценарии с использованием WMI несравнимо более "мощная" вещь, чем WSH. В системах Win ME/2000/XP/2003 WMI присутствует штатно. Для использования WMI в Win 98/NT нужно обновить ядро WMI до версии 1.5, скачать файл wmicore.exe c сайта Майкрософт.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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