命名って難しい

変数、関数、クラスなどなど実装より命名に毎回悩むタイプの人間による技術についてのメモ。

PowerShellで現在参加しているドメインの各メンバーのパスワード期限を取得する。

下記記事で環境構築しておきながら全部どっとねっとで済ましてしまった。

notshown.hatenablog.jp

SamAccountNameと残り日数CSV出力にしてなんやかんやする予定。

ソースコード

Add-Type -AssemblyName System.DirectoryServices
Add-Type -AssemblyName System.DirectoryServices.AccountManagement

$context  = New-Object System.DirectoryServices.AccountManagement.PrincipalContext( [System.DirectoryServices.AccountManagement.ContextType]::Domain, [System.Environment]::UserDomainName)
$up       = New-Object System.DirectoryServices.AccountManagement.UserPrincipal($context)
$searcher = New-Object System.DirectoryServices.AccountManagement.PrincipalSearcher($up)
$allUsers = $searcher.FindAll()

foreach($user in $allUsers){
    # 有効なアカウントのみ
    if($user.Enabled) {
        $deUser = [System.DirectoryServices.DirectoryEntry]$user.GetUnderlyingObject()
        $expDate = ([System.DateTime]$deUser.PasswordExpirationDate)

        # 今から期限までの期間を取得
        $ts = New-TimeSpan (Get-Date) $expDate

        # とりあえず前後10日の期間で計算する。
        if ( $ts.Days -lt 10 -and $ts.Days -igt -10 ){
            Write-Output ([string]::Join(",", @( $user.SamAccountName, $ts.Days)))
        }
    }
}