PDA

Показать полную графическую версию : [решено] Get-AdUser и несколько доменов


pogo
09-12-2013, 17:46
Доброго времени суток.
Столкнулся с проблемой, не знаю как решить.
Есть скрипт:
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
Укажите параметр -Server для Get-ADUser:
Get-ADUser -Filter * -SearchBase $domain2 -Server dc.domain2.com

pogo
10-12-2013, 08:51
Большое спасибо!
Только немного странно, этот вариант сработал, но когда я пробовал тоже самое выполнить через powershell ise
http://s004.radikal.ru/i205/1312/cb/c837e73d8cf1.png
Он выводил такую же ошибку, что и в первом посте.

Kazun
10-12-2013, 10:00
Чтобы не гадать, точную ошибку.

pogo
10-12-2013, 11:48
Точная ошибка:
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".
Но это как бы уточнение на будущее, т.к. прописывание Get-ADUser -Filter * -SearchBase $domain2 -Server dc.domain2.com » решило проблему.




© OSzone.net 2001-2012