SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Active Directory モジュールのコマンドレットを使用せずにクラスターで使用するコンピューターアカウントを作成する

leave a comment

Active Directory の操作をする場合、最近の情報では、Active Directory モジュールのコマンドレットを使用するケースが多いかと思います。

環境によっては、AD 用のコマンドレットをインストールせずに AD の操作をする必要も出てくるかと。
クラスターを構築する場合、コンピューターアカウントの作成で、AD の操作をする必要がありますので、簡単なサンプルを。

更新プログラムの適用状況によっては、以下の対応が必要となることもありそうです。
# コンピューターアカウントの作成時点で、UserAccountControl を適切にを設定していないと、primaryGroupID が User になってしまう現象が。
Problem with Active Directory patch MS15-96?
[MS15-096] Active Directory サービスの脆弱性により、サービス拒否が起こる (2015 年 9 月 8 日)

この辺も参考に

Create Active Directory Computer Object

試してみた感じでは以下のようなスクリプトで実行できるかと。

$domain = "AlwaysOn.local"
$OUPath = "OU=Migration,DC=AlwaysOn,DC=Local"
$DomainUser = "AccountOP"
$DomainPassword = "M@sterEr0s"
$ComputerAccount = "Cluster-01"
$ClusterAccount = "AlwaysOn\AccountOP"
# $ClusterAccount = "AlwaysOn\Cluster-01$" # コンピューターアカウントを権限として付与する場合

$ousearch = New-Object System.DirectoryServices.DirectorySearcher
$ousearch.SearchRoot = New-Object System.DirectoryServices.DirectoryEntry("LDAP://$domain/$OUPath", $DomainUser, $DomainPassword)
$ousearch.Filter = "(&(name=$ComputerAccount)(objectClass=computer))"
$ousearch.FindOne()

$dom = New-Object System.DirectoryServices.DirectoryEntry("LDAP://$domain/$OUPath", $DomainUser, $DomainPassword)
$dom.RefreshCache()

if($ousearch.FindOne() -eq $null){
    $ou = $dom.Children.Add("CN=$ComputerAccount", "computer")
    $ou.CommitChanges() | Out-Null
}

# https://social.technet.microsoft.com/Forums/windowsserver/ja-JP/f959f226-0f20-473e-bdf4-50de03732b4e/powershell-creating-a-computer-account-in-active-directory-from-outside-the-domain?forum=winserverDS
$Account = New-Object System.Security.Principal.NTAccount($ClusterAccount)
$perms = New-Object System.DirectoryServices.ActiveDirectoryAccessRule($Account, "GenericAll", "Allow")

$ca = New-Object System.DirectoryServices.DirectoryEntry("LDAP://$domain/CN=$ComputerAccount,$OUPath", $DomainUser, $DomainPassword)
$ca.RefreshCache()

$ca.ObjectSecurity.AddAccessRule($perms)
$ca.sAMAccountName = "$ComputerAccount$"
$ca.userAccountControl = 0x1002
$ca.CommitChanges()

Account Operators に登録されているユーザーで AD を操作して、コンピューターアカウントの作成を実施しています。

そのままだと、クラスターで必要となるコンピューターアカウントの属性が設定されていないため、作成後に属性を少し調整していますが、これで、無効な状態のコンピューターアカウントとして作成されているかと。

Written by masayuki.ozawa

10月 22nd, 2016 at 5:48 pm

Posted in Windows Server

Tagged with

Leave a Reply

*