2016-07-14 18 views
0

我在通過Powershell中的ADUser查看時發現有些奇怪。屬性在PowerShell中無法正確顯示ADUsers

如果我輸入以下內容:

PS> Get-ADUser Xuser -Properties PasswordLastSet, LastLogonDate 

我會得到一個輸出這樣的:

DistinguishedName : CN=Xuser,OU=Domain Users,DC=LocalDC,DC=local 
Enabled   : True 
GivenName   : 
LastLogonDate  : 7/14/2016 8:24:03 AM 
Name    : Xuser 
ObjectClass  : user 
PasswordLastSet : 7/1/2016 11:48:37 AM 
SamAccountName : Xuser 
Surname   : 
UserPrincipalName : 

正如你所看到的,我有PasswordLastSet和LastLogonDate時間戳。

但是,如果我鍵入此如下:

PS> $user = Get-ADUser Xuser 
PS> $user.LastLogonDate -eq $null 
PS> True 
PS> $user.PasswordLastSet -eq $null 
PS> True 

,以確保沒有被搞砸了,我打字:

PS> $user 

DistinguishedName : CN=Xuser,OU=Domain Users,DC=LocalDC,DC=local 
Enabled   : True 
GivenName   : 
LastLogonDate  : 
Name    : Xuser 
ObjectClass  : user 
PasswordLastSet : 
SamAccountName : Xuser 
Surname   : 
UserPrincipalName : 

出於某種原因,該信息顯示$空。

一兩件事我注意到的是,當我輸入:

PS> $user = Get-ADUser Xuser 

它不收集PasswordLastSet和LastLogonDate默認 - 你必須要求特定信息與-Properties開關參數。

如果鍵入:

PS> $user.LastLogonDate 
PS> $user 

現在有LastLogonDate領域,但它是$空。也是一樣,如果我輸入:

PS> $user.PasswordLastSet 
PS> $user 

兩個PasswordLastSet並在輸出$user LastLogonDate演出,但如果我運行情況,看看是否值爲$ null,則返回True

一種鬆軟的行爲,我很好奇它爲什麼這樣做。我受過最好教育的猜測是,$ user只會使用來自Get-ADUser cmdlet的默認信息進行填充,而且它非常簡單,只有所見即所得。爲了獲得這些特定領域,我必須暗中要求他們。

我想看看,如果某些字段被默認是隱藏的(除非在初始Get-ADUser cmdlet的要求),因此,我輸入:

PS> $user.random 
PS> $user 

果然,random :是有一個字段。

我甚至可以去儘可能做到這一點:

PS> $user.random = "Property" 

這表明random : {Property}當我輸入$user

問題:任何人都可以簡單地解釋爲什麼它的行爲這樣?

+0

的可能的複製[PowerShell的功能ValueFromPipelineByPropertyName不使用別名參數名稱(http://stackoverflow.com/questions/29928911/powershell-function-valuefrompipelinebypropertyname-not-using-alias-parameter-na) – briantist

+0

這是AD cmdlet的一個特性,它在鏈接副本中有相當好的解釋。基本上,任何屬性都會像存在一樣(具有$ null值)而不是拋出異常。 – briantist

+0

除了@briantist的說法,'PasswordLastSet'和'LastLogonDate'不是'ADUser'對象的缺省屬性集合的一部分,所以你必須明確地用'-Properties'來請求它們,就像你找到的那樣 –

回答

0

如果你想測試一個變量的內容,而不是僅僅存在嘗試:

$user.LastLogonDate.Length -gt 0