0
我正在使用UserPrincipal收集非域成員服務器上本地用戶的詳細信息。我想在密碼過期或過期時向用戶發送電子郵件。POWERSHELL:使用UserPrincipal獲取密碼過期日期
我擁有除最大密碼年齡以外的所有內容。我無法獲得這個價值,我發現所有我認爲不需要的有關Active Directory連接的討論。當我嘗試將其調整到本地服務器時,它不起作用。
以下是我有:
$date = Get-Date
$contextType = [System.DirectoryServices.AccountManagement.ContextType]::Machine
$principalContext = New-Object System.DirectoryServices.AccountManagement.PrincipalContext($contextType)
$principalSearcher = New-Object System.DirectoryServices.AccountManagement.PrincipalSearcher(New-Object System.DirectoryServices.AccountManagement.UserPrincipal($principalContext))
ForEach($userPrincipal in $principalSearcher.FindAll())
{
$maxPasswordAge = 90
$name = $userPrincipal.Name
$samAccountName = $userPrincipal.SamAccountName
$description = $userPrincipal.Description
$fullname = $userPrincipal.DisplayName
$lastPasswordSet = $userPrincipal.LastPasswordSet
$passwordExpires = $lastPasswordSet.AddDays($maxPasswordAge)
$passwordExpiresDays = New-TimeSpan -Start $date -End $passwordExpires
$passwordExpiresDays = [Math]::Floor($passwordExpiresDays.TotalDays)
Write-Host "Name: "$name
Write-Host "SAM Account Name: "$samAccountName
Write-Host "Full Name: "$fullName
Write-Host "Password last set: "$lastPasswordSet
Write-Host "Password expires: "$passwordExpiresDays
Write-Host "Max Password Age: "$maxPasswordAge
}
在上面的代碼我已經手動將該值設置爲90,讓我的代碼工作。我需要用代碼替換它來檢索正確的值。
我試過下面來提取我的UserPrincipal的DirectoryEntry對象,然後將本機對象,但我不能得到它的工作:
$directoryEntry = $userPrincipal.GetUnderlyingObject()
$native = [ADSI]$directoryEntry.NativeObject
我敢肯定它的簡單,我忽略東西明顯....
這將是有意義的代碼明智的,但我們的用戶帳戶會過期,需要密碼被改變。 – neildeadman
查看更新回答 –
這似乎工作,只是測試,並會回覆給你。謝謝。 – neildeadman