Вложенная IF, перемещение компьютеров AD

Я писал сценарий 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'
        }
}

Может кто-нибудь помочь мне объяснить, почему?


person KjetilJar    schedule 05.11.2013    source источник


Ответы (1)


Я предполагаю, что у $pc есть объекты.

Проверьте свойства по умолчанию, возвращаемые get-ADComputers, я не уверен, что свойство операционной системы возвращается по умолчанию. Попробуйте первый скрипт с:

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

Это заставит PowerShell предоставить вам свойства по умолчанию + свойство операционной системы объектов.

Причина, по которой работает второй сценарий, заключается в том, что вы используете «операционную систему» ​​в качестве фильтра. Он автоматически включает это как часть возвращаемых свойств.

person Arcass    schedule 05.11.2013
comment
Ты прав; свойство OperatingSystem не возвращается по умолчанию. - person Benjamin Hubbard; 05.11.2013