none
Помогите допилить скрипт - перемещение компьютеров в AD. RRS feed

  • Вопрос

  • Доброго времени суток дамы и господа!

    Есть скрипт которым  я получаю компьютеры из коллекции SCCM и пытаюсь ставить на него клиента sccm. 

    Вот собственно и он:       

    import-module ($Env:SMS_ADMIN_UI_PATH.Substring(0,$Env:SMS_ADMIN_UI_PATH.Length-5) + '\ConfigurationManager.psd1')
    $PSD = Get-PSDrive -PSProvider CMSite
    CD "$($PSD):"

    $SiteCode = $PSD
    $CollectionNames = Get-CMDevice -CollectionName "No Client PC"

    foreach ($CollectionName in $CollectionNames) {

    $ClientCheck = Get-CMDevice -Name $CollectionName.Name

    if ($ClientCheck.IsClient -eq $false)
    {
    Write-Host "The Client" $CollectionName.Name " without sccm agent." -foregroundcolor red

    Install-CMClient -DeviceName $CollectionName.Name -AlwaysInstallClient:$true -Confirm:$false -IncludeDomainController:$false -SiteCode $SiteCode -ForceReinstall:$true
    }

    else
    {
    Write-Host "The Client" $CollectionName.Name " with sccm agent."
    }
    }

    Помогите добавить следующую функциональность:

    -все компы из переменной $ClientCheck перенести в отдельный OU Test. 

    -если в OU есть компы которые на попали в $ClientCheck - то перенести их  в OU Computers.

    Заранее большое спасибо!

    21 июля 2015 г. 8:53

Ответы

  • $pc = @()
    
    foreach ($CollectionName in $CollectionNames) {
    	$pc += $CollectionName.Name
    	Move-ADObject -Identity $CollectionName.Name -TargetPath "OU=Test,DC=Contoso,DC=Com"
    	.........
    }
    
    Get-ADComputer -Filter * -SearchBase "OU=Test,DC=Contoso,DC=Com" | Where {$pc -notcontains $_.Name} |  Move-ADObject -TargetPath "OU=PC,DC=Contoso,DC=Com"

    • Предложено в качестве ответа Vector BCOModerator 21 июля 2015 г. 11:40
    • Помечено в качестве ответа Igor3000 22 июля 2015 г. 8:42
    21 июля 2015 г. 11:00
    Отвечающий
  • Заменить строчку Move-ADObject -Identity $CollectionName.Name -TargetPath "OU=Test,DC=Contoso,DC=Com" на:

    Get-ADComputer $CollectionName.Name | Move-ADObject  -TargetPath "OU=Test,DC=Contoso,DC=Com"

    • Помечено в качестве ответа Igor3000 22 июля 2015 г. 8:42
    22 июля 2015 г. 6:10
    Отвечающий
  • В блок добавить foreach ($CollectionName in $CollectionNames) {:

    Move-ADObject -Identity $CollectionName.Name -TargetPath "OU=Test,DC=Contoso,DC=Com"

    В конец скрипта:

    
    
    Get-ADComputer -Filter * -SearchBase "OU=PC,DC=Contoso,DC=Com" | Move-ADObject -TargetPath "CN=Computer,DC=Contoso,DC=Com"
    




    • Изменено KazunEditor 21 июля 2015 г. 9:24
    • Помечено в качестве ответа Igor3000 22 июля 2015 г. 8:42
    21 июля 2015 г. 9:24
    Отвечающий
  • Я же выше привел ,как должна выглядеть команда(не должно быть Move-ADObject -Identity):

    Get-ADComputer $CollectionName.Name | Move-ADObject  -TargetPath "OU=Test,DC=Contoso,DC=Com"

    • Помечено в качестве ответа Igor3000 22 июля 2015 г. 8:42
    22 июля 2015 г. 8:21
    Отвечающий

Все ответы

  • В блок добавить foreach ($CollectionName in $CollectionNames) {:

    Move-ADObject -Identity $CollectionName.Name -TargetPath "OU=Test,DC=Contoso,DC=Com"

    В конец скрипта:

    
    
    Get-ADComputer -Filter * -SearchBase "OU=PC,DC=Contoso,DC=Com" | Move-ADObject -TargetPath "CN=Computer,DC=Contoso,DC=Com"
    




    • Изменено KazunEditor 21 июля 2015 г. 9:24
    • Помечено в качестве ответа Igor3000 22 июля 2015 г. 8:42
    21 июля 2015 г. 9:24
    Отвечающий
  • В блок добавить foreach ($CollectionName in $CollectionNames) {:

    Move-ADObject -Identity $CollectionName.Name -TargetPath "OU=Test,DC=Contoso,DC=Com"

    В конец скрипта:

    
    
    Get-ADComputer -Filter * -SearchBase "OU=PC,DC=Contoso,DC=Com" | Move-ADObject -TargetPath "CN=Computer,DC=Contoso,DC=Com"




    Спасибо за ответ!

    Но разве строка код:

    Get-ADComputer -Filter * -SearchBase "OU=PC,DC=Contoso,DC=Com" | Move-ADObject -TargetPath "CN=Computer,DC=Contoso,DC=Com"

    не перенесёт ВСЕ компы из  PC в Computer? Или я ошибаюсь?

    Мне необходимо только те которые НЕ попали в $ClientCheck. У меня по ходу опечатка в вопросе.

    Извините!

    21 июля 2015 г. 10:22
  • А как в OU PC могут находиться компьютеры из $ClientCheck ,если они перенесены в OU TEST?
    21 июля 2015 г. 10:44
    Отвечающий
  • Я не правильно выразился. Пардон!

    Необходимо потом из OU Test убрать все компы которых нет в $ClientCheck.

    Вас запутал и сам запутался...

    21 июля 2015 г. 10:47
  • $pc = @()
    
    foreach ($CollectionName in $CollectionNames) {
    	$pc += $CollectionName.Name
    	Move-ADObject -Identity $CollectionName.Name -TargetPath "OU=Test,DC=Contoso,DC=Com"
    	.........
    }
    
    Get-ADComputer -Filter * -SearchBase "OU=Test,DC=Contoso,DC=Com" | Where {$pc -notcontains $_.Name} |  Move-ADObject -TargetPath "OU=PC,DC=Contoso,DC=Com"

    • Предложено в качестве ответа Vector BCOModerator 21 июля 2015 г. 11:40
    • Помечено в качестве ответа Igor3000 22 июля 2015 г. 8:42
    21 июля 2015 г. 11:00
    Отвечающий
  • Извините но у меня выдаёт ошибки вида:

    Move-ADObject : Cannot find an object with identity: 'dom-W-1028' under: 'DC=dom,DC=local'.
    At C:\test\installClient.ps1:13 char:1
    + Move-ADObject -Identity $CollectionName.Name -TargetPath "OU=No SCCM Client PC,O ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : ObjectNotFound: (dom-W-1028:ADObject) [Move-ADObject], ADIdentityNotFoundException
        + FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException,Microsoft.ActiveDirectory.Management.Commands.MoveADObject

    22 июля 2015 г. 5:18
  • Заменить строчку Move-ADObject -Identity $CollectionName.Name -TargetPath "OU=Test,DC=Contoso,DC=Com" на:

    Get-ADComputer $CollectionName.Name | Move-ADObject  -TargetPath "OU=Test,DC=Contoso,DC=Com"

    • Помечено в качестве ответа Igor3000 22 июля 2015 г. 8:42
    22 июля 2015 г. 6:10
    Отвечающий
  • теперь пишет:

    Move-ADObject : The input object cannot be bound to any parameters for the command either because the command does not take pipeline input or the input and its properties do not match any of 
    the parameters that take pipeline input.
    At C:\test\move-computers.ps1:13 char:39
    + Get-ADComputer $CollectionName.Name | Move-ADObject -Identity $CollectionName.Na ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidArgument: (CN=dom-W-37172,...DC=dom,DC=local:PSObject) [Move-ADObject], ParameterBindingException
        + FullyQualifiedErrorId : InputObjectNotBound,Microsoft.ActiveDirectory.Management.Commands.MoveADObject

    22 июля 2015 г. 8:13
  • Я же выше привел ,как должна выглядеть команда(не должно быть Move-ADObject -Identity):

    Get-ADComputer $CollectionName.Name | Move-ADObject  -TargetPath "OU=Test,DC=Contoso,DC=Com"

    • Помечено в качестве ответа Igor3000 22 июля 2015 г. 8:42
    22 июля 2015 г. 8:21
    Отвечающий
  • Всё работает!!!!

    Спасибо Вам огроменное!!!!

    22 июля 2015 г. 8:32