2017-08-17 8 views
0

特定のユーザー(domain1/user1)のすべてのグループをフェッチしようとしています... 以下のCプログラム)はうまくいきますが、他のドメインのグループは表示されません。 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のほかに何かを検討するあなたを促すだろう。

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() 
} 

その他の問題:たとえば、ここでユーザのリストを照会PowerShellスクリプトだ私はそれがクロスドメインのクエリを行うことがいかに簡単かわからない - 任意の言語で、任意のAPIと。

この例では、スクリプトを別のドメインの別のPCにコピーし、両方の場所で実行し、結果をメモ帳にマージします。

補遺:

ます。また、このリンクが参考に見つけるかもしれない:

Search Active Directory for User and Office Locations

関連する問題