我在通過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
問題:任何人都可以簡單地解釋爲什麼它的行爲這樣?
的可能的複製[PowerShell的功能ValueFromPipelineByPropertyName不使用別名參數名稱(http://stackoverflow.com/questions/29928911/powershell-function-valuefrompipelinebypropertyname-not-using-alias-parameter-na) – briantist
這是AD cmdlet的一個特性,它在鏈接副本中有相當好的解釋。基本上,任何屬性都會像存在一樣(具有$ null值)而不是拋出異常。 – briantist
除了@briantist的說法,'PasswordLastSet'和'LastLogonDate'不是'ADUser'對象的缺省屬性集合的一部分,所以你必須明確地用'-Properties'來請求它們,就像你找到的那樣 –