
コマンドSearch-ADAccount
レットにはスイッチ-AccountDisabled
、-AccountExpired
があり-AccountInactive
、その結果は相互に排他的でも包括的でもない場合があります。
たとえば、昨日無効になったが、非アクティブになってから 1 週間しか経っていないアカウントは、期間が -90 日の場合、無効として表示されないことがあります。逆に、まだ無効になっていないが、しばらく使用されていないアカウントは、非アクティブとして表示されますが、無効にはなりません。
これらのスイッチを使用して、無効で期限切れの非アクティブなアカウントをすべて一覧表示する方法はありますかOR
。それとも、3 つのクエリを実行してから、| select * -unique
重複を削除する必要があるのでしょうか。
答え1
私ならこうします。
Get-ADUser -Filter * -Properties Enabled, AccountExpirationDate, LastLogonDate | ? { `
($_.Enabled -EQ $False) -OR `
($_.AccountExpirationDate -NE $NULL -AND $_.AccountExpirationDate -LT (Get-Date)) -OR `
($_.LastLogonDate -NE $NULL -AND $_.LastLogonDate -LT (Get-Date).AddDays(-90)) }
AD への 1 回の呼び出しで、必要なプロパティのみが取得されます。無効になっているか、期限切れ (珍しい設定) か、または「非アクティブ」であるすべてのユーザーが含まれます。
ユーザー アカウントが作成されたが、ユーザーがログオンしたことがない場合は、LastLogonDate が null になることに注意してください。
AccountExpirationDate も、管理者がその設定を頻繁に使用しないため、ほとんどの場合 null になります。日付と意味のある比較を行う前に、それらが null でないことを確認する必要があります。
一度もログオンしたことのないユーザー アカウントを含める場合は、LastLogonDate の $Null のチェックを削除するだけです。ただし、これは、昨日作成された可能性があり、まだログインしていないアカウントが表示されることを意味します。その場合、補償として、WhenCreated -LT (Get-Date).AddDays(-90)
90 日以上前に作成されたがログオンしたことのないアカウントのみを取得するようにチェックを追加します。
そして、コマンドレットに関する実際の質問にお答えするとSearch-ADAccount
... いいえ、別のコマンドレットを使用してください。これらのスイッチは相互に排他的です。