Powershell 移动 AD 对象

Powershell move AD object

我制作了这个脚本来查找所有 windows 10 台未放置在正确 OU 中的机器,此时没有采取任何行动 - 但我想在找到它们后移动它们,我们有 30 多个国家和数据中心,所以我想将 OU 字符串保留在数组中,以将代码保持在最低限度 - 如何在此脚本中执行移动?我可以使用一些指针。

$Script:OUBase = "OU=Countries,OU=Global,DC=internal"
    Import-Module ActiveDirectory



    $CountryDataCenter = 
    @(
    [pscustomobject]@{Country="UK";DataCenter="CEN1"},
    [pscustomobject]@{Country="UK";DataCenter="CEN2"} 
    )


    Function GetWin10MachineAccounts($Country, $DataCenter){


    #Build OUstring
    $OUStringTarget = "*OU=Windows 10,OU=Computers,OU=" + $DataCenter + ",OU=" + $Country + "," + $Script:OUBase
    $OUStringSource = "OU=Computers,OU=" + $DataCenter + ",OU=" + $Country + "," + $Script:OUBase
    $countPC    = ($Win10Computeraccounts).count


    Write-Host "OU to search - " $OUStringSource -ForegroundColor Yellow


    $Win10ComputerAccounts = Get-ADComputer -SearchBase $OUStringSource -Filter {(enabled -eq "true") -and (OperatingSystem -like "*Windows 10*")} -properties * | where {$_.DistinguishedName -notlike "$OUStringTarget"} | select CN -expandproperty Name 


    Return $Win10Computeraccounts




    }



    ############### Main Script ##########################

    ##create empty array for use later
    $DataArray = @()

    ForEach ($Country in $CountryDataCenter)
    {
        $Win10Computeraccounts = GetWin10MachineAccounts $Country.Country $Country.DataCenter 
        $countPC    = $Win10Computeraccounts.count




        if(!$Win10Computeraccounts) {
         write-host "No Windows 10 Computers are found in the container" $Country.Country $Country.DataCenter
        }

        foreach ($Computer in $Win10Computeraccounts){     
            Write-Host $Computer -ForegroundColor Red
            #Store Data in foreach array
            $DataArray += (Get-ADComputer $Computer )
            Write-Host "$countPC" "Computers found in" $Country.Country $Country.DataCenter -ForegroundColor Green


        } 



    }



    $DataArray | Export-Csv "C:\log.csv"  -Force

使用 Move-ADObject cmdlet:

foreach($Country in $CountryDataCenter)
{
    $OUStringTarget = "OU=Windows 10,OU=Computers,OU={0},OU={1},{2}" -f $Country.DataCenter,$Country.Country,$Script:OUBase
    $Win10Computeraccounts = GetWin10MachineAccounts $Country.Country $Country.DataCenter 

    foreach ($Computer in $Win10Computeraccounts){     
        Move-ADObject -Identity $Computer -TargetPath $OUStringTarget
    } 
}