我正在编写一个PS脚本,将AD中的计算机从一个OU移动到另一个OU。 我原来的代码就是这个;
$pc = Get-ADComputer -Filter *
foreach($item in $pc)
{
if($item.operatingsystem -Like "Windows XP*")
{
if($item.name -Like "*-B-*")
{
move-ADObject -Identity $item -TargetPath 'ou=myou,DC=mydomain,dc=com'
}
else if($item.name -Like "*-K-*")
{
move-ADObject -Identity $item -TargetPath 'ou=myou,DC=mydomain,dc=com'
}
}
else if($item.operatingsystem -Like "Windows 7*")
{
if($item.name -Like "*-B-*")
{
move-ADObject -Identity $item -TargetPath 'ou=myou,DC=mydomain,dc=com'
}
else if($item.name -Like "*-K-*")
{
move-ADObject -Identity $item -TargetPath 'ou=myou,DC=mydomain,dc=com'
}
}
}
代码运行但实际上没有做任何事情。我把它编辑到了它,它完成了我打算做的事情;
$pcw7 = Get-ADComputer -Filter {operatingsystem -Like "Windows 7*"}
$pcwinxp = Get-ADComputer -Filter {operatingsystem -Like "Windows XP*"}
foreach($item in $pcw7)
{
if($item.Name -Like "*-B-*")
{
move-ADObject -Identity $item -TargetPath 'ou=myou,DC=mydomain,dc=com'
}
elseif($item.Name -Like "*-K-*")
{
move-ADObject -Identity $item -TargetPath 'ou=myou,DC=mydomain,dc=com'
}
}
foreach($item in $pcwinxp)
{
if($item.Name -Like "*-B-*")
{
move-ADObject -Identity $item -TargetPath 'ou=myou,DC=mydomain,dc=com'
}
elseif($item.Name -Like "*-K-*")
{
move-ADObject -Identity $item -TargetPath 'ou=myou,DC=mydomain,dc=com'
}
}
有人可以帮我解释一下原因吗?
答案 0 :(得分:2)
我假设$ pc有对象。
检查get-ADComputers返回的默认属性,我不确定默认情况下是否返回了operatingsystem属性。尝试使用第一个脚本:
$pc = Get-ADComputer -Filter * -Properties operatingsystem
这将强制PowerShell为您提供默认属性+对象的operatingsystem属性。
第二个脚本工作的原因是,因为您使用“operatingsystem”作为过滤器。它会自动将其包含在返回的属性中。