Set-ADGroup не может найти группу, только что созданную в том же сценарии (PowerShell) - PullRequest
2 голосов
/ 29 марта 2012

Я работаю над сценарием для создания групп безопасности и распространения, чтобы они следовали нашим стандартам именования.В сценарии я использую New-DistributionGroup для создания группы, Set-DistributionGroup для добавления некоторых пользовательских атрибутов, а затем хочу использовать Set-ADGroup для добавления описания.(в сторону: какая боль, что New-DistributionGroup не может сделать эти вещи!) Несмотря на то, что установка времени ожидания до 30 секунд, Set-ADGroup всегда терпит неудачу с:

Set-ADGroup: Не удается найтиобъект с идентификатором: ' AcctTesting1 ' в: [наш домен] .

И все же, если я удалю строку кода из Set-ADGroup, запуститесценария, а затем сразу же запустите код Set-ADGroup, он отлично работает.

Вот соответствующая часть сценария: (наше доменное имя удалено)

    $GroupTypeName = "Assignment"
    $OU = $BaseOU + "AssignmentGroups"
    New-DistributionGroup -Name $SAMname -Alias $Alias -DisplayName $DisplayName -ManagedBy `
        "CN=Administrator,CN=Users,[our domain]" -OrganizationalUnit $OU `
        -SamAccountName $SAMname -Type Security
    Set-DistributionGroup -Identity $SAMname -CustomAttribute10 "ASSIGNMENT GROUP" `
        -CustomAttribute11 $PRMCode
    echo "Waiting for new group to replicate"
    Start-Sleep -s 20
    Set-ADGroup -Identity $SAMname -Description "$Alias AssignmentGroup"

Я относительно новичок в сценариях PowerShell, поэтому, если у вас есть идеи, как это исправить, я буду признателен за небольшую подробность!

Ответы [ 4 ]

1 голос
/ 29 марта 2012

Вот что вы можете попробовать,

Вы можете указать New-DistributionGroup создать группу на определенном контроллере домена (используя параметр DomainController) New-DistributionGroup испускает группу, чтобы вы могли перенаправить группу на Set-DistributionGroup и установить нужные вам свойства. Наконец, вы можете получить группу из DC, используя параметр Set-ADGroup -Server.

New-DistributionGroup -DomainController DC1 -Name $SAMname ... | Set-DistributionGroup -CustomAttribute10 "ASSIGNMENT GROUP" -CustomAttribute11 $PRMCode 

Set-ADGroup -Server DC1 -Description "$Alias AssignmentGroup"
1 голос
/ 29 марта 2012

Я не могу проверить это, но вот возможное объяснение.

New-DistributionGroup - это командлет Exchange, который создает универсальные группы .Универсальные группы создаются на контроллере домена, который владеет глобальным каталогом.Set-ADGroup - это активный командный каталог, который пытается найти группу на любом контроллере домена.

Итак, одна из причин вашей проблемы заключается в том, что вам нужно дождаться репликации с вашего GC на ваш референтный контроллер домена.Возможно, вы пытаетесь запустить свой скрипт на контроллере с глобальным каталогом, чтобы проверить это.

0 голосов
/ 29 декабря 2015

У меня также была эта проблема, и, поскольку я использую группу для ACL удаленной файловой системы, я хотел убедиться, что группа синхронизирована на всех DC.

На вышеупомянутой основе моя реализация на самом деле

    function createADSecurityGroup{


Param(  [Parameter(mandatory = $true)] [String] $GroupScope,
        [Parameter(mandatory = $true)] [String] $Name, 
        [Parameter(mandatory = $true)] [String] $Description,  
        [Parameter(mandatory = $true)] [String] $Path)


try{

    New-ADGroup -GroupScope $GroupScope -Name $Name -Description $Description -GroupCategory Security -Path $Path

    foreach( $dc in Get-ADDomainController -Filter * | Select-Object name){

        $Idx=0
        $MaxTries=99
        $timeout=$false
        Write-Host -NoNewline "`nWaiting for group " $name " to appear on server " $dc.name
        Do {
            If($Idx -gt 0) {Start-sleep -s 5}

            try{
                $r=$null
                $r = Get-ADGroup -Server $dc.name -Filter {SamAccountName -eq $name }
                #Timeout-Error-Similation #$r = Get-ADGroup -Server $dc.name -Filter {SamAccountName -eq 'NoNe'} 
                Write-Host -NoNewline "."
                $Idx = $Idx + 1

                if( $Idx -gt $MaxTries ){

                    $timeout=$true
                    throw "Timeout waiting for appearance of group "
                }

            }catch{

                $ErrorMessage = $_.Exception.Message
                Write-Host $ErrorMessage

                if( $timeout ){

                    throw $ErrorMessage
                }
            }



        }
        Until($r)
    }

    Write-Host ""

}catch{

         $ErrorMessage = $_.Exception.Message
         $txt="createADSecurityGroup-Function FAILURE: "+$ErrorMessage+" "+$Name
         Write-Host "`n" $txt
         throw $txt
 }
}
0 голосов
/ 30 марта 2012

Информация, полученная на этом сайте, показала мне, почему происходят ошибки, но мне все еще нужно было это исправить. Другой эксперт по веб-сайту предложил использовать циклическую структуру до тех пор, пока группа не станет доступной. Его решение работало, но заполняло экран сообщениями об ошибках на каждой итерации цикла. В приведенном ниже сообщении содержится информация, необходимая для построения рабочего цикла.

https://stackoverflow.com/a/9421291/1299495

После выполнения команды New-DistributionGroup этот цикл задерживает последующие команды, пока только что созданная группа не станет доступной для изменения.

    Write-Host -NoNewline "Waiting for replication"
    Do
    {
        If($Idx -gt 0) {Start-sleep -s 5}
        $r = Get-ADGroup -Filter {SamAccountName -eq $SAMname}
        Write-Host -NoNewline "."
        $Idx = $Idx + 1
    }
    Until($r)

Dann

...