私はUserPrincipalを使用して、非ドメインメンバーサーバー上のローカルユーザーの詳細を収集しています。自分のパスワードの期限が切れている、または期限切れになっているときに、電子メールで連絡したい。POWERSHELL:UserPrincipalでパスワード有効期限を取得する
私は最大パスワード時代を除くすべてを持っています。私はその価値と、私が必要としないActive Directory接続について話しているすべてを得ることができません。ローカルサーバーに試してみると、動作しません。ここで
は、私が持っているものである:I上記のコードで
$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