【问题标题】:Extended Attribute Unresolvable, Powershell扩展属性不可解析,Powershell
【发布时间】:2017-12-06 17:26:51
【问题描述】:

我正在尝试设置一种方法,用户可以在该方法中告诉我用户名,我将其插入,它将返回他们的计算机名。

//获取用户名

$username = Read-Host -prompt 'Username'

//获取DistinguishedName并保存

$usernameDN = Get-ADUser $username -properties * | SELECT DistinguishedName

//获取计算机名
//这个每次都失败

Get-ADComputer -Filter {ManagedBy -eq $usernameDN} -properties * | SELECT CN,ManagedBy

//我收到的错误...几乎就像它必须是一个字符串一样

Get-ADComputer:无效值:''为扩展属性指定: '管理人'。在行:1 字符:1 + Get-ADComputer -Filter {ManagedBy -eq $usernamedn} -properties * |东南... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Get-ADComputer], ArgumentException + FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.ArgumentException,Microsoft.ActiveDirectory.Management.Comm ands.GetADComputer

//所以你把它写成字符串

PS C:\WINDOWS\system32> Get-ADComputer -Filter {ManagedBy -eq '$usernamedn'} -properties * | SELECT CN,ManagedBy

//错误

Get-ADComputer:扩展属性中提供的身份信息: 'ManagedBy' 无法解决。原因:'找不到对象 身份:'$usernamedn' 下:'DC=****,DC=*****'.'。在行:1 字符:1 + Get-ADComputer -Filter {ManagedBy -eq '$usernamedn'} -properties * | ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidData: (:) [Get-ADComputer], ADIdentityResolutionException + FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityResolutionException ,Microsoft.ActiveDirectory.Management.Commands.GetADComputer

//但是,如果您将变量替换为文字 DistinguishedName...它将起作用

PS C:\WINDOWS\system32> Get-ADComputer -Filter {ManagedBy -eq 'CN=*******\, ***** *.,OU=********,OU=*****,OU=******,DC=*****,DC=******'} -properties * | SELECT CN,ManagedBy

//结果

CN        ManagedBy
--        ---------
********* CN=**\, ** *.,OU=***,OU=***,OU=***,DC=***,DC=**
********* CN=**\, ** *.,OU=***,OU=***,OU=***,DC=***,DC=**

所以我认为我的问题是过滤器要求它是字符串,但我无法找出正确的转义来使变量以这种方式读取。

我也尝试过格式化字符串,但我还没有完全理解

谢谢,

【问题讨论】:

    标签: powershell variables active-directory escaping


    【解决方案1】:

    我建议使用 -LDAPFilter 而不是 -Filter 并使用 LDAP 过滤器字符串:

    Get-ADUser -LDAPFilter "(managedBy=$usernameDN)"
    

    学习LDAP search filter syntax 是值得的,因为无论如何这就是PowerShell 必须将-Filter“翻译”成的东西。

    【讨论】:

    • 这不会返回错误,但也会返回一个空结果;我知道情况并非如此,因为我可以硬编码变量的值并且它会起作用。
    • 我的问题是错误地存储了变量。我存储的是完整值,而不是使用 -expand 来仅捕获文字值。 stackoverflow.com/questions/10072911/…
    【解决方案2】:

    这只是一个表达问题,你的例子对我来说很好。您只是缺少 {} 中的 ()。

    Get-ADComputer -Filter {(ManagedBy -eq $usernameDN)} -properties * | SELECT CN,ManagedBy
    

    【讨论】:

      猜你喜欢
      • 2010-11-14
      • 2023-03-26
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多