PDA

Показать полную графическую версию : [решено] Как получить имя ветки реестра?


garanov
16-12-2009, 16:09
хочу поменять DNS на удаленном компе.

RegWrite("\\10.167.32.100\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{E5 B0E6CF-3B94-41D8-BD02-73C021A3365D}", "NameServer", "REG_SZ", "213.177.96.1,213.177.97.1")

но дело то в том, что {E5B0E6CF-3B94-41D8-BD02-73C021A3365D} - эта ветка у всех разная... что же делать ?

Creat0R
16-12-2009, 16:28
дело то в том, что {E5B0E6CF-3B94-41D8-BD02-73C021A3365D} - эта ветка у всех разная... что же делать ? »
Вопрос в другом, как определить какую именно ветку нужно считывать, у меня там несколько веток с похожим названием (GUID).
Можно получить данные с каждой из них, но лучше будет определить искомую ветку по её параметрам к примеру (по ключам внутри ветки).

amel27
16-12-2009, 16:59
хочу поменять DNS на удаленном компе »
_NetAdapterSetDNS("192.168.1.1,192.168.1.3")

Func _NetAdapterSetDNS($sDNSList, $sHostName = "localhost")
Local $objWMIService = ObjGet( "winmgmts:\\"& $sHostName &"\root\CIMV2")
Local $aDNSList = StringSplit($sDNSList, ",;|", 2)
Local $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapterConfiguration Where IPEnabled = True', "WQL", 0x30)
If IsObj($colItems) Then
For $colItem In $colItems
$colItem.SetDNSServerSearchOrder($aDNSList)
Return True
Next
EndIf
Return False
EndFunc ;==> _NetAdapterSetDNS

garanov
17-12-2009, 10:29
Опа, спасибо!)

Только вот как бы доделать что бы он менял DNS по всем компам в сети?

циклом... 10.167.32.$I

amel27
17-12-2009, 11:10
Только вот как бы доделать что бы он менял DNS по всем компам в сети?

циклом »
сам спросил - сам ответил :)

garanov
17-12-2009, 15:37
куда это написать то ?) я запутался :(

amel27
17-12-2009, 16:13
куда это написать то ? »

зависит от того, как собираетесь получать список - из текстового файла, Active Directory, службы обозревателя или еще каким способом... сначала записать этот список в массив, а потом перебрать все элементы массива и для каждого выполнить ф-цию _NetAdapterSetDNS()

garanov
17-12-2009, 16:19
ррр. не понял ничерта (

amel27
17-12-2009, 16:55
$aCompList = _NetServerEnum(1)
$sDNSList = "192.168.1.1,192.168.1.2"

For $i=1 To $aCompList[0]
_NetAdapterSetDNS($sDNSList, $aCompList[$i])
Next

Func _NetAdapterSetDNS($sDNSList, $sHostName = "localhost")
Local $objWMIService = ObjGet( "winmgmts:\\"& $sHostName &"\root\CIMV2")
Local $aDNSList = StringSplit($sDNSList, ",;|", 2)
Local $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapterConfiguration Where IPEnabled = True', "WQL", 0x30)
If IsObj($colItems) Then
For $colItem In $colItems
$colItem.SetDNSServerSearchOrder($aDNSList)
Return True
Next
EndIf
Return False
EndFunc ;==> _NetAdapterSetDNS

Func _NetServerEnum ($iSrvType = -1, $sDomain = '')
Local $uBufPtr = DllStructCreate("ptr;int;int"), $res[1]=[0], $i
Local $uRecord = DllStructCreate("dword;ptr"), $iRecLen = DllStructGetSize($uRecord)
Local $uString = DllStructCreate("char[16]")
Local $uDomain = DllStructCreate("byte[32]"), $pDomain = 0
If Not ($sDomain='' Or $sDomain='*') Then
DllStructSetData($uDomain, 1, StringToBinary($sDomain,2))
$pDomain = DllStructGetPtr($uDomain)
EndIf
Local $ret = DllCall ("netapi32.dll", "int", "NetServerEnum", _
"ptr", 0, "int", 100, _
"ptr", DllStructGetPtr($uBufPtr,1), "int", -1, _
"ptr", DllStructGetPtr($uBufPtr,2), _
"ptr", DllStructGetPtr($uBufPtr,3), _
"int", $iSrvType, "ptr", $pDomain, "int", 0 )
If $ret[0] Then Return SetError(1, $ret[0], '')
Local $res[DllStructGetData($uBufPtr,3)+1]=[DllStructGetData($uBufPtr,3)]
For $i=1 To DllStructGetData($uBufPtr,3)
Local $uRecord = DllStructCreate("dword;ptr", DllStructGetData($uBufPtr,1)+($i-1)*$iRecLen)
Local $sNBName = DllStructCreate("byte[32]", DllStructGetData($uRecord,2))
DllStructSetData($uString,1,BinaryToString(DllStructGetData($sNBName,1),2))
$res[$i] = DllStructGetData($uString,1)
Next
$ret = DllCall ("netapi32.dll", "int", "NetApiBufferFree", "ptr", DllStructGetData($uBufPtr,1))
Return $res
EndFunc ; ==> _NetServerEnum

garanov
17-12-2009, 17:44
хех. смотрится крутовато :o попробую разобраться вечерком .

спасибо!)

garanov
18-12-2009, 11:52
что делает вторая функция ?

Func _NetServerEnum

amel27
18-12-2009, 12:25
что делает вторая функция ? »
аналог консольной "NET VIEW" - выводит в массив список компов в сети




© OSzone.net 2001-2012