2016-11-16 5 views
0

私は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 

を、私はその簡単な確信していると私が見落としています明らかに何か....

答えて

0

ローカルユーザーアカウントのパスワードの有効期限がデフォルトで有効になっていないため、値を取得していない可能性があります。

は、手動でコンピュータのローカルセキュリティポリシーでMaximum password ageを有効にする必要があります。


EDIT:あなたは、レジストリから設定をローカルセキュリティポリシーの値を読むことができます:

センスコードが賢明になるだろうが、私たちのユーザーアカウントの有効期限が切れるとパスワードにする必要がない
$maxPasswordAge = (Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters -Name MaximumPasswordAge).MaximumPasswordAge 
+0

変更する。 – neildeadman

+0

答えを –

+0

に更新すると動作しているように見えますが、テストして返信します。ありがとう。 – neildeadman

関連する問題