我想要实现的功能非常“简单”。我有一些人在我的广告上创建计算机对象,然后离开那里而没有将它们移到适当的OU。
我希望使用Powershell脚本从计算机OU中读取计算机列表,并根据计算机名称中的前5或6个字母,将其移至适当的OU,然后从CSV或txt中读取目标OU列表或任何文件类型。
我需要移动100台以上的计算机,并且我想对其进行扫描,然后将其移动到相应的OU。
我曾考虑过为计算机帐户使用变量,然后foreach
和switch
或类似名称,然后1比1开始移动帐户。但是我被卡住了。
谢谢!!!
这应该足够动态。您可以用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