有没有办法以编程方式确定 Windows 计算机是否以 SYSTEM 身份加入 AAD?

有没有办法以编程方式确定 Windows 计算机是否以 SYSTEM 身份加入 AAD?

我希望能够通过脚本确定给定的 Windows 工作站是否加入了 AAD、混合 AD 还是本地 AD。

我想从我正在使用的 RMM 运行这个脚本,这样我就可以将这些结果存储在 RMM 中,并且能够轻松地将计算机分组到这三个类别中(加上一个未加入任何类型域的工作站)。

我正在使用的 RMM 以 NT AUTHORITY\SYSTEM 身份运行 powershell 脚本。

获取此信息的通常推荐方法是运行命令

dsregcmd /status

然而,根据微软的文档

dsregcmd /status 实用程序必须作为域用户帐户运行。

我在自己的测试中验证,在 Powershell 中以 NT AUTHORITY\SYSTEM 身份运行 dsregcmd /status 会返回错误

dsregcmd : The term 'dsregcmd' is not recognized as the name of a cmdlet, function, script file, or operable program.

在 cmd 中运行该命令会返回类似的错误。

当我尝试指定 dsregcmd.exe 的完整路径时,错误是一样的。

有没有办法在以 SYSTEM 身份运行时使此命令正常工作?或者,是否有其他方法可以在以 SYSTEM 身份运行时确定工作站是否已加入 AAD?

答案1

查询注册表 https://nerdymishka.com/articles/azure-ad-domain-join-registry-keys/

确定计算机是否加入 AzureAd HKLM:/SYSTEM/CurrentControlSet/Control/CloudDomainJoin/JoinInfo/{Guid}

在该键下,可以找到以下键: – TenantId – UserEmail

$subKey = Get-Item "HKLM:/SYSTEM/CurrentControlSet/Control/CloudDomainJoin/JoinInfo"

$guids = $subKey.GetSubKeyNames()
foreach($guid in $guids) {
    $guidSubKey = $subKey.OpenSubKey($guid);
    $tenantId = $guidSubKey.GetValue("TenantId");
    $userEmail = $guidSubKey.GetValue("UserEmail");
}

相关内容