Имя: Пароль:
1C
 
Как получить имя домена конкретного компа?
0 TormozIT
 
гуру
11.12.08
11:47
Интересует самы быстрый по выполнению способ.
WMI нашел, но долго че то работает.
1 asady
 
11.12.08
11:54
(0)
а так пробовал?

Set WshNetwork = CreateObject("WScript.Network")
MsgBox WshNetwork.UserDomain
2 TormozIT
 
гуру
11.12.08
12:05
Моя главная то цель - хорошая идентификация ИБ по строке соединения.

Самая первая проблема - имя главного сервера кластера может быть записано

srvr="dom.moda";ref="zup";
srvr="dom";ref="zup";

Не знаю только будет ли (1) всегда работать. Ведь это вроде может быть другой домен.
3 TormozIT
 
гуру
11.12.08
12:06
(2) Да, опасения оправдались. (1) не подходит.
4 asady
 
11.12.08
12:07
(0) для текущего сеанса пользователя - работает точно.

если юзер вошел в домен - ты этот домен увидишь.
если юзер не в домене  ты это тоже увидишь.
5 TormozIT
 
гуру
11.12.08
12:09
Короче нужно че то типа

Set WshNetwork = CreateObject("WScript.Network")
Set Comp = WshNetwork.GetHostByName("dom")
MsgBox Comp.Domain
6 asady
 
11.12.08
12:12
7 TormozIT
 
гуру
11.12.08
12:19
(6) Спасибо, но все это не то. Мне нужен ~GetHostByName


ping dom
nslookup dom

выдают то, что нужно, т.е. полное имя компа. Но как это получить программно, я не знаю.
8 asady
 
11.12.08
12:55
(7)
Set WshShell = CreateObject("WScript.Shell")
Set WshExec = WshShell.Exec("nslookup 127.0.0.1")
WScript.Sleep 7000
Set TextStream = WshExec.StdOut
Str = vbNullString
While Not TextStream.AtEndOfStream
   Str = Str & Trim(TextStream.ReadLine()) & vbCrLf
Wend
MsgBox Str



лови stdOut и парси как тебе надо
9 TormozIT
 
гуру
11.12.08
13:11
(8) Спасибо. Не очень художественно конечно), но ждать более не могу.
Беру)
10 TormozIT
 
гуру
11.12.08
13:17
Блин еще и визуальные эффекты убирать придумывать. Сколько же геморроя ради такой простой задачи...!
11 vde69
 
11.12.08
13:19
Функция ПолучитьСписокДоменов () Экспорт
   Результат = Новый Массив();
   objNameSpace = "";
                   
   Попытка
       objNameSpace = ПолучитьCOMОбъект("WinNT:");
       м = Новый Массив();
       м.Добавить("domain"); // Computer User Group GlobalGroup domain
       м2 = Новый COMSafeArray(м, "VT_VARIANT");
       objNameSpace.Filter = м2;
       Для каждого item Из objNameSpace Цикл
           Результат.Добавить(item.Name);
       КонецЦикла;
   Исключение
       Результат.Очистить();
   КонецПопытки;
   
   Возврат Результат;
КонецФункции

Функция ПолучитьСписокГруппВДомене (ИмяДомена, ТипГрупп = "GlobalGroup") Экспорт
   Результат = Новый Массив();
   objNameSpace = "";
   
   Попытка
       objNameSpace = ПолучитьCOMОбъект("WinNT://"+СокрЛП(ИмяДомена));
       м = Новый Массив();
       м.Добавить(ТипГрупп); // Computer User Group GlobalGroup domain
       м2 = Новый COMSafeArray(м, "VT_VARIANT");
       objNameSpace.Filter = м2;
       Для каждого item Из objNameSpace Цикл
           Результат.Добавить(item.Name);
       КонецЦикла;
   Исключение
       Результат.Очистить();
   КонецПопытки;
   
   Возврат Результат;
КонецФункции

Функция ПолучитьСписокПользователейВГруппеДомена (ИмяДомена, ИмяГруппы) Экспорт
   Результат = Новый Массив();
   objNameSpace = "";
   
   Попытка
       objNameSpace = ПолучитьCOMОбъект("WinNT://" + СокрЛП(ИмяДомена) + "/" + СокрЛП(ИмяГруппы) + ", Group");
       Для каждого item Из objNameSpace.Members() Цикл
           Результат.Добавить(item.Name);
       КонецЦикла;
   Исключение
       Результат.Очистить();
   КонецПопытки;
   
   Возврат Результат;
КонецФункции
12 vde69
 
11.12.08
13:20
(11)+ WinNT провайдер более универсальный и более быстрый, но у него функционала меньше (ибо более старый) копай сюда
13 TormozIT
 
гуру
11.12.08
13:29
(11) ПолучитьСписокДоменов() не возвращает нужный домен!
14 TormozIT
 
гуру
11.12.08
13:29
(12) Ок. Лопатой все самому придется поработать) Спасибо за наводку.
15 vde69
 
11.12.08
13:31
(13) значит прав нету, работает на 100% видит домены с самыми минимальными настройками
16 TormozIT
 
гуру
11.12.08
13:40
(15)
Допустим я подключился к чужой сети Vahtang.ALPA по VPN и не авторизовался в домене. Мне необходимо в 1С получить имя домена Vahtang.ALPA компьютера  BIPOD.Vahtang.ALPA из чужой сети по его netbios имени BIPOD.

Команда системы
ping BIPOD
мне выдает
BIPOD.Vahtang.ALPA

Права на получение доменного имени для ping не нужны :), а вот для провайдера WINNT конечно нужны.
17 vde69
 
11.12.08
13:44
(16) во первых для этого провайдера не нужна авторизация, вроде как ему NetBios нужен, хотя я с твоей схемой не пробовал.


во вторых кто тебе мешает перенести код на сервер 1с и он будет выполнятся от имени лок. админа
18 TormozIT
 
гуру
11.12.08
13:48
(8) Пардон про nslookup наврал.
Только ping работает
19 TormozIT
 
гуру
11.12.08
13:49
(17) Про сервер 1с - я поставил задачу в самом сложно случае и она должна в нем решаться.
20 vde69
 
11.12.08
13:52
(19) у меня winNT видит сейчас 5 доменов, а например на вкладке прав файлов в источниках только 2, то-есть видеться 3 домена к которым у меня нету доступа...

Думаю у тебя траблы с VPN и удаленным доступом, попробуй подключиться с проброской локальных дисков в сесию
22 TormozIT
 
гуру
11.12.08
13:55
(17)
Я пробую так
obj = ПолучитьCOMОбъект("WinNT://BIPOD");
Но что с ним делать дальше непонятно. Не понимаю куда копать. В доке http://www.script-coding.info/ADSI.html такого примера нет
23 TormozIT
 
гуру
11.12.08
13:57
(20) У меня трабл с подключением НЕТУ. Есть база со строкой соединения Srvr="BIPOD";Ref="Base"; и она работает. Но WINNT не выдает домен Vahtang.ALPA в списке!
24 vde69
 
11.12.08
14:07
26 TormozIT
 
гуру
11.12.08
14:30
(24) Смотри (23) =)
27 TormozIT
 
гуру
11.12.08
14:30
Итак. Задача уже почти решена без устранения визуального изъяна

NBName = "poligon"
Set WshShell = CreateObject("WScript.Shell")
Set WshExec = WshShell.Exec("ping " + NBName + " /n 1")
While WshExec.Status = 0
   WScript.Sleep 10
Wend
Set TextStream = WshExec.StdOut
Str = vbNullString
While Not TextStream.AtEndOfStream
   Str = Str & Trim(TextStream.ReadLine()) & vbCrLf
Wend
Set objRegExp = New RegExp
objRegExp.Pattern = "[a-z0-9]+((.([0-9a-zA-Za-яА-Я]+))*)\s*\["
Set Result = objRegExp.Execute(Str)
MsgBox Mid(Result(0).SubMatches(0), 2)
28 vde69
 
11.12.08
14:37
Попробуй:

       objNameSpace = ПолучитьCOMОбъект("WinNT://BIPOD");
       м = Новый Массив();
       м.Добавить("Computer");
       м2 = Новый COMSafeArray(м, "VT_VARIANT");
       objNameSpace.Filter = м2;
       Для каждого item Из objNameSpace Цикл
           Возврат СокрЛП(item.Name);
       КонецЦикла;
29 vde69
 
11.12.08
14:38
(28) только если BIPOD -  не являеться контролером домена
30 vde69
 
11.12.08
15:03
вот это точно работает если есть доступ

objNameSpace = ПолучитьCOMОбъект("WinNT://BIPOD, Computer");
Возврат Сред(objNameSpace.Parent, 9);
31 TormozIT
 
гуру
11.12.08
15:52
(30) Да, по формулировке (0) решение отвечает всем требованиям. Спасибо.
Однако мне как выяснилось нужно получить часть полного доменного имени компьютера с окночанием. Т.е. (30) выдает Vahtang, а мне нужно Vahtang.ALPA. Может еще чуток докрутишь?
32 vde69
 
11.12.08
16:26
(31) а зачем тебе? как я понимаю при запросе не обязательно полное имя домена указывать. Чего хоть вояешь?

как я понимаю через точку пишуться домены разного уровня, тоесть тебе придеться рекурсивно получать (по крайне мере провайдером WinN),

Кстати пример в (30) у меня на соседнем домене не сработал (ошибка доступа), хотя должен был...



вот нашел интересный пример (для тебя вряд-ли пойдет, но прикольно)

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 'GC://dc=fabrikam, dc=com' WHERE objectCategory='domain'"  
Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst
Do Until objRecordSet.EOF
   Wscript.Echo objRecordSet.Fields("Name").Value
   objRecordSet.MoveNext
Loop
33 TormozIT
 
гуру
11.12.08
16:30
(32) Я хочу нормализовать имя кластера серверов 1С.
Указание BIPOD.Vahtang не работает. Надо BIPOD.Vahtang.ALPA.
34 vde69
 
11.12.08
16:43
(33) у меня нету домена с точкой, пробовать неначем


проверь

objNameSpace = ПолучитьCOMОбъект("WinNT://BIPOD, Computer");
е = Сред(objNameSpace.Parent, 9);
е2 = ПолучитьCOMОбъект("WinNT://"+е);
Сообщить(е2.Name);
35 TormozIT
 
гуру
11.12.08
16:51
(34) Vahtang
36 vde69
 
11.12.08
16:53
(35) сдаюсь, работать пошел
37 TormozIT
 
гуру
11.12.08
16:56
(36) Спасибо за потраченное на мою задачу время! Ведь почти получилось)
38 TormozIT
 
гуру
11.12.08
20:06
Итак задача решена. Вот фрагмент кода, если кому интересно будет.  

Функция ПолучитьПолноеИмяКомпьютераСетиПоЛюбомуИмени(ИмяКомпьютера) Экспорт
...
WshShell = Новый COMОбъект("WScript.Shell");
ФайлРезультата = Новый Файл(ПолучитьИмяВременногоФайла());
ЗапуститьСкрытоеПриложениеИДождатьсяЗавершения("""cmd.exe /c ""ping " + ИмяКомпьютера + " /n 1"" > " + ФайлРезультата.Имя + """",
   ФайлРезультата.Путь);
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.Прочитать(ФайлРезультата.ПолноеИмя);
УдалитьФайлы(ФайлРезультата.ПолноеИмя);
ТекстРезультата = ТекстовыйДокумент.ПолучитьТекст();
RegExp.Pattern = "([a-z0-9]+(.([0-9a-zA-Za-яА-Я]+))*)\s*\[";
Результат = RegExp.Execute(ТекстРезультата);
ПолноеИмяКомпьютера = Результат.Item(0).SubMatches(0);
Возврат ПолноеИмяКомпьютера;
КонецФункции // ПолучитьПолноеИмяКомпьютераСетиПоЛюбомуИмени()


ЗапуститьСкрытоеПриложениеИДождатьсяЗавершения() - функция вызывает приложение hstart. Работает быстро, красиво и надежно.
39 TormozIT
 
гуру
12.12.08
10:31
Все клево, только во внешнем соединении эта штука не работает, т.к. ЗапуститьПриложение() там неопределено.
40 TormozIT
 
гуру
12.12.08
10:38
Да и в шаблоне косячок был. Вот исправленный
[a-z0-9]+((\.([-0-9a-zA-Za-яА-Я]+))*)\s*\[
42 TormozIT
 
гуру
17.12.08
09:15
И еще разок)
([-0-9a-zA-Za-яА-Я]+(\.([-0-9a-zA-Za-яА-Я]+))*)\s*\[
43 Aprobator
 
17.12.08
10:19
(0) Если компутер не входит в разные домены время от времени, то:

ПользователиWindows (WindowsUsers)
Синтаксис:
ПользователиWindows()
Возвращаемое значение:
Тип: ТаблицаЗначений. Информация возвращается в виде таблицы значений, в колонках которой содержится следующая информация:
ИмяДомена (DomainName) - имя домена (тип Строка);
ИмяСервера (ServerName) - имя компьютера, являющегося контроллером домена (тип Строка);
Пользователи (Users) - массив строк с именами пользователей домена;
Локальный (Local) - признак того, что этому домену принадлежат локальные пользователи данного компьютера.
Описание:
Предоставляет доступ к информации о доменах и пользователях операционной системы.
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
44 TormozIT
 
гуру
17.12.08
11:48
(43) Спасибо. Но если еще раз внимательно прочитать название темы, то станет понятно, что речь идет о произвольном компьютере.
45 Ferz
 
17.12.08
12:05
srvr="dom.moda";ref="zup";
ООО серверная версия, я кажется знаю зачем...:)

тех. журнал все не дает покоя?
46 smaharbA
 
17.12.08
14:07
nbtstat.exe -a poligon
будет правдо только нетбиос имя группы, но не факт, что группа совпадает с доменом (даже не название), правдо это редкий случай
47 acsent
 
17.12.08
14:23
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан