Имя: Пароль:
1C
 
Чтение данных из реестра
0 D_E_S_131
 
14.05.10
11:36
С помощью WScript.Shell могу прочитать значение ветки реестра. Как-нибудь можно сделать тоже самое, но на другом компьютере из сети?
1 shuhard
 
14.05.10
11:40
(0) лисапед не мой
Set WshShell = CreateObject("WScript.Shell")

const HKEY_LOCAL_MACHINE = &H80000002
On Error Resume Next

'тут задаем имя ЦЕЛЕВОГО компьютера:
compname = "it3"

'Подключаемся к удаленному
On Error Resume Next
'подключение к WMI
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & compname &"\root\default:StdRegProv")
If Err.Number <> 0 Then
       WshShell.LogEvent 1,"Подключение к WMI "& Name &" ошибка "& Err.Number & ": " & Err.Description
'    WScript.Quit
End If
On error goto 0
'То есть мы получили массив GetValue
oReg.GetBinaryValue HKEY_LOCAL_MACHINE,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","DigitalProductId",GetValue
'То есть мы получили массив GetValue

WScript.Echo "Ключ Windows: " & GetKey(GetValue)

Function GetKey(byval p)
   pc="BCDFGHJKMPQRTVWXY2346789"
   For i=0 To 28
       a=0
       For j=0 To 14
           a=p(66-j)+a*256
           p(66-j)=(a\24) And 255
           a=a Mod 24
       Next
       ProductKey = Mid(pc,a+1,1) & ProductKey
       If (((i+2) Mod 6)=0) And (i<28) Then
           i=i+1
           ProductKey = "-" & ProductKey
       End If
   Next
   GetKey = ProductKey
End Function
2 D_E_S_131
 
14.05.10
12:13
Это VB-скрипт? Я силами 1С локальные значения читаю. Думал, что "этими же силами" я и удаленно получу эти значения.
3 shuhard
 
14.05.10
12:20
(2) это пример доступа к реестру удаленной машины средствами WMI
оборочивай во что удобно
4 D_E_S_131
 
14.05.10
13:58
"Во что угодно" упирается стразу в "GetObject" - такое на 1С не катит...
5 shuhard
 
14.05.10
14:18
(4) поиск по мисте, первая строка:

СИМ=ПолучитьCOMОбъект("winmgmts:\\.\Root\CIMv2");
Фильтр=СИМ.Get("__EventFilter").SpawnInstance_();
Фильтр.Name="MonitorPrintJob";
Фильтр.QueryLanguage="WQL";
Фильтр.Query="SELECT * FROM __InstanceCreationEvent WITHIN "+ИнтервалОпроса+" WHERE TargetInstance ISA 'Win32_PrintJob'";
Фильтр.Put_();
           
Потребитель=СИМ.Get("LogFileEventConsumer").SpawnInstance_();
Потребитель.Name="LogPrintJob";
Потребитель.FileName=ФайлЖурнала;
Потребитель.Text="Дата/время: %TargetInstance.StartTime%, Принтер: %TargetInstance.Name%, Документ: %TargetInstance.Document%, Пользователь: %TargetInstance.Owner%, ВсегоСтраниц: %TargetInstance.TotalPages%";
Потребитель.Put_();

Фильтр=СИМ.Get("__EventFilter.Name=""MonitorPrintJob""");
Потребитель=СИМ.Get("LogFileEventConsumer.Name=""LogPrintJob""");
Связь=СИМ.Get("__FilterToConsumerBinding").SpawnInstance_();
Связь.Filter=Фильтр.Path_;
Связь.Consumer=Потребитель.Path_;
Связь.Put_();
6 D_E_S_131
 
14.05.10
15:04
Получилось, только нужны права локального админа на том компе, где хочешь реестр прочитать.

Реестр = ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate}!\\test-bm8\root\default:StdRegProv");
   
   ЗначениеРеестра = "";
   
   Реестр.GetStringValue(2147483650, "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{45FCC729-7789-479D-89A6-CE1AC809ADCA}", "InstallSource", ЗначениеРеестра);
   
   Сообщить("" + ЗначениеРеестра);
7 shuhard
 
14.05.10
15:15
(6) и это правильно
нефига без прав по реестру шарить
8 D_E_S_131
 
14.05.10
15:33
shuhard, спасибо за "наводку".
9 shuhard
 
14.05.10
15:36
(8) ОК
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.