![]() |
![]() |
![]() |
|
Как получить имя домена конкретного компа? | ☑ | ||
---|---|---|---|---|
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
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |