Abrufen müssen alle Gruppen, denen der Benutzer angehört... in C++

Ich brauche, um herauszufinden, alle Gruppen, die ein bestimmter Benutzer Mitglied ist. Ich bin mit C++, Powershell, wenn dies das falsche forum ist entschuldige ich mich.

Von dem, was ich im web gefunden, die ich brauche zum abrufen der Eigenschaft memberOf, aber ich bekomme eine Fehlermeldung, dass die Eigenschaft nicht vorhanden ist. Jede Hilfe würde geschätzt werden. Hier ist der code:

HRESULT hrObj = E_FAIL;
HRESULT hr = E_FAIL;
ADS_SEARCHPREF_INFO SearchPrefs;
// COL for iterations
ADS_SEARCH_COLUMN col;
// Handle used for searching
ADS_SEARCH_HANDLE hSearch;

// Search entire subtree from root.
SearchPrefs.dwSearchPref = ADS_SEARCHPREF_SEARCH_SCOPE;
SearchPrefs.vValue.dwType = ADSTYPE_INTEGER;
SearchPrefs.vValue.Integer = ADS_SCOPE_SUBTREE;

// Set the search preference.
DWORD dwNumPrefs = 1;
hr = pSearchBase->SetSearchPreference(&SearchPrefs, dwNumPrefs);
if (FAILED(hr))
{
    return hr;
}

// Create search filter.
LPWSTR pszFormat = L"(&(objectCategory=person)(objectClass=user)(sAMAccountName=%s))";
int len = wcslen(pszFormat) + wcslen(szFindUser) + 1;
LPWSTR pszSearchFilter = new WCHAR[len];
if(NULL == pszSearchFilter)
{
    return E_OUTOFMEMORY;
}

swprintf_s(pszSearchFilter, len, pszFormat, szFindUser);

// Set attributes to return.
LPWSTR pszAttribute[NUM_ATTRIBUTES] = {L"ADsPath"};

// Execute the search.
hr = pSearchBase->ExecuteSearch(pszSearchFilter,
                                pszAttribute,
                                NUM_ATTRIBUTES,
                                &hSearch);
if (SUCCEEDED(hr))
{    
    // Call IDirectorySearch::GetNextRow() to retrieve the next row of data.
    while(pSearchBase->GetNextRow(hSearch) != S_ADS_NOMORE_ROWS)
    {
        // Loop through the array of passed column names and
        // print the data for each column.
        for (DWORD x = 0; x < NUM_ATTRIBUTES; x++)
        {
            // Get the data for this column.
            hr = pSearchBase->GetColumn(hSearch, pszAttribute[x], &col);
            if (SUCCEEDED(hr))
            {
                // Print the data for the column and free the column.
                // Be aware that the requested attribute is type CaseIgnoreString.
                if (ADSTYPE_CASE_IGNORE_STRING == col.dwADsType)
                {
                    IADs *pADS;
                    hr = ADsOpenObject( col.pADsValues->CaseIgnoreString,
                        L"Administrator",
                        L"passW0rd",
                        ADS_SECURE_AUTHENTICATION,
                        IID_IADs,
                        (void**)&pADS);

                    VARIANT var;
                    VariantInit(&var);
                    if (SUCCEEDED(hr))
                    {
                        hr = pADS->GetEx(L"memberOf", &var);  <-- FAILS!!!
                        wprintf(L"Found User.\n",szFindUser); 
                        wprintf(L"%s: %s\r\n",pszAttribute[x],col.pADsValues->CaseIgnoreString); 
                        hrObj = S_OK;
                    }
                }

                pSearchBase->FreeColumn( &col );
            }
            else
            {
                hr = E_FAIL;
            }
        }
    }
    // Close the search handle to cleanup.
    pSearchBase->CloseSearchHandle(hSearch);
}

delete pszSearchFilter;

if (FAILED(hrObj))
{
    hr = hrObj;
}
  • Fordern Sie memberOf und isMemberOf in das angeforderte Feld Attribute.
InformationsquelleAutor user1375218 | 2012-05-04
Schreibe einen Kommentar