@dshumov
Олдскул - Фигурнов форева

Powershell: не работает foreach. Почему?

Есть скрипт:

$sourceOU = "OU=Workstations,OU=11,OU=Filials,DC=domain,DC=local" 
$destinationOUs = Get-Content C:\ou.txt
foreach ($destinationOU in $destinationOUs)
{
$adPath= "LDAP://" + $destinationOUs 
import-module activedirectory 
#Create OUs 
$objDomain=New-Object System.DirectoryServices.DirectoryEntry($adPath) 
$ObjSearch=New-Object System.DirectoryServices.DirectorySearcher($ObjDomain) 
[array] $OUs = @() 
$OUs = dsquery * $sourceOU -Filter "(objectCategory=organizationalUnit)" -limit 0 
$OUsorted = $OUs | sort-object { $_.Length} 
for ($k=0; $k -le $OUsorted.Count -1; $k++) 
{ 
    $OUtoCreate = ($OUsorted[$k] -replace $sourceOU,$destinationOUs).ToString() 
    $OUSearch = ($OUtoCreate -replace '"',"").ToString() 
    $ObjSearch.Filter = "(&(objectCategory=organizationalUnit)(distinguishedName="+ $OUSearch + "))" 
    $allSearchResult = $ObjSearch.FindAll() 
    if ($allSearchResult.Count -eq 1) 
    { 
        "No changes were done on = " + $OUtoCreate 
    } 
    else 
    { 
        dsadd ou $OUtoCreate 
        "OU Creation = " + $OUtoCreate 
    } 
} 
}



Есть файл, содержащий список $sourceOU, вида: OU=Workstations,OU=11,OU=Filials,DC=domain,DC=local в каждой строчке. Но работает только если в файле только одно значение. Если два и более не работает. Не могу понять почему :(
Выдает ошибку:


Exception calling "FindAll" with "0" argument(s): "Unknown error (0x80005000)"
At line:30 char:5
+     $allSearchResult = $ObjSearch.FindAll()
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : COMException
 
dsadd : dsadd failed:OU=Workstations,OU=22,OU=Filials,DC=domain,DC=local OU=Workstations,OU=Ag. Krilatskoe,OU=Filials,DC=domain,DC=local:Directory object 
not found.
At line:37 char:9
+         dsadd ou $OUtoCreate
+         ~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (dsadd failed:OU...ject not found.:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
 
type dsadd /? for help.
OU Creation = "OU=Workstations,OU=22,OU=Filials,DC=domain,DC=local OU=Workstations,OU=Ag. Krilatskoe,OU=Filials,DC=domain,DC=local"


В чем я ошибаюсь? Где не правильно?
  • Вопрос задан
  • 166 просмотров
Решения вопроса 1
@BeatHazard
В строчке $adPath= "LDAP://" + $destinationOUs вы указали $destinationOUs эта переменная содержит весь массив OU, вам надо было указать $destinationOU
Подобные проблемы легко можно обнаружить заменяя исполняемые команды более простыми, например Write-Host имя переменной, сразу все становится на свои места и понятно что откуда берется
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
SignFinder
@SignFinder
Wintel\Unix Engineer\DevOps
1. Откройте скрипт в Powershell ISE, там есть функционал для дебага скриптов.
2. В Powershell есть нативный командлет для создания OU - New-ADOrganizationalUnit, зачем связываться с dsadd.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы