一段时间以来,我一直在尝试查找我的 AD 中的错误。
我需要运行一个使用 .NET 6
[System.DirectoryServices.AccountManagement.UserPrincipal]::Current
的软件来获取当前用户显示名称。如果我以域管理员身份登录但不适用于默认用户,则此功能有效。
在新设置的域中,它也适用于所有用户。
你们中有人有解决这个问题的想法吗?现在不可能重新做整个域。
如果我尝试在 PowerShell 中执行以下操作:
Import-Module ActiveDirectory
$user = Get-ADUser -Identity "deinBenutzername" -Properties DisplayName
$user.DisplayName
尽管是普通用户,它仍然可以工作。
如果我尝试作为默认用户:
Add-Type -AssemblyName "System.DirectoryServices.AccountManagement"
$context = New-Object System.DirectoryServices.AccountManagement.PrincipalContext([System.DirectoryServices.AccountManagement.ContextType]::Domain)
$userPrincipal = [System.DirectoryServices.AccountManagement.UserPrincipal]::Current
$displayName = $userPrincipal.DisplayName
我得到的输出是:
Das angegebene Verzeichnisdienstattribut bzw。德安格贝内 Verzeichnisdienstwert ist nicht vorhanden。在 Zeile:2 Zeichen:1
- $userPrincipal = [System.DirectoryServices.AccountManagement.UserPrin ...
+ CategoryInfo : OperationStopped: (:) [], COMException + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException
这意味着:指定的目录服务属性或值不存在
如果我以域管理员身份尝试此操作,它会起作用!
我也尝试过:
如果
Get-ADUser
在您将运行此程序的计算机上可用,那么您可以使用环境变量来获取用户的域和用户名:
$user = Get-ADUser -Server $env:USERDNSDOMAIN -Identity $env:USERNAME
不使用
Get-ADUser
,您可以使用ADSI和WindowsIdentity.GetCurrent()
来获取用户的SID并以这种方式获取帐户:
$u = [ADSI]"LDAP://$($env:USERDNSDOMAIN)/<SID=$([System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value)>"
$u.Properties["displayName"]
但是,我发现如果您有混合 Azure/本地 AD 环境,则 ADSI 方法不起作用。