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

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

Автор: FreemanRU
Дата сообщения: 12.05.2006 18:34
VelDmi
Вы можете сделать Plug-in в виде динамически подгружаемой библиотеки (DLL).

Может не совсем то, что тебе нужно, но как пример использовать можно.
ЗЫ Если что - я не проверял это.
Автор: VelDmi
Дата сообщения: 13.05.2006 07:03
Я почему сюда обратился. Есть пример к программе AutoIt, где доступ к функциям осуществляется вот так:

Set oAutoIt = WScript.CreateObject("AutoItX3.Control")
text = oAutoIt.ClipGet() ----это функция AutoItX3
WScript.Echo "Clipboard contains:" & text

Хотел таким же макаром использовать IRunpadShell и ее rs_api.dll
Но с наскока не получилось. Я не пишу на C, C++, Delphi, а примеры есть только для этих языков. Думал, может на wbs получится использовать api этой программы.
Автор: FreemanRU
Дата сообщения: 13.05.2006 08:44
VelDmi

Цитата:
Set oAutoIt = WScript.CreateObject("AutoItX3.Control")

WScript.CreateObject создает объект ACtiveX. Если IRunpadShell имеет ActiveX-компонент, то к нему можно обратится именно так.
А вообще, если очень надо, то попробуй VisualBasic. Синтаксис очень похож на VBScript.
Автор: Sk1f
Дата сообщения: 15.05.2006 08:55
Всем добрый день, утро, вечер. Спать хочу жутко

Люди как в Vb задать счетчик.
Т.е. мне нужно внести в массив названия Group из AD. Так вот как создать счетчик? Только тот который бы автоматически после последней группы выходил бы из цикла.

А то мне не нужна ситуация, которая может возникнуть (пример):
For i=0 to 30
Next
. А групп может быть больше 30 или наоборот меньше
Автор: Oldster
Дата сообщения: 15.05.2006 09:19
Sk1f

Цитата:
For i=0 to 30
Next

for тебе не поможет, попробуй While... Wend или Do... Loop
Автор: Sk1f
Дата сообщения: 15.05.2006 09:49
Oldster не нашел есть способ:

Цитата:
For k = 0 To objGroup.distinguishedName.Count -1
s1 = objGroup.distinguishedName
s1 = s1 & k
Next
WScript.Echo s1



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

А нужно: есть OU (1-го уровня) и OU (2-го уровня). Т.е. dn organizational unita 2-го уровня:

Цитата:
ou= test2lvl,ou =test1lvl,dc=test,dc=ru

Сама задача заключается в том, чтобы считать эти ou, считать группы в них и потом добавить глобальные группы из ou 2го уровня в глобальную группу ou 1го уровня (она там 1-2, есть условие по которому выбирается одна - нужная).
Но такая фигня получается - допустим я считал все. Тогда может возникнет такая ситуация, что в одной ou(1-го уровня) было три ou (2-го уровня) и после того как я включу цикл включения группы в группу. У меня вместо того чтобы добавиться в одну глобальную группу ou (1-о уровня). Глобальные группы ou (2-го уровня) добавятся не в одну, а по отдельности в другие считанные глобальные группы (1-го уровня).

Как этого избежать?

Пример(может кто не понял):
группы(OU 1-го уровней): a1,a2,a3,a4,a5,a6
группы(OU 2-го уровня в ОДНОЙ OU(1-го уровня)): а, б, в, г

И как избежать ситуации, чтобы а, б, в, г не добавились так: "а" в a1, "б" в a2, "в" в a3, "г" в a4.
А чтобы было a, б, в, г добавились в a1.
Автор: FreemanRU
Дата сообщения: 15.05.2006 10:43
Sk1f
[more=How Can I Get a List of All the Users in an OU and Its Sub-OUs?]
How Can I Get a List of All the Users in an OU and Its Sub-OUs?

Q. Hey, Scripting Guy! How can I get a list of all the users in an OU and its sub-OUs?

-- MN

A. Hey, MN. Thanks to either faulty wiring or a neighbor’s fireworks (the investigation was inconclusive), one of the Scripting Guys had the delightful experience of watching his garage burn down this summer. Because the Scripting Cars were never parked in the garage, this Scripting Guy decided to rebuild the thing as a family room. That’s fine, and, in general, the contractors did a pretty good job. Of course, as a garage, the room originally had a pair of electrical outlets in the ceiling in order to plug in garage door openers. Upon rebuilding the garage as a family room, the contractor left those two electrical outlets exposed, in order to plug in … well, whatever kind of device you normally plug into a ceiling. (Best of all, neither outlet is near a wall. Instead, both are out towards the middle of the room, the very place you want to see electrical cords hanging.)

On the one hand, this Scripting Guy can’t help but look at those two electrical outlets and think, “How could you miss something so obvious?” On the other hand, that same Scripting Guy can look back over 15 months of Hey, Scripting Guy! columns and notice that we’ve never answered this particular question. Good heavens, how could we miss something that obvious?!? Realizing that we’ve never answered this often-asked questions makes it a bit harder to yell at the contractor for not covering over those electrical outlets.

Barring more faulty wiring (or another poorly-aimed firework), our Scripting Guy is stuck with a pair of electrical outlets in his family room ceiling forever and ever. But at least readers of this column no longer have to wonder how to get a list of all the users in an OU and its sub-OUs:

Код:
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://ou=finance,dc=fabrikam,dc=com' WHERE objectCategory='user'"
Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst
Do Until objRecordSet.EOF
Wscript.Echo objRecordSet.Fields("Name").Value
objRecordSet.MoveNext
Loop
Автор: Sk1f
Дата сообщения: 15.05.2006 11:23
FreeMan, Но это для WMI.
А для WSH такое сделать как?

А как создать массив из списка на VBS-е? Например названия фруктов?

Автор: FreemanRU
Дата сообщения: 15.05.2006 11:32
Sk1f
Так, давай не путать WMI - это технолигия. А WSH - это Windows Script Host, движок обработки скриптов. Это раз.
Во вторых, где ты там увидел WMI?
В третьих, чем тебя не устравивает способ, изложенный в статье?

Добавлено:

Цитата:
как создать массив из списка на VBS-е? Например названия фруктов?

Dim fruits()
ReDim fruits(3)
fruits(0) = "apple"
fruits(1) = "yabloko"
fruits(2) = "un_eaten"
For each fruit in fruits
WScript.Echo fruit
Next

ReDim fruits(4)
fruits(0) = "apple"
fruits(1) = "yabloko"
fruits(2) = "un_eaten"
fruits(3) = "aprikot"
For each fruit in fruits
WScript.Echo fruit
Next
Автор: Sk1f
Дата сообщения: 15.05.2006 16:33
а так, если

arg(z)=objGroup.dn
z=z+1

так будет заполняться массив в VBS?
Автор: FreemanRU
Дата сообщения: 15.05.2006 21:50
Sk1f

Цитата:
а так, если

arg(z)=objGroup.dn
z=z+1

так будет заполняться массив в VBS?

Да, если выделен достаточно большой размер массива.
А зачем тебе массив? Может всё же можно как-то проще реализовать?
Автор: Sk1f
Дата сообщения: 16.05.2006 08:04
FreemanRU, размер массива выделять с помощью UBound function?


Добавлено:
FreemanRU и точто ли так заполняется массив? Может используется какой метод? (например add)
Автор: Vby
Дата сообщения: 16.05.2006 13:08
Подскажите как на VBS узнать ip машины с именем NAME
Автор: FreemanRU
Дата сообщения: 16.05.2006 13:57
Vby
Если есть административный доступ к компу, то через WMI можно выдрать все ip-адреса.

Если просто нужно разрешить имя, то через пинг:

Код:
Dim compname = 'comp'
Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._
ExecQuery("select * from Win32_PingStatus where address = '"&compname&"'")
For Each objStatus in objPing
If Not IsNull(objStatus.ProtocolAddress) Then
WScript.echo objStatus.ProtocolAddress
Else
WScript.echo "IP-адрес не найден"
End If
Next
Автор: Vby
Дата сообщения: 16.05.2006 14:31
FreemanRU
К компу доступа нет,
Win32_PingStatus ProtocolAddress показывает ip когда есть ping до компа, если нету, возвражает пусто.
Можно ли как из ДНС выдрать ip?

Добавлено
Сделал так:

machine = "name"
strComputer = "*"
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & _
"\root\MicrosoftDNS")

Set colItems = objWMIService.ExecQuery("Select * from MicrosoftDNS_AType where ownername = '"_
& machine & "'")

For Each objItem in colItems
ipaddress = objItem.IPAddress
Next


Автор: serstr
Дата сообщения: 17.05.2006 10:56
Такой вопросик.

Я определяю, точнее должен определить IP машины на которой отрабатывает скрипт, а затем сравнить его с тремя масками разных сетей, и в зависимости от того в к какой сети принадлежит этот IP, выполнять определенные дествия. Допустим маска одной сети, 123.123.123.0/26 т.е. 64 адреса, а второй сети 123.123.123.128/26, а третьей 111.111.11.0/24 на 254 адреса

Вопрос в том как организовать сравнение IP адреса машины с маской сети?
Автор: FreemanRU
Дата сообщения: 17.05.2006 11:29
serstr
Через побитовое И (умножение). Т.е. если АДРЕС и МАСКА = МАСКА, то адрес пренадлежит этой сети...
Автор: serstr
Дата сообщения: 17.05.2006 11:39
FreemanRU

Если не сложно, напиши на примере, а то я както туговато соображаю логику я понял, а вот синтаксис
Автор: FreemanRU
Дата сообщения: 17.05.2006 13:10
serstr

Код:
x = 3 'двоичный - 011
y = 2 'двоичный - 010

WScript.Echo x or y ' 3 = двоичный 11. Побитовое сложение
WScript.Echo x and y ' 2 = двоичный 10. Побитовое умножение
Автор: Oldster
Дата сообщения: 17.05.2006 16:07
FreemanRU
встретилась проблема:
вот кусок кода моего:

Цитата:
objCommand.CommandText = "<GC://dc=my_domen,dc=ru>;(objectCategory=User);cn,sAMAccountName,userAccountControl,mail,telephoneNumber,whenCreated,description;subtree";

при добавлении выделеного параметра выдает ошибку:

Цитата:
Ошибка выполнения Microsoft JScript: "objRecordSet.Fields(...)" - не является строкой

если я правильно понял, то "description" - это описание пользователя в AD, которое я хочу прочитать, но не получается может я чего не так делаю?
и вообще, где почитать про все параметры user - у меня есть в книги, но не все.
Автор: FreemanRU
Дата сообщения: 17.05.2006 16:17
Oldster

Цитата:
и вообще, где почитать про все параметры user

1. adsiedit.msc из комплекта support tools (есть на любом диске с Windows XP/2003).
2. Редактор схемы (подключается из mmc)


Цитата:
Ошибка выполнения Microsoft JScript: "objRecordSet.Fields(...)" - не является строкой

Угу. Её надо на null (nil кажется в JS) проверять. Просто в AD есть 3 состояния для строк типа Unicode string:
1. Пустая строка ("")
2. Строка со значением ("some")
3. NULL. Не заданное значение. (<Not Set> в adsiedit.msc)
Автор: Oldster
Дата сообщения: 17.05.2006 18:13
FreemanRU

Цитата:
Её надо на null (nil кажется в JS) проверять.

можно поподробнее?
Автор: FreemanRU
Дата сообщения: 17.05.2006 19:35
Oldster
По идеи так:

Код:
if (objRecordSet.Fields("description") != null)
{
.....здесь делаем действия с objRecordSet.Fields("description")
}
Автор: Oldster
Дата сообщения: 18.05.2006 09:57
FreemanRU
делаю так:

Цитата:

if (objRecordSet.Fields("description") != null){
srt = objRecordSet.Fields("description");
}

получаю (смотрю в дебагере) str - об`ект, у него есть Value - в котором то, что мне надо, делаю так:

Цитата:

temp = str.Value;

получаю temp = непонятно чему
Автор: Sk1f
Дата сообщения: 18.05.2006 10:39
Всем добрый день.

На сервере есть структурированный каталог папок. Кто-нибудь может подсказать, как считать разрешения установленные на папки в этом каталоге?
Или где можно найти информацию о доступе и установления разрешений?
Автор: FreemanRU
Дата сообщения: 18.05.2006 10:40
Oldster
Мда, засада. Не получится через ADO вытащить description.
Ибо:

Код:
if (objRecordSet.Fields("description").Value != null)
{
WScript.Echo (objRecordSet.Fields("description").Type);
}
Автор: Oldster
Дата сообщения: 18.05.2006 12:44
Sk1f
cacls /?
не это?
Автор: FreemanRU
Дата сообщения: 18.05.2006 13:13
Oldster

Цитата:
cacls /?
не это?

Нет. Он только для файлов разрешения показывает.
Автор: KapralBel
Дата сообщения: 18.05.2006 13:37
FreemanRU
Всю жизнь показывал и на папки, или я что неправильно делаю???
cacls * >File.lst

Код: C:\Documents and Settings\FFFFF ZZZZZZZZZ\Главное меню\1 NT AUTHORITY\SYSTEM:F
BUILTIN\Администраторы:F
domain\FFFFF ZZZZZZZZZ:F

C:\Documents and Settings\FFFFF ZZZZZZZZZ\Главное меню\desktop.ini NT AUTHORITY\SYSTEM:F
BUILTIN\Администраторы:F
domain\FFFFF ZZZZZZZZZ:F

C:\Documents and Settings\FFFFF ZZZZZZZZZ\Главное меню\WinRAR.lnk NT AUTHORITY\SYSTEM:F
BUILTIN\Администраторы:F
domain\FFFFF ZZZZZZZZZ:F

C:\Documents and Settings\FFFFF ZZZZZZZZZ\Главное меню\Программы NT AUTHORITY\SYSTEMOI)(CI)F
BUILTIN\АдминистраторыOI)(CI)F
domain\FFFFF ZZZZZZZZZOI)(CI)F

Автор: Oldster
Дата сообщения: 18.05.2006 13:45
FreemanRU
смотрим ключик:
/T Замена таблиц управления доступом для указанных файлов в текущем каталоге и всех подкаталогах.
по крайне мере у меня так каталоги создаются для юзеров.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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