Получить список рабочих станций в домене...

Тема в разделе "WASM.NETWORKS", создана пользователем dev, 21 май 2009.

  1. dev

    dev New Member

    Публикаций:
    0
    Регистрация:
    25 авг 2008
    Сообщения:
    39
    Здравствуйте!
    Проблема такая, надо получить список зарегистрированных на контроллере домена рабочих станций, причем всех, как включенных, так и выключенных( Аналог: Виндовый "Поиск в Active Directory" ). Не подскажете как?
    Спасибо.
     
  2. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    msdn.microsoft.com/en-us/library/aa746468(VS.85).aspx

    Или где-то рядом. Поиск по msdn "Searching Active Directory"
     
  3. BaGiE

    BaGiE New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2005
    Сообщения:
    84
    Адрес:
    Mordor
    Код (Text):
    1. var objConnection = new ActiveXObject("ADODB.Connection");
    2. objConnection.Provider = "ADsDSOObject";
    3. objConnection.Open("Active Directory Provider");
    4.  
    5. var objCommand = new ActiveXObject("ADODB.Command");
    6. objCommand.ActiveConnection = objConnection;
    7. objCommand.CommandText = "SELECT Name,Location FROM 'LDAP://DC=corp,DC=company,DC=ru' WHERE objectClass='computer'"
    8.  
    9. objCommand.Properties("Page Size") = 1000;
    10. objCommand.Properties("Searchscope") = 2; // ADS_SCOPE_SUBTREE
    11.  
    12. var objRecordSet = objCommand.Execute();
    13.  
    14. objRecordSet.MoveFirst();
    15.  
    16. while (!objRecordSet.EOF)
    17. {
    18.     WScript.Echo("Computer Name: " + objRecordSet.Fields("Name").Value);
    19.     objRecordSet.MoveNext();
    20. }
    А раз работает через COM то никаких проблем с портацией хоть на асм хоть на сишарп =)
     
  4. BaGiE

    BaGiE New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2005
    Сообщения:
    84
    Адрес:
    Mordor
    Кому надо то вот оригиналы скриптов работы с AD, но на VB :'(мне дак больше JS нравится...)
     
  5. irrona

    irrona Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    178
    Адрес:
    Тирасполь
    а если NetServerEnum ?
     
  6. dev

    dev New Member

    Публикаций:
    0
    Регистрация:
    25 авг 2008
    Сообщения:
    39
    К сожалению скрипты использовать не желательно, а NetServerEnum вернет только список включенных рабочих станций...
     
  7. irrona

    irrona Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    178
    Адрес:
    Тирасполь
    Попробуй связку функций (объявлены в Netapi32.dll):
    Код (Text):
    1. DsGetDcOpen
    2. DsGetDcNext
    3. DsGetDcClose
    либо какую-нибудь из этого списка функций (объявлены в Ntdsapi.dll):
    Код (Text):
    1. DsListSites
    2. DsListDomainsInSite
    3. DsListServersForDomainInSite
     
  8. BaGiE

    BaGiE New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2005
    Сообщения:
    84
    Адрес:
    Mordor
    переписал сегодня скрипт, что был в посте #3 ан фасме. все работает, только надо не забыть изменить wstrQuery для конкретного домена. в сорцах стоит corp.company.ru

    Код (Text):
    1. format PE GUI 5.0
    2. entry EntryProc
    3.  
    4. include 'win32ax.inc'
    5.  
    6. ; ##################################################################################
    7.  
    8. section '.text' code readable executable
    9.  
    10. ;===========================================================;
    11. proc EntryProc
    12. ;===========================================================;
    13.      invoke CoInitialize,0
    14.  
    15.      call NetEnumComputers
    16.  
    17.      invoke CoUninitialize
    18.      invoke ExitProcess,0
    19. endp
    20.  
    21. struc GUID def
    22. {
    23.       match d1-d2-d3-d4-d5, def
    24.       \{
    25.     .data1 dd 0x\#d1
    26.     .data2 dw 0x\#d2
    27.     .data3 dw 0x\#d3
    28.     .data4 db 0x\#d4 shr 8,0x\#d4 and 0FFh
    29.     .data5 db 0x\#d5 shr 40,0x\#d5 shr 32 and 0FFh,0x\#d5 shr 24 and 0FFh,0x\#d5 shr 16 and 0FFh,0x\#d5 shr 8 and 0FFh,0x\#d5 and 0FFh
    30.       \}
    31. }
    32.  
    33. S_OK    = 0
    34. S_FALSE = 1
    35.  
    36. CLSCTX_INPROC_SERVER  = 1
    37. CLSCTX_INPROC_HANDLER = 2
    38. CLSCTX_LOCAL_SERVER   = 4
    39. CLSCTX_REMOTE_SERVER  = 16
    40.  
    41. VT_EMPTY       = 0
    42. VT_NULL        = 1
    43. VT_I2          = 2
    44. VT_I4          = 3
    45. VT_R4          = 4
    46. VT_R8          = 5
    47. VT_CY          = 6
    48. VT_DATE        = 7
    49. VT_BSTR        = 8
    50. VT_DISPATCH    = 9
    51. VT_ERROR       = 10
    52. VT_BOOL        = 11
    53. VT_VARIANT     = 12
    54. VT_UNKNOWN     = 13
    55. VT_DECIMAL     = 14
    56. VT_I1          = 16
    57. VT_UI1         = 17
    58. VT_UI2         = 18
    59. VT_UI4         = 19
    60. VT_I8          = 20
    61. VT_UI8         = 21
    62. VT_INT         = 22
    63. VT_UINT        = 23
    64. VT_VOID        = 24
    65. VT_HRESULT     = 25
    66. VT_PTR         = 26
    67. VT_SAFEARRAY       = 27
    68. VT_CARRAY      = 28
    69. VT_USERDEFINED     = 29
    70. VT_LPSTR       = 30
    71. VT_LPWSTR      = 31
    72. VT_INT_PTR     = 37
    73. VT_UINT_PTR    = 38
    74. VT_FILETIME    = 64
    75. VT_BLOB        = 65
    76. VT_STREAM      = 66
    77. VT_STORAGE     = 67
    78. VT_STREAMED_OBJECT = 68
    79. VT_STORED_OBJECT   = 69
    80. VT_BLOB_OBJECT     = 70
    81. VT_CF          = 71
    82. VT_CLSID       = 72
    83. VT_VECTOR      = 0x1000
    84. VT_ARRAY       = 0x2000
    85. VT_BYREF       = 0x4000
    86. VT_RESERVED    = 0x8000
    87. VT_ILLEGAL     = 0xffff
    88. VT_ILLEGALMASKED   = 0x0fff
    89. VT_TYPEMASK    = 0x0fff
    90.  
    91. struct VARIANTARG
    92.   vt         dw ?
    93.   wReserved1 dw ?
    94.   wReserved2 dw ?
    95.   wReserved3 dw ?
    96.   data       db 8 dup (?)
    97. ends
    98.  
    99. adCmdUnspecified = 0xffffffff
    100. adCmdUnknown     = 0x00000008
    101. adCmdText    = 0x00000001
    102. adCmdTable   = 0x00000002
    103. adCmdStoredProc  = 0x00000004
    104. adCmdFile    = 0x00000100
    105. adCmdTableDirect = 0x00000200
    106.  
    107. adOptionUnspecified = 0xffffffff
    108. adAsyncExecute      = 0x00000010
    109. adAsyncFetch        = 0x00000020
    110. adAsyncFetchNonBlocking = 0x00000040
    111. adExecuteNoRecords  = 0x00000080
    112.  
    113. ; ADODBConnection
    114.  
    115. CLASS_ADODBConnection GUID 00000514-0000-0010-8000-00AA006D2EA4
    116. IID_ADODBConnection GUID 00000550-0000-0010-8000-00AA006D2EA4
    117.  
    118. interface ADODBConnection,\
    119.       QueryInterface,\    ; IUnknown
    120.       AddRef,\
    121.       Release,\
    122.       GetTypeInfoCount,\      ; IDispatch
    123.       GetTypeInfo,\
    124.       GetIDsOfNames,\
    125.       Invoke,\
    126.       Get_Properties,\    ; _ADO
    127.       Get_ConnectionString,\  ; Connection15
    128.       Set_ConnectionString,\
    129.       Get_CommandTimeout,\
    130.       Set_CommandTimeout,\
    131.       Get_ConnectionTimeout,\
    132.       Set_ConnectionTimeout,\
    133.       Get_Version,\
    134.       Close,\
    135.       Execute,\
    136.       BeginTrans,\
    137.       CommitTrans,\
    138.       RollbackTrans,\
    139.       Open,\
    140.       Get_Errors,\
    141.       Get_DefaultDatabase,\
    142.       Set_DefaultDatabase,\
    143.       Get_IsolationLevel,\
    144.       Set_IsolationLevel,\
    145.       Get_Attributes,\
    146.       Set_Attributes,\
    147.       Get_CursorLocation,\
    148.       Set_CursorLocation,\
    149.       Get_Mode,\
    150.       Set_Mode,\
    151.       Get_Provider,\
    152.       Set_Provider,\
    153.       Get_State,\
    154.       OpenSchema,\
    155.       Cancel          ; _Connection
    156.  
    157. ; ADODBCommand
    158.  
    159. CLASS_ADODBCommand GUID 00000507-0000-0010-8000-00AA006D2EA4
    160. IID_ADODBCommand GUID 0000054E-0000-0010-8000-00AA006D2EA4
    161.  
    162. interface ADODBCommand,\
    163.       QueryInterface,\    ; IUnknown
    164.       AddRef,\
    165.       Release,\
    166.       GetTypeInfoCount,\      ; IDispatch
    167.       GetTypeInfo,\
    168.       GetIDsOfNames,\
    169.       Invoke,\
    170.       Get_Properties,\    ; _ADO
    171.       Get_ActiveConnection,\  ; Command15
    172.       Set_ActiveConnection,\
    173.       Set_ActiveConnection2,\
    174.       Get_CommandText,\
    175.       Set_CommandText,\
    176.       Get_CommandTimeout,\
    177.       Set_CommandTimeout,\
    178.       Get_Prepared,\
    179.       Set_Prepared,\
    180.       Execute,\
    181.       CreateParameter,\
    182.       Get_Parameters,\
    183.       Set_CommandType,\
    184.       Get_CommandType,\
    185.       Get_Name,\
    186.       Set_Name,\
    187.       Get_State,\         ; _Command
    188.       Cancel
    189.  
    190. ; ADODBRecordset
    191.  
    192. CLASS_Recordset GUID 00000535-0000-0010-8000-00AA006D2EA4
    193. IID_Recordset GUID 00000555-0000-0010-8000-00AA006D2EA4
    194.  
    195. interface ADODBRecordset,\    ; IUnknown
    196.       QueryInterface,\
    197.       AddRef,\
    198.       Release,\
    199.       GetTypeInfoCount,\      ; IDispatch
    200.       GetTypeInfo,\
    201.       GetIDsOfNames,\
    202.       Invoke,\
    203.       Get_Properties,\    ; _ADO
    204.       Get_AbsolutePosition,\  ; Recordset15
    205.       Set_AbsolutePosition,\
    206.       Set_ActiveConnection,\
    207.       Set_ActiveConnection2,\
    208.       Get_ActiveConnection,\
    209.       Get_BOF,\
    210.       Get_Bookmark,\
    211.       Set_Bookmark,\
    212.       Get_CacheSize,\
    213.       Set_CacheSize,\
    214.       Get_CursorType,\
    215.       Set_CursorType,\
    216.       Get_EOF,\
    217.       Get_Fields,\
    218.       Get_LockType,\
    219.       Set_LockType,\
    220.       Get_MaxRecords,\
    221.       Set_MaxRecords,\
    222.       Get_RecordCount,\
    223.       Set_Source,\
    224.       Set_Source2,\
    225.       Get_Source,\
    226.       AddNew,\
    227.       CancelUpdate,\
    228.       Close,\
    229.       Delete,\
    230.       GetRows,\
    231.       Move,\
    232.       MoveNext,\
    233.       MovePrevious,\
    234.       MoveFirst,\
    235.       MoveLast,\
    236.       Open,\
    237.       Requery,\
    238.       xResync,\
    239.       Update,\
    240.       Get_AbsolutePage,\
    241.       Set_AbsolutePage,\
    242.       Get_EditMode,\
    243.       Get_Filter,\
    244.       Set_Filter,\
    245.       Get_PageCount,\
    246.       Get_PageSize,\
    247.       Set_PageSize,\
    248.       Get_Sort,\
    249.       Set_Sort,\
    250.       Get_Status,\
    251.       Get_State,\
    252.       xClone,\
    253.       UpdateBatch,\
    254.       CancelBatch,\
    255.       Get_CursorLocation,\
    256.       Set_CursorLocation,\
    257.       NextRecordset,\
    258.       Supports,\
    259.       Get_Collect,\
    260.       Set_Collect,\
    261.       Get_MarshalOptions,\
    262.       Set_MarshalOptions,\
    263.       Find,\
    264.       Cancel,\        ; Recordset20
    265.       Get_DataSource,\
    266.       Set_DataSource,\
    267.       Save,\
    268.       Get_ActiveCommand,\
    269.       Set_StayInSync,\
    270.       Get_StayInSync,\
    271.       GetString,\
    272.       Get_DataMember,\
    273.       Set_DataMember,\
    274.       CompareBookmarks,\
    275.       Clone,\
    276.       Resync,\
    277.       Seek,\          ; _Recordset
    278.       Set_Index,\
    279.       Get_Index
    280.  
    281. ; ADODBFields
    282.  
    283. interface ADODBFields,\
    284.       QueryInterface,\   ; IUnknown
    285.       AddRef,\
    286.       Release,\
    287.       GetTypeInfoCount,\ ; IDispatch
    288.       GetTypeInfo,\
    289.       GetIDsOfNames,\
    290.       Invoke,\
    291.       Get_Count,\        ; _Collection
    292.       NewEnum,\
    293.       Refresh,\
    294.       Get_Item,\         ; Fields15
    295.       Append,\       ; Fields
    296.       Delete
    297.  
    298. ; ADODBField
    299.  
    300. interface ADODBField,\
    301.       QueryInterface,\  ; IUnknown
    302.       AddRef,\
    303.       Release,\
    304.       GetTypeInfoCount,\    ; IDispatch
    305.       GetTypeInfo,\
    306.       GetIDsOfNames,\
    307.       Invoke,\
    308.       Get_Properties,\  ; _ADO
    309.       Get_ActualSize,\  ; Field
    310.       Get_Attributes,\
    311.       Get_DefinedSize,\
    312.       Get_Name,\
    313.       Get_Type_,\
    314.       Get_Value,\
    315.       Set_Value,\
    316.       Get_Precision,\
    317.       Get_NumericScale,\
    318.       AppendChunk,\
    319.       GetChunk,\
    320.       Get_OriginalValue,\
    321.       Get_UnderlyingValue,\
    322.       Get_DataFormat,\
    323.       Set_DataFormat,\
    324.       Set_Precision,\
    325.       Set_NumericScale,\
    326.       Set_Type,\
    327.       Set_DefinedSize,\
    328.       Set_Attributes
    329.  
    330.  
    331. ;===========================================================;
    332. proc NetEnumComputers
    333. ;===========================================================;
    334.  
    335.      locals
    336.     connection ADODBConnection
    337.     command ADODBCommand
    338.     recordset ADODBRecordset
    339.     fields ADODBFields
    340.     field ADODBField
    341.     bstrProvider dd ?
    342.     bstrDataSource dd ?
    343.     bstrQuery dd ?
    344.     recordset_eof dd ?
    345.     value VARIANTARG
    346.      endl
    347.  
    348.      xor eax,eax
    349.      mov [connection],eax
    350.      mov [command],eax
    351.      mov [recordset],eax
    352.  
    353.      invoke SysAllocString,wstrProvider
    354.      mov [bstrProvider],eax
    355.      invoke SysAllocString,wstrDataSource
    356.      mov [bstrDataSource],eax
    357.      invoke SysAllocString,wstrQuery
    358.      mov [bstrQuery],eax
    359.  
    360.      invoke CoCreateInstance,CLASS_ADODBConnection,0,CLSCTX_INPROC_SERVER,IID_ADODBConnection,addr connection
    361.      .if eax <> S_OK
    362.      invoke MessageBoxA,HWND_DESKTOP,'ADODBConnection failed.',0,MB_ICONERROR
    363.      jmp .exit
    364.      .endif
    365.  
    366.      invoke CoCreateInstance,CLASS_ADODBCommand,0,CLSCTX_INPROC_SERVER,IID_ADODBCommand,addr command
    367.      .if eax <> S_OK
    368.      invoke MessageBoxA,HWND_DESKTOP,'ADODBCommand failed.',0,MB_ICONERROR
    369.      jmp .exit
    370.      .endif
    371.  
    372.      cominvk connection,Set_Provider,[bstrProvider]
    373.      .if eax <> S_OK
    374.      invoke MessageBoxA,HWND_DESKTOP,'Set_Provider failed.',0,MB_ICONERROR
    375.      jmp .exit
    376.      .endif
    377.  
    378.      cominvk connection,Open,[bstrDataSource],0,0,0
    379.      .if eax <> S_OK
    380.      invoke MessageBoxA,HWND_DESKTOP,'Open connection failed.',0,MB_ICONERROR
    381.      jmp .exit
    382.      .endif
    383.  
    384.      cominvk command,Set_ActiveConnection,[connection]
    385.      .if eax <> S_OK
    386.      invoke MessageBoxA,HWND_DESKTOP,'Set_ActiveConnection failed.',0,MB_ICONERROR
    387.      jmp .exit
    388.      .endif
    389.  
    390.       cominvk command,Set_CommandText,[bstrQuery]
    391.      .if eax <> S_OK
    392.      invoke MessageBoxA,HWND_DESKTOP,'Set_CommandText failed.',0,MB_ICONERROR
    393.      jmp .exit
    394.      .endif
    395.  
    396.      cominvk command,Execute,0,0,adCmdText,addr recordset
    397.      .if eax = 0x80040E37 ; table does not exist
    398.      invoke MessageBoxA,HWND_DESKTOP,'Unable to connect to a Domain Controller. Make sure that the value of wstrQuery variable is correct and try again.',0,MB_ICONERROR
    399.      jmp .exit
    400.      .endif
    401.      .if eax <> S_OK
    402.      invoke MessageBoxA,HWND_DESKTOP,'Execute command failed.',0,MB_ICONERROR
    403.      jmp .exit
    404.      .endif
    405.  
    406.      cominvk recordset,MoveFirst
    407.      .if eax <> S_OK
    408.      invoke MessageBoxA,HWND_DESKTOP,'MoveFirst failed.',0,MB_ICONERROR
    409.      jmp .exit
    410.      .endif
    411.  
    412.      .repeat
    413.         cominvk recordset,Get_EOF,addr recordset_eof
    414.         .if eax <> S_OK
    415.         invoke MessageBoxA,HWND_DESKTOP,'Get_EOF failed.',0,MB_ICONERROR
    416.         jmp .exit
    417.         .endif
    418.         cmp word [recordset_eof],0
    419.         jnz .exit
    420.  
    421.         cominvk recordset,Get_Fields,addr fields
    422.         .if eax <> S_OK
    423.         invoke MessageBoxA,HWND_DESKTOP,'Get_Fields failed.',0,MB_ICONERROR
    424.         jmp .exit
    425.         .endif
    426.  
    427.         ; put VARIANTARG struct into the stack. 1 is a column number (column "Name")
    428.         cominvk fields,Get_Item,VT_I4,0,1,0,addr field
    429.         .if eax <> S_OK
    430.         invoke MessageBoxA,HWND_DESKTOP,'Get_Item failed.',0,MB_ICONERROR
    431.         jmp .exit
    432.         .endif
    433.  
    434.         cominvk field,Get_Value,addr value
    435.         .if eax <> S_OK
    436.         invoke MessageBoxA,HWND_DESKTOP,'Get_Value failed.',0,MB_ICONERROR
    437.         jmp .exit
    438.         .endif
    439.  
    440.         invoke VariantChangeType,addr value,addr value,0,VT_BSTR
    441.         .if eax <> S_OK
    442.         invoke MessageBoxA,HWND_DESKTOP,'Value conversion failed.',0,MB_ICONERROR
    443.         jmp .exit
    444.         .endif
    445.  
    446.         invoke MessageBoxW,HWND_DESKTOP,dword[value.data],dword[value.data],MB_ICONINFORMATION
    447.  
    448.         invoke VariantClear,addr value
    449.  
    450.         cominvk recordset,MoveNext
    451.      .until word [recordset_eof] <> 0
    452.  
    453. .exit:
    454.      invoke SysFreeString,[bstrProvider]
    455.      invoke SysFreeString,[bstrDataSource]
    456.      invoke SysFreeString,[bstrQuery]
    457.  
    458.      .if [recordset]
    459.      cominvk recordset,Close
    460.      cominvk recordset,Release
    461.      .endif
    462.  
    463.      .if [command]
    464.      cominvk command,Release
    465.      .endif
    466.  
    467.       .if [connection]
    468.      cominvk connection,Close
    469.      cominvk connection,Release
    470.      .endif
    471.  
    472.      ret
    473. endp
    474.  
    475. ; ##################################################################################
    476.  
    477. section '.data' data readable writeable
    478.  
    479. wstrProvider du 'ADsDSOObject',0 ; 'Microsoft.Jet.OLEDB.4.0'
    480. wstrDataSource du 'Active Directory Provider',0 ; 'c:\\db1.mdb'
    481. wstrQuery du 'SELECT Name,Location FROM ''LDAP://DC=corp,DC=company,DC=ru'' WHERE objectClass=''computer''',0 ; 'SELECT * FROM Table1'
    482.  
    483. ; ##################################################################################
    484.  
    485. section '.idata' data import readable writeable
    486.  
    487.      library kernel32,'KERNEL32.DLL',\
    488.          user32,'USER32.DLL',\
    489.          ole32,'OLE32.DLL',\
    490.          oleaut32,'OLEAUT32.DLL'
    491.  
    492.      import_kernel32
    493.      import_user32
    494.  
    495.      import ole32,\
    496.         CoCreateInstance,'CoCreateInstance',\
    497.         CoInitialize,'CoInitialize',\
    498.         CoUninitialize,'CoUninitialize'
    499.  
    500.      import oleaut32,\
    501.         SysAllocString,'SysAllocString',\
    502.         SysFreeString,'SysFreeString',\
    503.         VariantChangeType,'VariantChangeType',\
    504.         VariantClear,'VariantClear'
    505.  
    506. ; ##################################################################################