元ネタ:そろそろ監査かな、という時のために!? 【備忘録】 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^^
某熱湯で回答した時に思い出した。
そろそろ、きゃつらがやって来る...という方のための備忘録
クライアントに入っているローカルユーザの一覧を出せなんて言われた時のために...
今年はPowerShellで!、がトレンドです^^
#まだVBScriptでCSVを作りますか?
◆IADsUserで操作できるプロパティとメソッド一覧
「IADsUser Property Methods (Windows)」
http://msdn2.microsoft.com/en-us/library/aa746343(VS.85).aspx
◆WinNTプロバイダでは利用できないActive Directory固有の設定
「Unsupported IADsUser Properties (Windows)」
http://msdn2.microsoft.com/en-us/library/aa746507(VS.85).aspx
◆WinNTプロバイダでしか利用できない設定
「WinNT Custom User Properties (Windows)」
http://msdn2.microsoft.com/en-us/library/aa746535.aspx