ユーザーがコンピューターにログインして、ネットワークおよびドメインベースのリソースにアクセスできるようになる前に、そのコンピューターは Active Directory 環境のメンバーである必要があります。このガイドでは、コンピューター アカウントに関連する日々の作業を自動化する方法(たとえば、アカウントを簡単に作成・名前変更・削除する方法)を紹介します。
最終的に、次のコンピューター アカウント管理タスクを実行する方法を PowerShell で学びます:
- コンピューターをドメインに参加させる
- 複数のコンピューターをドメインに参加させる
- PowerShellでドメインからコンピューターを削除する
- ADでコンピューターオブジェクトを作成する
- CSVファイルからコンピューターアカウントを作成する
- AD からコンピューターを削除する
- リストを使用してコンピューター アカウントを削除する
- PowerShell を使用して Active Directory の期限切れのコンピューター アカウントを削除する
- コンピューター名を変更する
- コンピューター名を変更してドメインに参加させる
- AD コンピューター アカウントを無効化する
- リストを使用してコンピューター アカウントを無効化する
- AD コンピューター アカウントをリセットする
PowerShell ISE は、PowerShell スクリプトを扱うのに最適なツールです。 “Windows+R” を押して、[実行](Run) ウィンドウに “runas /profile /user:Administrator PowerShell_ISE” を入力することで、管理者権限で PowerShell ISE を起動します。(別の方法として、PowerShell ISE のアイコンを右クリックし、[管理者として実行]オプションを選択することもできます。)プロンプトが表示されたら管理者のパスワードを入力してください。
AD とそのオブジェクトを操作する前に、Windows PowerShell 用の Active Directory モジュールをインポートする必要があります。Microsoft Windows Server 2008 R2 では、次のコマンドを実行してこのモジュールを有効化する必要があります:
Import-Module ActiveDirectory
Microsoft Windows Server 2012 以降では、このモジュールは既定で有効になっています。
コンピューターをドメインに参加させる
最も一般的な作業は、コンピューターをドメイン コントローラーに参加させることです。PC を Active Directory ドメイン に参加させるには、次の PowerShell スクリプトをローカルで実行します。
$dc = "ENTERPRISE" # Specify the domain to join.
$pw = "Password123" | ConvertTo-SecureString -asPlainText –Force # Specify the password for the domain admin.
$usr = "$dcT.Simpson" # Specify the domain admin account.
$creds = New-Object System.Management.Automation.PSCredential($usr,$pw)
Add-Computer -DomainName $dc -Credential $creds -restart -force -verbose # Note that the computer will be restarted automatically.
コンピューターが再起動した後でドメインに参加します。既定のコンテナーに追加されます。
リモートでコンピューターを DC に参加(参加登録)させるには、このスクリプトを次のように拡張する必要があります:
$dc = "ENTERPRISE"
$pw = "Password123" | ConvertTo-SecureString -asPlainText -Force
$usr = "$dcT.Simpson"
$pc = "R07GF" # Specify the computer that should be joined to the domain.
$creds = New-Object System.Management.Automation.PSCredential($usr,$pw)
Add-Computer -ComputerName $pc -LocalCredential $pcadmin -DomainName $dc -Credential $creds -Verbose -Restart -Force
$pc 変数と –LocalCredential パラメーターは、コンピューターをドメインに対して認証するために使用されます。この方法を使うには、ローカル コンピューターのファイアウォールを無効にする必要がある点に注意してください。
複数のコンピューターをドメインに参加(参加登録)させる
コマンドラインでコンマ区切りのリストとして指定するか、テキスト ファイルから名前を読み込むことで、ドメインに複数のコンピューターを追加できます。
コンマ区切りのリストでコンピューターを指定する方法は次のとおりです:
$dc = "ENTERPRISE"
$pw = "Password123" | ConvertTo-SecureString -asPlainText -Force
$usr = "$dcT.Simpson"
$pc = "WKS034, WKS052, WKS057" # Specify the computers that should be joined to the domain.
$creds = New-Object System.Management.Automation.PSCredential($usr$pw)
Add-Computer -ComputerName $pc -LocalCredential $pcadmin -DomainName $dc -Credential $creds -Restart -Force
次は、参加(参加する)べきコンピューターの一覧が記載されたテキストファイルの使い方です:
$dc = "ENTERPRISE"
$pw = "Password123" | ConvertTo-SecureString -asPlainText -Force
$usr = "$dcT.Simpson"
$pc = Get-Content -Path C:Computers.txt # Specify the path to the computers list.
$creds = New-Object System.Management.Automation.PSCredential($usr,$pw)
Add-Computer -ComputerName $pc -LocalCredential $pcadmin -DomainName $dc -Credential $creds -Restart -Force
PowerShellでドメインからコンピューターを削除する
リモートでコンピューターをドメインから削除するには、Remove-Computer コマンドレットを使用します。ここではドメインからコンピューターを削除しているため、ローカル資格情報は不要であり、?LocalCredential パラメーターは省略できます:
$dc = "ENTERPRISE"
$pw = "Password123" | ConvertTo-SecureString -asPlainText -Force
$usr = "$dcT.Simpson"
$pc = "R07GF"
$creds = New-Object System.Management.Automation.PSCredential($usr,$pw)
Remove-Computer -ComputerName $pc -Credential $creds –Verbose –Restart –Force
TXT ファイル内のリストを使って複数のコンピューターを削除するには、DC にコンピューターを参加(参加する)させるための上記スクリプトを利用し、Add-Computer コマンドレットを Remove-Computer に置き換えます。この unjoin 操作を完了するには、ドメイン管理者の資格情報が引き続き必要になる点に注意してください。
AD でコンピューター オブジェクトを作成する
コンピューター オブジェクトを作成するには、New-ADComputer コマンドレットを使用します。たとえば、次のコマンドレット パラメーターを実行すると、名前を“WKS932”とし、デフォルトの LDAP パス値を使用するコンピューター オブジェクトを作成できます:
New-ADComputer –Name “WKS932” –SamAccountName “WKS932”
CSV ファイルからコンピューター アカウントを作成する
Active Directory にインポートすべきコンピューターの一覧がある場合は、その一覧を CSV ファイルに保存します。見出しは“computer”とし、その下の列にコンピューター名の一覧を入れてください。次の PowerShell スクリプトをドメイン コントローラー上で実行して、CSV ファイルからコンピューターを追加します。“Path” と “File” の変数が正しく設定されていることを確認してください:
$File="C:scriptsComputers.csv" # Specify the import CSV position.
$Path="OU=Devices,DC=enterprise,DC=com" # Specify the path to the OU.
Import-Csv -Path $File | ForEach-Object { New-ADComputer -Name $_.Computer -Path $Path -Enabled $True}
AD からコンピューターを削除する
AD からコンピューター アカウントを削除するには、Remove-ADObject コマンドレットを使用します。-Identity パラメーターは、削除する Active Directory のコンピューターを指定します。コンピューターの識別名(distinguished name)、GUID、セキュリティ識別子(SID)、または Security Accounts Manager(SAM)アカウント名で指定できます。
Remove-ADObject -Identity "WKS932"
削除の確認を求めるプロンプトが表示されます。
リストを使ってコンピューター アカウントを削除する
古いコンピューターのリストが記載されたテキスト ファイルがある場合、PowerShell を使って削除作業を効率化できます。次のスクリプトは、TXT ファイルからコンピューター名を読み取り、コマンドの連鎖、またはパイプライン(pipeline)によって対応するアカウントを削除します:
Get-Content C:scriptscomputersfordeletion.txt | % { Get-ADComputer -Filter { Name -eq $_ } } | Remove-ADObject -Recursive
より良いグループ管理のために Netwrix Directory Manager の無料トライアルを申し込む
PowerShell を使って Active Directory から古いコンピューター アカウントを削除する
Active Directory の使用期限切れ(古い)アカウントは侵害される可能性があり、セキュリティインシデントにつながるため、常に状況を把握しておくことが重要です。この PowerShell スクリプトは Active Directory を照会し、過去 30 日間ログインがないすべてのコンピューターを返します。スクリプト内で、この既定値を簡単に変更できます。さらに、AD をクリーンに保つために、それらのアカウントを削除します。
$stale = (Get-Date).AddDays(-30) # means 30 days since last logon, can be changed to any number.
Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $stale} | FT Name,lastLogonDate
Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $stale} | Remove-ADComputer
30 日を超えてログインされていないコンピューターが 1 台あります(FS1)。システムは、ドメインから削除する前に確認を促します:
非アクティブなコンピューターアカウントを削除するのではなく無効化したい場合は、Remove-ADComputer の cmdlet を Set-ADComputer と -Enabled $false パラメーターおよび値に置き換えます。
コンピューター名の変更
コンピューター名を変更するには、Rename-Computer の cmdlet を使用します。コンピューターはオンラインであり、Active Directory に接続されている必要がある点に注意してください。
Rename-Computer –ComputerName "FS1" -NewName "FS2"
このスクリプトをローカルで実行する場合、見た目は次のようになります:
Rename-Computer -NewName "newname" -DomainCredential "DomainAdministrator"
コンピューター名を変更してドメインに参加させる
コンピューターをドメインに参加させ、同時に指定した OU に配置することで、名前変更スクリプトを改善できます。このスクリプトは、ドメイン コントローラーではなく、対象のマシンで実行してください。
$NewComputerName = "Server3" # Specify the new computer name.
$DC = "contoso.com" # Specify the domain to join.
$Path = "OU=TestOU,DC=contoso,DC=com" # Specify the path to the OU where to put the computer account in the domain.
Add-Computer -DomainName $DC -OUPath $Path -NewName $NewComputerName –Restart –Force
このスクリプトでは、ドメインにコンピューターを参加させる権限を持つアカウントの認証情報の入力を求め、その後でコンピューターの名前変更、再起動、ドメインへの参加を行います。
AD コンピューター アカウントを無効にする
Disable-ADAccount cmdlet を使用して、Active Directory のユーザー、コンピューター、およびサービス アカウントを無効化できます。コンピューター アカウント名を指定する場合は、名前の末尾にドル記号($)を付けることを忘れないでください。そうしないと、スクリプト実行後にエラーが発生します。
Disable-ADAccount -Identity fs1$
一覧を使用してコンピューター アカウントを無効化する
テキスト ファイル内の一覧を使って、コンピューター アカウントを一括で無効化することもできます:
$Pclist = Get-Content C:scriptsComputer.txt # Specify the path to the computers list.
Foreach($pc in $Pclist)
{
Disable-ADAccount -Identity "$pc"
Get-ADComputer -Identity "$pc" | Move-ADObject -TargetPath “OU=Disabled Computers,DC=enterprise,DC=com”
}
AD コンピューター アカウントをリセットする
ユーザー アカウントと同様に、コンピューター アカウントはパスワードを使って Active Directory とやり取りします。ただしコンピューター アカウントの場合、パスワードの変更はデフォルトで 30 日ごとに開始され、パスワードはドメインの password policy の対象から除外されます。パスワードの変更は AD ではなく、クライアント(コンピューター)によって実行されます。
コンピューターが資格情報をランダムに設定するため、ユーザーは通常コンピューターの資格情報を知りません。 ただし、自分のパスワードを設定することはできます。以下はそのための PowerShell スクリプトです:
$pc = read-host –Prompt “Input computer name to reset“ # Specify the computer name.
$pw = read-host –Prompt “Input random characters for temp password“ –AsSecureString # Specify the password.
Get-ADComputer $pc | Set-ADAccountPassword –NewPassword:$pw -Reset:$true
結論
これで、PowerShell を使って Active Directory のコンピューター アカウントを管理する方法を学びました。これらのスクリプトはすべて、ご自身の目的に合わせて強化していくことができます。
コンピューター アカウントに対する変更をすべて綿密に追跡することが重要です。そうすれば、望ましくない変更をすぐに見つけて、適切に対応できます。
Active Directory グループ管理のベストプラクティス
Active Directory グループ管理のベストプラクティス共有する
もっと詳しく
著者について
Jeff Melnick
システムエンジニアリング ディレクター
Jeff は Netwrix における Global Solutions Engineering の元ディレクターです。彼は長年にわたり Netwrix のブログ執筆者であり、講演者、プレゼンターとしても活躍しています。Netwrix のブログでは、Jeff がシステム管理の体験を大きく改善できるライフハックや、役立つヒント、ちょっとしたコツを共有しています。