PowerShell - AD用户的名字和姓氏的返回值

时间:2016-03-31 19:57:10

标签: powershell active-directory

我正在尝试使用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未能找到解决方案。任何关于如何纠正错误或更好地提取用户名字的建议都将不胜感激。

2 个答案:

答案 0 :(得分:0)

GivenName是Active Directory中的用户对象属性。您将查询结果存储在名为$GivenName的PowerShell对象中,但两者并不相同。要引用用户的给定名称,您需要引用PowerShell对象的GivenName属性。 $GivenName.GivenName正是您所寻找的。

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

答案 1 :(得分:0)

将对象传递给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