以前、PSRemoting で AD を操作 という投稿をしました。
AD を PowerShell で操作するための方法をいくつかメモとして。
IT プロフェッショナル向けスクリプト リソース / Working with Active Directory using PowerShell ADSI adapter に PowerShell のサンプルがいくつかありますのでこちらが参考になります。
AD を PowerShell で操作するための方法として、
などがあるかと思います。
Active Directory モジュールを使用するためには、RSAT や管理ツールを明示的に追加する必要があります。
AD をインストールした環境であれば標準で使えるのですが、そのほかの環境では、モジュールをインストールする必要がありますので、DC 以外の環境で実行する場合には別途機能の追加が必要になってきます。
Active Directory モジュールをインストールしない場合には、ADSI 型アダプターや、System.DirectoryServices の名前空間の使用する必要が出てきます。
ADSI 型アダプターや、System.DirectoryServices については AD モジュールをインストールしなくても使用することができます。
細かな操作をするためには、Active Directory モジュールではなく、型アダプターや New-Object で .NET のクラスを使うことになってくるかと思います。
ADSI 型アダプターは System.DirectoryServices.DIrectoryEntry クラスを使っているようなので、どちらも細かなものについてはあまり変わらなそうですが。
ワークグループで実行する場合、ドメインユーザーの資格情報を明示的に使用する必要がありますが、ADSI 型アダプターを使用した場合の資格情報の明示的な設定がわからなかったので、私は System.DirectoryServices の名前空間を使ってみました。
以下は、ワークグループの端末からドメインユーザーの資格情報を使用して、OU を作成し、その OU にユーザーを作成するサンプルになります。
[LDAP://ドメイン名] を指定していますが、特定の DC に向けて実行したい場合は [LDAP://<DC 名>] で指定すれば特定のドメインコントローラーをターゲットにして処理を実行できます。
$dom = New-Object System.DirectoryServices.DirectoryEntry("LDAP://AlwaysOn.local", "ユーザー", "パスワード") $dom.refreshcache() $ou = $dom.Children.Add("OU=TEST", "organizationalUnit") $ou.CommitChanges() $user = $dom.Children.Add("CN=TEST,OU=TEST", "user") $user.Properties["userPrincipalName"].Add("TEST@alwason.local") $user.Properties["sAMAccountName"].Add("TEST") $user.Properties["userAccountControl"].Add(0x10220) $user.CommitChanges() $user.setpassword("パスワード") $user.CommitChanges()
@mutaguchi さんに型アダプターを使った場合の資格情報の設定について教えていただきました。
オブジェクト生成した後にプロパティを設定すればよかったんですね。
New-Object した場合も同様で行けそうですね。
$dom = [ADSI]"LDAP://alwayson.local" $dom.psbase.Username = "<ユーザー名>" $dom.psbase.Password = "<パスワード>"
AD のその他のオブジェクトの作成については Using a CSV file to create users by accessing the System.DirectoryServices namespace from a powershell script が参考になります。
System.DirectoryServices.ActiveDirectoryでレプリケーションを実行 に書かれているように PowerShell でAD の複製等も実行できますので、いろいろと勉強しないといけないですね。