Microsoft Active Directory - 使用 [System.DirectoryServices.AccountManagement.UserPrincipal]::当前错误属性获取用户显示名称

问题描述 投票:0回答:1

一段时间以来,我一直在尝试查找我的 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
    

这意味着:指定的目录服务属性或值不存在

如果我以域管理员身份尝试此操作,它会起作用!

我也尝试过:

  • 在测试用户上添加对 SELF 的完全访问权限(注销、重新启动,所有这些)
  • 添加对帐户本身的完全访问权限(域\测试用户...)
  • 添加读取权限以读取所有AD用户/属性
c# .net windows active-directory activedirectorymembership
1个回答
0
投票

如果

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 方法不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.