【问题标题】:PowerShell - Return value of AD User's First and Last namePowerShell - AD 用户的名字和姓氏的返回值
【发布时间】:2016-04-01 04:26:32
【问题描述】:

我正在尝试使用 PowerShell 从 AD 中提取用户的名字和姓氏。

命令:

$GivenName = Get-ADUser -Identity $User | select GivenName
Write-Host $GivenName

返回值:@{GivenName=Bruce} 然后我尝试使用以下命令将字符串减少到我需要的部分:

$First = $GivenName.Replace("@{GivenName=","")
$First = $First.Replace("}","")

这应该去掉除了字符串'Bruce'之外的所有内容

相反,我收到以下错误:

Method invocation failed because [Selected.Microsoft.ActiveDirectory.Management.ADUser] does not contain a method named 'Replace'.
At C:\Users\john.ring\Documents\Scripts\UpdateADUsers.ps1:10 char:5
+     $First = $GivenName.Replace("@{GivenName=","")
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (Replace:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

我的 Google-fu 找不到解决方案。任何关于如何纠正错误或更好地提取用户名字的建议将不胜感激。

【问题讨论】:

  • Select -Expand GivenName
  • 感谢马蒂亚斯!这正是我想要的!

标签: powershell active-directory


【解决方案1】:

当您通过管道将对象传递给Select-Object [propertyname(s)] 时,Select-Object cmdlet 会为您创建一个新对象,其中包含您指定的输入对象的属性。当转换为字符串时,该对象最终会呈现为@{PropertyName1=PropertyValue1[;PropertyNameN=PropertyValue2]}

要获取单个属性的值,仅此而已,请使用-ExpandProperty 参数:

$GivenName = Get-ADUser -Identity $user |Select-Object -ExpandProperty GivenName

由于您需要来自同一用户的多个属性,最好将用户存储在一个变量中并使用. 取消引用运算符来访问GivenNameSurname 属性:

$UserObject = Get-ADUser -Identity $user 
$GivenName  = $UserObject.GivenName
$Surname    = $UserObject.Surname

【讨论】:

    【解决方案2】:

    GivenName 是 Active Directory 中的用户对象属性。您将查询结果存储在名为 $GivenName 的 PowerShell 对象中,但两者并不相同。要引用用户的名字,您需要引用 PowerShell 对象的 GivenName 属性。 $GivenName.GivenName 就是你要找的。​​p>

    如果您将 AD 查询的结果存储在名为 $User 的对象中,则可能不会那么混乱,因此 $User.GivenName 是您引用给定名称属性的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多