如何从计算机OU动态移动计算机帐户

问题描述 投票:0回答:1

我想要实现的功能非常“简单”。我有一些人在我的广告上创建计算机对象,然后离开那里而没有将它们移到适当的OU。

我希望使用Powershell脚本从计算机OU中读取计算机列表,并根据计算机名称中的前5或6个字母,将其移至适当的OU,然后从CSV或txt中读取目标OU列表或任何文件类型。

我需要移动100台以上的计算机,并且我想对其进行扫描,然后将其移动到相应的OU。

我曾考虑过为计算机帐户使用变量,然后foreachswitch或类似名称,然后1比1开始移动帐户。但是我被卡住了。

谢谢!!!

powershell move account ou
1个回答
0
投票

这应该足够动态。您可以用CSV替换Map对象。

$Map = [PSCustomObject]@{
        AABBCC = "OU=ABC,DC=Contoso,DC=com";
        CCBBAA = "OU=CBA,DC=Contoso,DC=com"
    }

    $Prefixlist = ($Map.PSObject.Members | Where-Object { $_.MemberType -eq "NoteProperty" }).Name
    $Report = @()
    $MissingPrefix = @()

    Get-ADComputer -filter * -searchbase "CN=Computers,DC=Contoso,DC=com" -Properties Name | ForEach-Object {
        $obj = $_
        $Prefix = ($obj.Name).Substring(0, 6)
        if ($Prefixlist -contains $Prefixlist) {
            try {
                $obj | Move-AdObject -Targetpath $Map.$Prefix -erroraction stop
                $Report += [PSCustomObject]@{
                    Name = $Obj.Name
                    Move = $true
                }
            }
            catch {
                $_.Exception.ErrorRecord
                $Report += [PSCustomObject]@{
                    Name = $Obj.Name
                    Move = $false
                }
            }

        }
        else {
            $MissingPrefix += $Prefixlist
            $Report += [PSCustomObject]@{
                Name = $Obj.Name
                Move = $false
            }
        }
    }

    "Result"
    $Report | Format-Table -AutoSize

    "Not found prefix list"
    $MissingPrefix
© www.soinside.com 2019 - 2024. All rights reserved.