元ネタ:そろそろ監査かな、という時のために!? 【備忘録】 WinNTプロバイダとIADsUser
ともかく、ユーザの一覧さえ取れてしまえば、あとはFormat系を使うなりExport系でXMLやCSVにしたり、と思うに召すまま^^
ということで、Active DirecotyとWinNTプロバイダ(含:ローカルユーザ)の一覧を$Users変数に放り込んでみましょう^^
意外に検索しても出てこないので備忘録2として作ってみたです^^;
【Active Directory】.NETのクラスから直接取得☆ でれラクチン^^
直接.NETのクラスをたたいてみる
PS C:\> $ADs = New-Object System.DirectoryServices.DirectorySearcher
PS C:\> $ADs.Filter = "(objectClass=user)"
PS C:\> $ADsUsers = $ADs.FindAll()
PS C:\> $ADsUsers[0] | Get-Member
TypeName: System.DirectoryServices.SearchResult←ありゃりゃ!?
Name MemberType Definition
---- ---------- ----------
Equals Method System.Boolean Equals(Object obj)
GetDirectoryEntry Method System.DirectoryServices.DirectoryEntry GetDirectoryEntry()
~(略)~
なるほど。
$User = $ADsUser[0].GetDirectoryEntry()
ですね^^
PS C:\> $User | Get-Member
TypeName: System.DirectoryServices.DirectoryEntry←やった^^(C)はっぱ隊
ということで、以下のものでOK
---(完成コード:たった3行^^)--
$ADs = New-Object System.DirectoryServices.DirectorySearcher
$ADs.Filter = "(objectClass=user)"
$Users = $ADs.FindAll() | foreach {$_.GetDirectoryEntry()}
【WinNTプロバイダ(含むローカルマシンのユーザ)】えへ☆(ゴルゥぁ、めっちゃワヤでかんわぁ!)
☆まいったぁ、そのままじゃ取得できないではないかorz ちょっとトリッキーに攻めてみました
---(完成コード:たった2行^^;)---
$WMIResult = Get-WmiObject -q "SELECT Name From Win32_UserAccount Where LocalAccount=True"
$Users = $WMIResult | foreach{ [ADSI]("WinNT://./" + $_.name + ",user") }
結局2行でOK.さすがですなぁ。
オブジェクトをそのまま渡せるPowerShellの利点です^^
なんだ、簡単じゃん。
Why don't you select "PowerShell" ?
Let's enjoy our work^^