Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Get-AdUser и несколько доменов (http://forum.oszone.net/showthread.php?t=273669)

pogo 09-12-2013 17:46 2269453

Get-AdUser и несколько доменов
 
Доброго времени суток.
Столкнулся с проблемой, не знаю как решить.
Есть скрипт:
Код:

cls

Import-Module ActiveDirectory

$programmName = "CreateFolder"
$date = Get-Date -Format "yyyy-MM-dd"
$domain1 = "DC=domain1,DC=ru"
$domain2 = "DC=domain2,DC=ru"
$domain3 = "DC=domain3,DC=ru"
$dirForDomain1 = "\\server\"
$dirForDomain2 = "\\server\domain2\"
$dirForDomain3 = "\\server\domain3\"
$logFile = "D:\scripts\logs\" + $programmName + ".log"

#Функция записи логов в файл
function writeLog ($type, $msg) {
        #Преобразуем дату и время в нужный формат
        $date = Get-Date -Format "dd.MM.yyyy HH:mm:ss"
        $msg = $date + "`t" + $type + "`t" + $msg
        #Записываем сообщение в файл
        Out-File -FilePath $logFile -InputObject $msg -Append -encoding unicode
}

function domain1 {
        try {
                $users = Get-ADUser -Filter * -SearchBase $domain1
                foreach ($user in $users) {
                        $logonName = $user.SamAccountName
                        $user = $user.Name
                        $newDir = $dirForDomain1 + $logonName
                        if(!(test-path -path $newDir)) {
                                $path = New-Item -ItemType Directory -Path $dirForDomain1 -Name $logonName
                                $domainUser = "DOMAIN1\" + $logonName
                                $args = New-Object system.security.accesscontrol.filesystemaccessrule($domainUser,"Modify, Synchronize", "ContainerInherit, ObjectInherit", "None", "Allow")
                                $acl = Get-Acl $path
                                $acl.SetAccessRule($args)
                                Set-Acl -Path $path -AclObject $acl
                                $type = "OK"
                                $msg = "Новая папка " + $newDir + " создана"
                                writeLog $type $msg
                        }
                }
                $type = "Info"
                $msg = "Скрипт выполнен успешно"
                writeLog $type $msg
        }
        catch {
                $type = "Error"
                $msg = "$_"
                writeLog $type $msg
                break
        }
}

function domain2 {
        try {
                $users = Get-ADUser -Filter * -SearchBase $domain2
                foreach ($user in $users) {
                        $logonName = $user.SamAccountName
                        $user = $user.Name
                        $newDir = $dirForDomain2 + $logonName
                        if(!(test-path -path $newDir)) {
                                $path = New-Item -ItemType Directory -Path $dirForDomain2 -Name $logonName
                                $domainUser = "DOMAIN2\" + $logonName
                                $args = New-Object system.security.accesscontrol.filesystemaccessrule($domainUser,"Modify, Synchronize", "ContainerInherit, ObjectInherit", "None", "Allow")
                                $acl = Get-Acl $path
                                $acl.SetAccessRule($args)
                                Set-Acl -Path $path -AclObject $acl
                                $type = "OK"
                                $msg = "Новая папка " + $newDir + " создана"
                                writeLog $type $msg
                        }
                }
                $type = "Info"
                $msg = "Скрипт выполнен успешно"
                writeLog $type $msg
        }
        catch {
                $type = "Error"
                $msg = "$_"
                writeLog $type $msg
                break
        }
}

domain1
domain2

Так вот, если закомментировать самую последнюю строку "domain2", то скрипт нормально выполняется и нормально пишет в лог. Если строку раскомментировать, то в лог пишется следующее:
Цитата:

09.12.2013 17:25:33 Error Указанное различающееся имя должно принадлежать одному из следующих разделов: "DC=domain1,DC=ru , CN=Configuration,DC=domain1,DC=ru , CN=Schema,CN=Configuration,DC=domain1,DC=ru , DC=DomainDnsZones,DC=domain1,DC=ru , DC=ForestDnsZones,DC=domain1,DC=ru".
Подскажите пожалуйста, можно ли это побороть и сделать так, что бы во второй функции он обращался к domain2 и вытаскивал из него пользователей?

Kazun 09-12-2013 17:49 2269454

Укажите параметр -Server для Get-ADUser:
Get-ADUser -Filter * -SearchBase $domain2 -Server dc.domain2.com

pogo 10-12-2013 08:51 2269808

Большое спасибо!
Только немного странно, этот вариант сработал, но когда я пробовал тоже самое выполнить через powershell ise

Он выводил такую же ошибку, что и в первом посте.

Kazun 10-12-2013 10:00 2269830

Чтобы не гадать, точную ошибку.

pogo 10-12-2013 11:48 2269884

Точная ошибка:
Цитата:

09.12.2013 17:25:33 Error Указанное различающееся имя должно принадлежать одному из следующих разделов: "DC=domain1,DC=ru , CN=Configuration,DC=domain1,DC=ru , CN=Schema,CN=Configuration,DC=domain1,DC=ru , DC=DomainDnsZones,DC=domain1,DC=ru , DC=ForestDnsZones,DC=domain1,DC=ru".
Но это как бы уточнение на будущее, т.к. прописывание
Цитата:

Цитата Kazun
Get-ADUser -Filter * -SearchBase $domain2 -Server dc.domain2.com »

решило проблему.


Время: 17:31.

Время: 17:31.
© OSzone.net 2001-