none
PowerShell. Конвертирование переменных в формат ADSI. RRS feed

  • Вопрос

  • Здравствуйте.

    Имеется часть скрипта, которая выполняет поиск всех заблокированных пользователей, и по указанию оператора, перемещает их в определенную OU. 

    Вот эта часть крипта

    3. {
                                $dUsers = Get-ADUser -Filter {Enabled -eq $False}
                                Write-Host "Следующие учетные записи заблокированы:" -ForegroundColor Green
                                $dUsers.name
                                DO {
                                Write-Host "Что хотите сделать с заблокированными учетными записями?" -ForegroundColor Magenta
                                Write-Host "1. Переместить в организационную единицу _Уволенные." -ForegroundColor Cyan
                                Write-Host "2. Вернуться к предыдущему меню." -ForegroundColor Cyan
                                $choise03c = Read-Host "Выберите действие"
                                    Switch ($choise03c)
                                                    {
                                                        1.{
                                                            $cOU = Get-ADOrganizationalUnit -Server "$server" -Filter "name -like '*Уволенные*'"
                                                            [string]$rOU = $cOU.DistinguishedName
                                                                if ($cOU -ne $null)
                                                                    {
                                                                        Foreach ($dUser in $dUsers)
                                                                        {
                                                                            [adsi]$TargetOU = $rOU
                                                                            $dUsr = $dUser.DistinguishedName
                                                                            [adsi]$Usr="LDAP://$dUsr"
                                                                            $Usr.psbase.Moveto($TargetOU)
                                                                        }
                                                                    }
                                                                    Else
                                                                    {
                                                                        Write-Host "Организационная Единица не найдена, пожалуйста, создайте организационную единицу." -ForegroundColor DarkYellow
                                                                    }
                                                          }
                                                    }
                                    } while ($choise03c -ne 2)
                            }

    Но при выполнении данного кода, получаю ошибку:

    format-default : The following exception occurred while retrieving member "distinguishedName": "Unspecified error
    "
        + CategoryInfo          : NotSpecified: (:) [format-default], ExtendedTypeSystemException
        + FullyQualifiedErrorId : CatchFromBaseGetMember,Microsoft.PowerShell.Commands.FormatDefaultCommand

    Где ошибка? Подскажите, пожалуйста.

    15 февраля 2019 г. 9:59

Ответы

Все ответы

  • С этим разобрался, ошибка была в строчке:

    [adsi]$TargetOU = $rOU тут нужно было добавить 
    [adsi]$TargetOU = "LDAP://$rOU"

    Но возникла другая ошибка. Когда я запускаю скрипт из ISE и отрабатываю эту часть скрипта, то все хорошо.

    Но стоит запустить скрипт через батник, то в момент когда учетки должны перебрасываться в OU=_Уволенные, получаю следующую ошибку:

    Exception calling "MoveTo" with "1" argument(s): "There is no such object on the server.
    "
    At \\domain\share\scriptpath\Script.ps1:382 char:73
    + ...                                         $Usr.psbase.Moveto($TargetOU)
    +                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : DotNetMethodException
    Тут что ему не нравится?

    15 февраля 2019 г. 10:37
  • Спасибо, разобрался)))

    Получился монолог ))) но тем не менее )))

    • Помечено в качестве ответа Vector BCOModerator 15 февраля 2019 г. 12:29
    15 февраля 2019 г. 11:05
  • чем вас стандартные коммандлеты не устроили что вы в adsi обратились? 

    вполне вероятно что со стандартыми решениями было бы сложнее выстрелить себе в ногу


    The opinion expressed by me is not an official position of Microsoft


    15 февраля 2019 г. 11:11
    Модератор
  • ReMCatcheR, а вы уже год чтоли этот скрипт пилите, или больше? :-)
    15 февраля 2019 г. 12:28
  • Нет, дело в том, что инфраструктура в компании постоянно меняется, соответственно скрипты тоже приходится под структуру переделывать. Так как лес огромный и доменов много, имеют разные количество символов в названии, разные пути OU, именования OU и т.п., то часть скрипта для одного домена может работать, а для другого уже могут быть ошибки, в силу выше описанных примеров. Сразу все косяки не получается проверить, только уже на боевой практике.
    21 февраля 2019 г. 10:55
  • Стандартные коммандлеты отлично работают в родительском домене, в дочернем домене, увы, лично мне, не удалось использоваться стандартный коммандлет, были ошибки, сейчас не вспомню какие именно, ну и на просторах интернета нашел такое решение использовать ADSI. решение оказалось рабочим и незамысловатым ) поэтому оставил его.
    21 февраля 2019 г. 10:58