2009-11-17 94 views
3

我試圖使用.net 3.5測試「用戶必須更改密碼」使用.NET領域3.5

執行在C#中的一些基本AD用戶同治任務,我有一個System.DirectoryServices.AccountManagement.UserPrincipal對象包含用戶詳細信息。

我可以打電話user.ExpirePasswordNow(),並且用戶將在下次登錄時被迫改變了他們的密碼(與「Active Directory用戶和計算機」 GUI已箱子檢查「用戶下次登錄時須更改密碼」。

不過,我想測試這個屬性的狀態和作用於它? - 我不想只是一直把它真正通過ExpirePasswordNow()功能如何才能做到這一點

我發現的例子表明我的訪問底層的DirectoryEntry及其pwdLastSet屬性 - 但是這顯示爲一個無法穿透的System .__ ComObject類型 - 它可能是一個IADsLargeInteger,但我無法投射由於其「保護級別」而屬於該類型。

我很茫然 - 任何人都可以幫忙嗎?

+0

根據你的問題,在你打電話給ExpirePasswordNow之後,你不能調用ChangePassword嗎? – shahkalpesh

+0

@shahkalpesh:也許我沒有正確解釋。我不想調用ExpirePasswordNow()。我想要做的是查詢用戶是否將被迫在下次登錄時更改。 – Grhm

回答

6

我記得這是從用戶最後一次設置密碼時發現的,但我從來沒有使用它。希望它有幫助......並且我從來沒有嘗試過UserAccountControl屬性,但它看起來不太瘋狂。

Pwd-Last-Set Attribute

如果這個值設置爲0 User-Account-Control屬性不包含UF_DONT_EXPIRE_PASSWD標誌,那麼用戶必須設置在下次登錄時的密碼。

查看用戶帳戶控制,某人包括如何僅讀取此標誌(作爲查詢的一部分)的示例。如果可能的話,將屬性添加到'即將返回'可能會更好。


我認爲這應該在3.5。他們使這個更簡單。我無法讓DirectorySearcher對象返回UserAccountControl標誌,只有這個。也許這就是權限,不知道啊,

Imports System.DirectoryServices.AccountManagement 

Dim pctx = New PrincipalContext(AccountManagement.ContextType.Domain) 
Dim p = UserPrincipal.FindByIdentity(pctx, "andrew") 
If p.LastPasswordSet.HasValue = False Then 
    If p.PasswordNeverExpires = False Then 
     Console.WriteLine("You should have to enter a password next time!") 
    End If 
End If 
+0

謝謝。這似乎是做這項工作。我已經花了很長時間試圖通過PwdLastSet工作並使用UserAccountControl(這似乎不能準確反映它包含的所有標誌!!) – Grhm

+0

很高興它工作:) Twas在黑暗中拍攝,因爲我可以不要惹我自己的賬戶。另外,當使用DirectorySearcher時,__comObject的東西(至少是基類型)會被轉換爲.net類型,比如pwdLastSet。 –

0

這可能幫助:

Password expiration email utility

我已經很難找到一個免費的實用工具 ,將他們的Windows密碼前員工發送電子郵件 是 準備過期,所以我寫了一個C# 控制檯應用程序。

+0

鏈接不再有效... –

相關問題