Active Directoryセキュリティグループのアカウントグループの最後のパスワード変更を取得する必要があります。これは、PowerShellの優れた点だと感じています。
今、私はすでに、見ているADアカウントからpwdLastSet属性を読み取る方法に行き詰まっています。このような単純なものを実行することさえ:
[adsi] "LDAP://cn=user1,ou=Staff,ou=User Accounts,dc=ramalamadingdong,dc=net" | Format-List *
次のようなpwdLastSetの結果が得られます。
pwdLastSet : {System.__ComObject}
私はこれについて間違った方法で進んでいるように感じます。そのため、pwdLastSet属性の出力を照会してフォーマットする(値はWindows Epochに基づいており、あまり人間が読み取れない)最良の方法は何ですか?
スナップインなしでこれを行うこともできます。私はこれを試してみましたがうまくいきました:
PS#> $ searcher = New-Object DirectoryServices.DirectorySearcher PS#> $ searcher.Filter = "(&(samaccountname = user1))" PS#> $ results = $ searcher.findone() PS#> [datetime] :: fromfiletime($ results.properties.pwdlastset [0]) 2009年6月10日水曜日4: 32:08 PM
次のようにユーザーオブジェクトを設定した場合、pwdLastSetのSystem .__ ComObjectも取得します。
$ user = [adsi] "LDAP:// cn = user1、ou = Staff、ou = User Accounts、dc = ramalamadingdong、dc = net"
[System .__ ComObject] .InvokeMember()とリフレクションを使用して$ userオブジェクトからそのpwdLastSet値を取得する方法があるはずですが、正しく取得できませんでした。私はそれを理解しなかったので、上の例を使用して先に進みました。
AD(またはExchangeまたはSQL Server)で多くの作業を行う場合は、そのスナップインを取得して使用することができます。
Windows 7/Windows Server 2008 R2に付属する組み込みのADコマンドレットで、これを簡単に実行できるようになりました。 PowershellプロンプトからのWindows 7の場合:
Import-Module ActiveDirectory
Get-ADUser 'user1' -properties PasswordLastSet | Format-List
「PasswordLastSet」属性は、実際の「pwdLastSet」属性の翻訳版のようです。
もっと簡単な方法があります。
ADSIオブジェクトには、ConvertLargeIntegerToInt64というメソッドがあります。これはADSIオブジェクトのメソッドであり、タイムスタンプ属性の値をクエリして返されるnot System .__ Comobjectであるため、$ user.pwdLastSet.value.ConvertLargeIntegerToInt64()は機能しないことに注意してください。次のように呼び出す必要があります。
$user.ConvertLargeIntegerToInt64($user.pwdLastSet.value)
上記のBratchで説明したように、読み取り可能な日付に変換する必要があるLDAPタイムスタンプが取得されます。これは、ADSIプロバイダーによって返される任意のタイムスタンプ属性値に対して機能し、ConvertLargeIntegerToInt64メソッドは、ディレクトリエントリを表す任意のオブジェクトによって公開されていると思います。
まとめると、パスワードが最後に設定された日付を取得する方法は次のとおりです。
$user = [ADSI]'LDAP://cn=someusername,ou=someou,dc=somedomain,dc=com'
[datetime]::FromFileTime($user.ConvertLargeIntegerToInt64($user.pwdLastSet.value))
ADコンピューターを表示する簡単な方法を次に示します。
Get-ADComputer -Filter * -Properties name,LastLogonDate,PasswordLastSet,modified,modifyTimeStamp |
FT Name,DNSHostName,LastLogonDate,PasswordLastSet,modified,modifyTimeStamp |
Out-File Computers.csv
ConvertADSLargeInteger関数をスクリプトに追加します。ここで取得できます。
PowerShell:Active Directory IADSLargeIntegerをSystem.Int64に変換
使い方は次のとおりです。
$user = [adsi] "LDAP://cn=user1,ou=Staff,ou=User Accounts,dc=ramalamadingdong,dc=net"
[datetime]::FromFileTimeUtc((ConvertADSLargeInteger $user.pwdlastset.value))
インストール: http://www.quest.com/powershell/activeroles-server.aspx
powerShellを開く
次のコマンドを実行します。
add-PSSnapin quest.activeroles.admanagement
Get-QADUser | ft displayname、PasswordLastSet
最初のコマンドは、ダウンロードしたクエストスナップインをロードします。スタートメニューでクエストのショートカットを使用する場合、これを行う必要はありません。 2番目のコマンドは、すべてのユーザーとユーザーのリスト、およびパスワードが最後に変更された時刻を取得します。
おそらく、passwordLastChangedプロパティの使用を検討する必要があります。詳細については、こちらをご覧ください: http://www.Microsoft.com/technet/scriptcenter/resources/qanda/aug06/hey0801.mspx