嵌套IF,移动AD计算机

时间:2013-11-05 15:01:45

标签: powershell active-directory powershell-v2.0 powershell-v3.0

我正在编写一个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'
        }
}

有人可以帮我解释一下原因吗?

1 个答案:

答案 0 :(得分:2)

我假设$ pc有对象。

检查get-ADComputers返回的默认属性,我不确定默认情况下是否返回了operatingsystem属性。尝试使用第一个脚本:

 $pc = Get-ADComputer -Filter * -Properties operatingsystem

这将强制PowerShell为您提供默认属性+对象的operatingsystem属性。

第二个脚本工作的原因是,因为您使用“operatingsystem”作为过滤器。它会自动将其包含在返回的属性中。