Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Как получить имя ветки реестра? (http://forum.oszone.net/showthread.php?t=160503)

garanov 16-12-2009 16:09 1296820

Как получить имя ветки реестра?
 
хочу поменять DNS на удаленном компе.

RegWrite("\\10.167.32.100\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Inte rfaces\{E5B0E6CF-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 1296840

Цитата:

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

Вопрос в другом, как определить какую именно ветку нужно считывать, у меня там несколько веток с похожим названием (GUID).
Можно получить данные с каждой из них, но лучше будет определить искомую ветку по её параметрам к примеру (по ключам внутри ветки).

amel27 16-12-2009 16:59 1296865

Цитата:

Цитата garanov
хочу поменять 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 1297436

Опа, спасибо!)

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

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

amel27 17-12-2009 11:10 1297473

Цитата:

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

циклом »

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

garanov 17-12-2009 15:37 1297772

куда это написать то ?) я запутался :(

amel27 17-12-2009 16:13 1297795

Цитата:

Цитата garanov
куда это написать то ? »

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

garanov 17-12-2009 16:19 1297799

ррр. не понял ничерта (

amel27 17-12-2009 16:55 1297820

Код:

$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 1297854

хех. смотрится крутовато :o попробую разобраться вечерком .

спасибо!)

garanov 18-12-2009 11:52 1298400

что делает вторая функция ?

Func _NetServerEnum

amel27 18-12-2009 12:25 1298427

Цитата:

Цитата garanov
что делает вторая функция ? »

аналог консольной "NET VIEW" - выводит в массив список компов в сети


Время: 07:24.

Время: 07:24.
© OSzone.net 2001-