上周客户提出了一个要求,将Computers里面的计算机账号移动到相应的OU下,由于数量比较大,采用脚本。
在客户环境中计算机账号名和用户名一致。这样问题处理就比较简单了,先获取此OU下面的用户名,然后和Computers计算机账号名一一匹配,如果一致,则移动此计算机账号到对应OU下。
自定义powershell命令SearchMove-ADComputer
使用方法:
将与“ou=test,dc=contoso,dc=com”下用户名一致的计算机账号移动到“ou=computers,ou=test,dc=contoso,dc=com” 下
SearchMove-ADComputer –SearchBase “ou=test,dc=contoso,dc=com” –TargetPath “ou=computers,ou=test,dc=contoso,dc=com”
1.将以下PS代码保存为.PS1文件
2.在Powershell Console中运行此文件
3.Import-Module ActiveDirectory
4.运行SearchMove-ADComputer指令
PS代码如下:
function SearchMove-ADComputer
([string] $SearchBase,
[string] $TargetPath)
{
$count = 0
$users = Get-ADUser -Filter * -SearchBase $SearchBase |Select-Object samaccountname
#SearchBase后面的参数需要改为自己环境的域名
$computers = Get-ADComputer -Filter * -SearchBase "cn=computers,dc=contoso,dc=com" |Select-Object DistinguishedName,name
$result = @()
for ($index = 0; $index -le ($computers.Length - 1); $index++)
{
foreach ($item in $users)
{
if($item.samaccountname -contains ($computers[$index].Name) -eq $true )
{
$ComputerName = New-Object -TypeName PSObject
$ComputerName | Add-Member NoteProperty ComputerName $computers[$index].Name
$ComputerName | Add-Member NoteProperty DN $computers[$index].DistinguishedName
$result += $ComputerName
}
}
}
Start-Sleep 2
if($result.count -eq 0)
{
Write-Host "没有查询出相关账号,请更改查询条件"
}
else
{
#移动到Computers OU下
foreach ($computerid in $result)
{
Move-ADObject -Identity $computerid.DN -TargetPath $TargetPath
$count++
}
Write-Host "共计移动"$count"个计算机账号" -ForegroundColor Green
}
}