2017-08-17 44 views
0

我正努力爲給定用戶(domain1/user1)獲取所有組... 下面的C程序(在domain1中的機器上運行)工作正常,但它不顯示來自其他域的組.. User1也是domain2的一部分,但下面的代碼不顯示該信息.. 我突然想出其他選項,但沒有運氣。 。 難道你們提供什麼建議?爲給定用戶提取所有組(全局,通用,域本地)

void printGroups() 
{ 
IADsUser *pUser; 
IADsMembers *pGroups; 
HRESULT hr = CoInitialize(NULL); 
if (FAILED(hr)) return -1; 
IID iid = IID_IADsUser; 
hr = ADsGetObject(L"WinNT://domain1/user1", &iid, (void**)&pUser); 

if (FAILED(hr)) { 
printf("blad"); 
return -1; 
} 

pUser->lpVtbl->Groups(pUser, &pGroups); 
//pUser->Groups(&pGroups); 
pUser->lpVtbl->Release(pUser); 
//pUser->Release(); 
if (FAILED(hr)) return -1; 

IUnknown *pUnk; 
hr = pGroups->lpVtbl->get__NewEnum(pGroups, &pUnk); 
if (FAILED(hr)) return -1; 
pGroups->lpVtbl->Release(pGroups); 

IEnumVARIANT *pEnum; 
iid = IID_IEnumVARIANT; 
hr = pUnk->lpVtbl->QueryInterface(pUnk, &iid, (void**)&pEnum); 
if (FAILED(hr)) return -1; 

pUnk->lpVtbl->Release(pUnk); 

// Enumerate. 
BSTR bstr; 
VARIANT var; 
IADs *pADs; 
ULONG lFetch; 
IDispatch *pDisp; 

VariantInit(&var); 
hr = pEnum->lpVtbl->Next(pEnum, 1, &var, &lFetch); 
while (hr == S_OK) 
{ 
if (lFetch == 1) 
{ 
pDisp = V_DISPATCH(&var); 
iid = IID_IADs; 
pDisp->lpVtbl->QueryInterface(pDisp, &iid, (void**)&pADs); 
pADs->lpVtbl->get_Name(pADs, &bstr); 
//printf("Group Name: %S\n", bstr); 
pADs->lpVtbl->get_ADsPath(pADs, &bstr); 
printf("Group ADPath: %S\n", bstr); 
SysFreeString(bstr); 
pADs->lpVtbl->Release(pADs); 
} 
VariantClear(&var); 
pDisp = NULL; 
hr = pEnum->lpVtbl->Next(pEnum, 1, &var, &lFetch); 
}; 
hr = pEnum->lpVtbl->Release(pEnum); 
return 0; 

} 

回答

0

我強烈建議你考慮除了那古老的COM/ActiveX API別的東西。例如,這裏有一個PowerShell腳本,對用戶的列表查詢:

import-module activedirectory 
echo "" 
echo "User Memberships:" 
try { 
    $users = @(
    "John", 
    "Paul", 
    "George", 
    "Ringo") 
    foreach ($u in $users) { 
    echo "USER: $u" 
    Get-ADUser -Identity $u -Properties MemberOf 
    } 
} 
catch { 
    $errmsg = "ERROR:Get-ADGroupMember(" + $g + "): " + $error 
    $errmsg 
    $error.Clear() 
} 

的另一個問題:我不知道它是多麼容易做跨域查詢 - 在任何語言,任何API。

在這個例子中,我將腳本複製到另一個域上的一臺獨立的PC上,在兩個地方運行它,然後將結果與記事本合併。

附錄:

您也可能會發現此鏈接有用:

Search Active Directory for User and Office Locations

相關問題