[FAQ CENTER トップ]
[Powershell FAQ トップへ]



【Powershell】Windows AD ドメイン参加コマンド



更新日:2022/03/13


Windows AD ドメインに参加する


Powershell コマンドにより Windows PC をドメインに参加させる方法を紹介します。


手順


(1)参加用アカウント
AD側にドメイン参加専用のアカウントを作成します。

例:

ユーザ名 = joindomainuser

所属するグループ=Domain Usersのみ

ドメイン名=rootdomain.com

(2)権限
"ドメインコントローラセキュリティポリシー"に必要な権限は以下の通りです。
"ドメインにワークステーションを追加"により上記で作成したユーザを設定します。
デフォルトは"Authenticated Users"が可能です。セキュリティの観点より除外することも検討が必要です。("Authenticated Users"は無差別の追加を防止するため10回までのみ追加が可能です。)

ただし上記作成したユーザもドメイン追加は10台のみです。無制限に追加する場合はdomain admin に設定するか回数を緩和します。ただし10台の上限を緩和することも可能です。

参考:ms-DS-MachineAccountQuota 最大値

セキュリティの観点より"joindomainuser"で"対話的ログオン"を禁止することを推奨します。(ローカルログオンを拒否に"joindomainuser"を追加します。)なぜならこのユーザはプログラム上でのみ使用し、実際にユーザがログインして使用するためではないからです。こっそりこのアカウントを使用してログオンされることを防止します。


(3)ドメインに追加する
ドメインにPCを追加するには主に以下の3通りの方法が考えられます。

・GUI でシステムのプロパティから設定
・WMICやPowershellによるコマンドで実行
・Amazon AWS の場合はSSMで実行。 (AD Connectorを使用。ここでユーザ名とpwdを設定)

(4)WMIC コマンドでは以下の方法となります。
上記で作成した"joindomainuser"でコマンドを実行します。wmicは以下のようなコマンドとなります。


wmic.exe ComputerSystem WHERE Name!=null CALL JoinDomainOrWorkgroup Name="<ドメイン名>" Password="<パスワード>" Username="<ユーザー名>" AccountOU="<OU>" FJoinOptions=<オプション>



例:

wmic.exe ComputerSystem WHERE Name!=null CALL JoinDomainOrWorkgroup Name="example.com" Password="password" Username="example.com\username" FJoinOptions=3




成功すれば以下が返されます。


instance of __PARAMETERS
{
ReturnValue = 0;
};




ReturnValue = 1326 の場合はユーザ名、あるいはパスワードに誤りがある可能性があります。

ReturnValue = 8644 の場合はドメインコントローラのSIDと参加させようとしているサーバのSIDが重複している可能性あります。同じマスターから作成した場合などです。参加させようとしているPCでsysprep を実行させる必要あります。


ReturnValue = 5; の場合は以下が考えられます。

・すでに同名のPCがドメインに参加している可能性がある。ドメインから削除する。
・指定したユーザには「ドメインにワークステーションを追加」がない。

ReturnValue = 2691;の場合はすでにこのコンピュータはADに追加されている可能性があります。

FJoinOptionsは以下のとおりです。


NETSETUP_JOIN_DOMAIN (0x00000001)
ドメインに参加するならセット,ワークグループならセットしない。

NETSETUP_ACCT_CREATE (0x00000002)
ドメインでアカウントを作成するならセット



(5)Powershell コマンドでは以下の方法となります。


$pwd = ConvertTo-SecureString -AsPlainText -Force "password”
$cred = New-Object System.Management.Automation.PSCredential("example.com\username",$pwd)
Add-Computer -DomainName "example.com" -Credential $cred



(*)ホスト名を変更してドメインに参加する場合は、Rename-Computer -Force では変更できませんでした。

その代わり以下のコマンドで対応が可能です。


#ドメイン参加
Rename-Computer -NewName $HostName -Force
$pwd=ConvertTo-SecureString -AsPlainText -Force "mypassword"
$cred=New-Object System.Management.Automation.PSCredential("<ドメイン名>\<ユーザ名>",$pwd)

Add-Computer -DomainName <ドメイン名> -NewName <新しいホスト名> -Restart -Options JoinWithNewName
Restart-Computer -Force



"コンピュータ名変更","ドメイン参加"を同時に行いたい場合、Rename-Computerでコンピュータ名を変更すると再起動が必要になってしまいます。
よって"コンピュータ名変更","ドメイン参加"を同時に行う場合、上記のようにJoinWithNewNameオプションを指定するとよいでしょう。(リブート不要で参加。ただし参加後はリブートが必要)


ドメイン参加状況を確認


ドメイン参加状況を確認するコマンドは以下のとおりです。


$CS = Get-WmiObject Win32_ComputerSystem
#ドメイン/ワークグループ名を表示
Write-Host $CS.Domain


if( $CS.PartOfDomain -eq $True )
{
Write-Host "Joining Domain: "
}
else
{
Write-Host "Joining Workgroup: "
}



ドメインから抜けてワークグループに入る


ドメインから抜けてワークグループに入るサンプルは以下の通りです。


$User = "<ドメイン名>\<ワークグループ名>"
$PW = ConvertTo-SecureString -String "<パスワード>" -AsPlainText -Force
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, $PW

Remove-Computer -Credential $Credential -WorkgroupName <参加先ワークグループ名>




例:

$User = "rootdomain.com\joiningaduser"
$PW = ConvertTo-SecureString -String "MyP@ssw@rd9876" -AsPlainText -Force
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, $PW

Remove-Computer -Credential $Credential -WorkgroupName workgroup








[Powershell FAQ トップへ]
[FAQ CENTER トップ]


本サイト内掲載されている情報は、著作権法により保護されています。いかなる場合でも権利者の許可なくコピー、配布することはできません。 このページはリンクフリーです。(このページへの直接リンクも可能です。) Copyright(c) tooljp.com 2007-2018