PowerShell中AD子OU定义语法及计算机移动脚本疑问
PowerShell AD计算机OU移动脚本解决方案
一、OU区分名(DN)格式纠正
你之前写的OU顺序是错的。LDAP区分名(DN)的规则是从最底层的子OU往上写,最后是域名组件。
针对你给出的路径ntds://testdomain.com/Deployments/Texas/Austin,正确的变量定义应该是:
$SourceOU = "OU=Austin, OU=Texas, OU=Deployments, DC=testdomain, DC=com" $TargetOU = "OU=你的目标OU, DC=testdomain, DC=com" # 替换成实际目标OU的DN
注意:逗号后面的空格可选,但为了可读性建议保留;所有OU和DC的名称要和AD中完全一致,区分大小写(取决于AD林配置)。
二、完整PowerShell脚本实现
以下是满足需求的完整脚本,包含输入验证、OU检查和移动逻辑:
# 1. 提示用户输入计算机名称 $computerName = Read-Host "请输入要处理的计算机名称" # 2. 获取AD计算机对象 try { $computer = Get-ADComputer -Identity $computerName -Properties DistinguishedName -ErrorAction Stop } catch { Write-Host "错误:找不到计算机 '$computerName',请检查名称是否正确。" exit 1 } # 3. 检查计算机是否在指定的源OU中 if ($computer.DistinguishedName -like "*$SourceOU") { # 4. 移动计算机到目标OU try { Move-ADObject -Identity $computer.DistinguishedName -TargetPath $TargetOU -ErrorAction Stop Write-Host "成功:计算机 '$computerName' 已从 '$SourceOU' 移动到 '$TargetOU'" } catch { Write-Host "错误:移动计算机失败,原因:$_" exit 1 } } else { Write-Host "提示:计算机 '$computerName' 当前不在指定的源OU '$SourceOU' 中,无需移动。" }
三、脚本说明
- 依赖:需要安装Active Directory模块(通常在域控制器或安装了RSAT工具的机器上可用)
- 权限:运行脚本的账户需要有读取AD计算机信息和移动计算机对象的权限
- 匹配逻辑:用
-like "*$SourceOU"是因为计算机的DistinguishedName格式是CN=计算机名,OU=Austin,...,所以后缀匹配源OU的DN即可准确判断所在OU
内容的提问来源于stack exchange,提问作者MugsyWugsy
相关产品推荐
相关产品推荐

