获取 Windows 系统已加入 Azure AD 时登录用户的 UserPrincipalName

Get UserPrincipalName of logged-on user when windows system has joined into Azure AD

本文关键字:登录 用户 UserPrincipalName AD Azure 系统 Windows 获取      更新时间:2023-10-16

尝试获取 Windows 10 上登录用户的 UPN(用户主体名称((以及 Windows 2012 R2 上的所有登录用户(系统加入 Azure AD。

在我的基于 Win32 本机服务的应用程序中TranslateNameW API (https://learn.microsoft.com/en-us/windows/desktop/api/secext/nf-secext-translatenamew( 用于获取登录用户的 UPN。它在加入本地 AD 的系统上运行良好。

wchar_t user_sam[512] = { 0 };
wchar_t user_upn[1024] = { 0 };
DWORD    len = sizeof(user_upn);
swprintf_s(user_sam, L"%ws\%ws", L"AAD", L"naga");
BOOL got_upn = TranslateNameW(user_sam, NameSamCompatible, NameUserPrincipal, user_upn, &len);
if (! got_upn)
   wprintf(L"Failed to get user upn for %ws: %ld", user_sam, GetLastError());

此 API 在加入 Azure AD 的系统上失败,>错误 指定的域不存在或无法联系。

您可以将

GetUserNameExNameUserPrincipal一起使用。这是一个工作示例:

wchar_t user_upn[1024] = { 0 };
DWORD   len = sizeof(user_upn);
if (GetUserNameExW(NameUserPrincipal, user_upn, &len))
{
    std::wcout << "Username=" << user_upn << std::endl;
}

实际上,当您使用/UPN作为参数时,此函数是whoami命令执行的函数。

相关文章: