1

我正在编写一个 PS 脚本来将 AD 中的计算机从一个 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'
        }
}

有人可以帮我解释为什么吗?

4

1 回答 1

2

我假设 $pc 有对象。

检查 get-ADComputers 返回的默认属性,我不确定操作系统属性是否默认返回。尝试第一个脚本:

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

这将强制 PowerShell 为您获取对象的默认属性 + 操作系统属性。

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

于 2013-11-05T17:39:48.590 回答