我正在尝试使用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未能找到解决方案。任何关于如何纠正错误或更好地提取用户名字的建议都将不胜感激。
答案 0 :(得分:0)
GivenName
是Active Directory中的用户对象属性。您将查询结果存储在名为$GivenName
的PowerShell对象中,但两者并不相同。要引用用户的给定名称,您需要引用PowerShell对象的GivenName属性。 $GivenName.GivenName
正是您所寻找的。 p>
如果将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
由于您需要来自同一用户的多个属性,因此最好将用户存储在变量中,并使用.
取消引用运算符访问GivenName
和Surname
属性:
$UserObject = Get-ADUser -Identity $user
$GivenName = $UserObject.GivenName
$Surname = $UserObject.Surname