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 и вытаскивал из него пользователей?
Столкнулся с проблемой, не знаю как решить.
Есть скрипт:
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 и вытаскивал из него пользователей?