2016-03-31 39 views
0

我試圖從AD使用PowerShell拉用戶名和姓。PowerShell - AD用戶的名字和姓氏的返回值

的命令:

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

返回的值:@{GivenName=Bruce} 我然後試圖向下降低的字符串只是我需要用下面的命令的部分:

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

這應該剝離所有除了字符串'布魯斯'

而是我得到以下錯誤:

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

'選擇-Expand GivenName' –

+0

感謝馬蒂亞斯!這正是我正在尋找的! –

回答

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 
0

GivenName是Active Directory中的用戶對象屬性。您將查詢結果存儲在名爲$GivenName的PowerShell對象中,但這兩者並不相同。要引用用戶的給定名稱,您需要引用PowerShell對象的GivenName屬性。 $GivenName.GivenName是你在找什麼。

如果您將AD查詢的結果存儲在名爲$User的對象中,那麼它可能不會引起混淆,因此$User.GivenName是您如何引用給定名稱屬性的方式。