Netwrix 1Secureは、データとアイデンティティ全体にわたる統合された可視性を提供します。14日間の無料トライアルでフルアクセス可能です。無料トライアルを開始

リソースセンターブログ

PowerShell で OU を管理し、そのオブジェクトを移動する

PowerShell で OU を管理し、そのオブジェクトを移動する

Jun 17, 2023

組織単位(OU)とは、Active Directory にあるコンテナーのことで、ユーザー、グループ、コンピューター、さらに他の OU などを保存できます。AD ドメイン は、それぞれ独自の組織単位階層を持つことができます。

この記事では、OU の管理について、そして PowerShell スクリプトを使って AD 内の組織単位を作成・移動・削除する方法、グループ ポリシー を OU に関連付ける方法、そしてコンピューターおよびユーザー アカウントを別の OU に移動する方法を学びます。

PowerShell ISE は PowerShell スクリプトを扱うのに最適なツールです。まず「Windows+R」を押し、「実行」ウィンドウに「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 以降では、このモジュールはデフォルトで有効になっています。

PowerShell を使って Active Directory ドメインで OU を作成する

次を使用して Active Directory に新しい組織単位(OU)を作成できます。New-ADOrganizationalUnit cmdlet と、新しい OU オブジェクトの名前を指定します。デフォルトでは、PowerShell はドメインのルートに OU を作成します。以下のコマンドは、DC 上に「Regions」という名前の OU を作成します:

      New-ADOrganizationalUnit “Regions”
      

別の OU の LDAP パスが必要な場合は、–Path cmdlet パラメーターを使用して、その識別名(distinguished name)を指定します:

      New-ADOrganizationalUnit “Regions” –Path “OU=Managers,DC=Enterprise,DC=com”
      
Directory tree for 'enterprise.com' with folders like 'Managers' and listed user accounts including 'Bill Jackson'.

OU を別の LDAP アドレスに移動する

OU を別の場所に移動する必要がある場合は、Move-ADObject cmdlet を使用します。なお、ターゲットの OU は誤って削除されないよう保護されていてはいけません。保護されている場合は、このコマンドでその保護を解除します:

      Set-ADOrganizationalUnit -Identity "OU=Regions,OU=Managers,DC=Enterprise,DC=Com" -ProtectedFromAccidentalDeletion $False
      

これで、OU を別の場所に移動できます:

      Move-ADObject -Identity "OU=Regions,OU=Managers,DC=Enterprise,DC=Com" -TargetPath "OU=IT,DC=Enterprise,DC=Com"
      

OU の名前を変更する

組織単位の名前を変更するには Rename-ADObject コマンドレットを使用します。-Identity パラメーターは、名前を変更する Active Directory オブジェクトを指定し、識別名(DN)または GUID のいずれかが必要です。

このコマンドは「Regions」の OU を「Districts」に名前変更します:

      Rename-ADObject -Identity "OU=Regions,OU=IT,DC=enterprise,DC=COM" -NewName Districts
      

または、 Get-ADOrganizationalUnit コマンドレットに -Filter パラメーターを指定することもできます。OU への完全な LDAP パスは不要です。ただし、そのコマンドレットは AD 全体を検索し、名前に検索語が含まれるすべての OU に対して操作が適用されます:

      Get-ADOrganizationalUnit -Filter "Name -eq 'Regions'" | Rename-ADObject -NewName Countries
      

OU にグループ ポリシーを適用する

OU にグループ ポリシーを割り当てるには、New-GPLink コマンドレットを使用します。このコマンドレットは、指定したグループ ポリシー オブジェクト(GPO)と OU の間にリンクを作成するものです。リンクには、次のプロパティをいずれも指定できます:

  • 有効 — リンクが有効になっている場合、サイト、ドメイン、または OU に対してグループ ポリシーが処理される際に、GPO の設定が適用されます。
  • 強制 — リンクが強制の場合、より下位のコンテナーでブロックすることはできません。
  • 順序 — 順序は GPO 設定の優先順位を指定します。

次のコマンドは、「Block Software」GPO を「Districts」OU にリンクし、そのリンクを有効かつ強制に設定します。:

      New-GPLink -Name "Block Software" -Target "OU=Districts,OU=IT,dc=enterprise,dc=com" -LinkEnabled Yes -Enforced Yes
      
PowerShell output creating an enabled and enforced Group Policy Link named 'Block Software' targeting 'OU=Districts,OU=IT,DC=enterprise,DC=com'.

コンピューターとユーザーを新しい OU に移動する

OUを作成し、必要に応じてGPOにリンクしたら、次はその中にユーザーやコンピューターを追加する段階です。PowerShell Move-ADObject cmdlet は、ユーザー、コンピューター、グループ、または別の OU など、あらゆるオブジェクト(またはオブジェクトの集合)を別の OU に移動します。-Identity パラメーターでは、移動する Active Directory のオブジェクトまたはコンテナーを指定します。オブジェクトの完全な LDAP パスまたは SID を入力する必要があります。SamAccountName は使用できません。次の例は、ユーザー(John Brown)を “Districts” OU に移動する方法を示しています:

      Move-ADObject -Identity "CN=John Brown,CN=Users,DC=enterprise,DC=com" -TargetPath "OU=Districts,OU=IT,DC=Enterprise,DC=Com"
      

コンピューター オブジェクトを移動するには、同じ構文を使用します。次のコマンドは、コンピューター “R07GF” を “Computers” コンテナーに移動します:

      Move-ADObject -Identity "CN=R07GF,OU=CEO,DC=enterprise,DC=com" -TargetPath "CN=Computers,DC=Enterprise,DC=Com
      

CSV または TXT ファイルを使用して AD コンピューターとユーザーを別の OU に移動する

移動するオブジェクトのあらかじめ定義されたリストがある場合は、それを CSV ファイルとして保存し、そのファイルを Active Directory にインポートできます。CSV リストは次の形式である必要があります:

次の PowerShell スクリプトを使用して、CSV ファイルに記載された AD ユーザー アカウントを移動します:

      # Specify target OU. This is where users will be moved.
$TargetOU =  "OU=Districts,OU=IT,DC=enterprise,DC=com"
# Specify CSV path. Import CSV file and assign it to a variable. 
$Imported_csv = Import-Csv -Path "C:tempMoveList.csv" 

$Imported_csv | ForEach-Object {
     # Retrieve DN of user.
     $UserDN  = (Get-ADUser -Identity $_.Name).distinguishedName
     # Move user to target OU.
     Move-ADObject  -Identity $UserDN  -TargetPath $TargetOU
   
 }
      

テキスト ファイルに記載された AD コンピューター アカウントを移動するには、次の PowerShell スクリプトを使用します:

      # Specify path to the text file with the computer account names.
$computers = Get-Content C:TempComputers.txt

# Specify the path to the OU where computers will be moved.
$TargetOU   =  "OU=Districts,OU=IT,DC=enterprise,DC=com" 
ForEach( $computer in $computers){
    Get-ADComputer $computer |
    Move-ADObject -TargetPath $TargetOU

}
      

AD から OU を削除する

Remove-ADOrganizationalUnit コマンドレットは OU を削除します。OU は、誤って削除されないように保護されていてはいけません。名前に「Continents」が含まれるすべての OU について、誤って削除することの防止オプションを次の Get-ADOrganizationalUnit および Set-ADOrganizationalUnit コマンドレットを次のように使って削除できます:

      Get-ADOrganizationalUnit -filter "Name -eq 'Continents'" | Set-ADOrganizationalUnit  -ProtectedFromAccidentalDeletion $False
      

次のコマンドを使用して、名前に「Continents」が含まれるすべての OU を AD から削除します:

      Get-ADOrganizationalUnit -filter "Name -eq 'Continents'" | Remove-ADOrganizationalUnit –Recursive
      

削除の確認を求めるプロンプトが表示されます:

Confirmation dialog for recursive removal of 'OU=Continents,OU=CEO,DC=enterprise,DC=com', with options Yes, Yes to All, No, No to All, and Suspend.

次の点に注意してください。-Recursive パラメーターは、OU とその配下のすべての子オブジェクトの両方を削除します。子オブジェクトに削除保護が有効になっている場合でも、それらは削除されます。

結論

PowerShell スクリプトを使って Active Directory の OU を管理する方法を学んだので、OU 管理に関連するさまざまな単純な操作を自動化できます。これらのコマンドを試す前に、Active Directory Recycle Bin featureを有効にして、誤った削除を簡単に元に戻せるようにしてください。組織単位に加えたすべての変更を注意深く追跡することも賢明です。

共有する

もっと詳しく

著者について

Asset Not Found

Jeff Melnick

システムエンジニアリング ディレクター

Jeff は Netwrix における Global Solutions Engineering の元ディレクターです。彼は長年にわたり Netwrix のブログ執筆者であり、講演者、プレゼンターとしても活躍しています。Netwrix のブログでは、Jeff がシステム管理の体験を大きく改善できるライフハックや、役立つヒント、ちょっとしたコツを共有しています。