Проблемы с подключением ActiveDirectory Drive в PowerShell с помощью .Net Core

Мы создаем микросервис, чтобы делать несколько вещей в AD. Эта служба требует, чтобы активный каталог был смонтирован на AD как PSDrive.

Я понимаю, как работает установка, и могу успешно сделать это в PowerShell на сервере.

Чтобы модуль был добавлен, нам нужно было указать физическое местоположение ActiveDirectory.psd1 для его импорта.

Я подозреваю, что это причина того, что следующий скрипт не выполняется успешно.

Скрипт: New-PSDrive -PSProvider ActiveDirectory -Name AD -Root \"\" -Server (Get-ADDomainController -Discover -Service PrimaryDC).Name

При таком выполнении возникает исключение, указывающее, что параметр Server недействителен.

При удалении этого параметра исключение говорит, что провайдер ActiveDirectory не существует.

Правильно ли я подхожу к этому?

Вот код C #:

string moduleDirectory = Configuration["AppSettings:Directories:PowerShellModules"];

var requiredPowerShellModules = new Dictionary<string, string>()
{
    { "ActiveDirectory", $"{moduleDirectory}\\ActiveDirectory\\ActiveDirectory.psd1" }
};

foreach (KeyValuePair<string, string> module in requiredPowerShellModules)
{
    bool hasModule = Modules.HasModule(module.Key, powerShell);

    if (!hasModule)
    {
        Modules.ImportModule(module.Value, powerShell);

        if (!Modules.HasModule(module.Key, powerShell))
        {
            throw new Exception($"Unable to import PowerShell module: \"{module.Key}\" at path \"{module.Value}\"");
        }
    }
}

//Check if AD Drive mounted
var adDriveResult = powerShell.AddScript("Get-PSDrive AD -ErrorAction SilentlyContinue").Invoke();

//Mount AD Drive if not exists
if (adDriveResult.Count != 1)
    powerShell
        .AddScript("New-PSDrive -PSProvider ActiveDirectory -Name AD -Root \"\" -Server (Get-ADDomainController -Discover -Service PrimaryDC).Name ") //
            .Invoke();

person Marius    schedule 09.09.2020    source источник
comment
Что дает Get-PSProvider ActiveDirectory?   -  person Mathias R. Jessen    schedule 09.09.2020
comment
@ MathiasR.Jessen, я обновлю приложение, чтобы протестировать и обновить пост   -  person Marius    schedule 09.09.2020
comment
@ MathiasR.Jessen The term 'Get-PSProvider ActiveDirectory' is not recognized as the name of a cmdlet Интересно. Не уверен, почему это может быть проблемой.   -  person Marius    schedule 09.09.2020
comment
Я мог ошибиться. Обновится через несколько минут   -  person Marius    schedule 09.09.2020
comment
Get-PSProvider ActiveDirectory вернул единственный результат с AD. Я внес несколько изменений. Похоже, я решил проблему, используя удаленное пространство выполнения. Что решает мою проблему, но, к сожалению, не решает вопрос.   -  person Marius    schedule 09.09.2020
comment
Если вы выяснили, как решить эту проблему (либо используя отдельное пространство выполнения, либо что-то еще), то это и есть ответ :) Не стесняйтесь публиковать самостоятельный ответ с подходом, который вы в конечном итоге выбрали   -  person Mathias R. Jessen    schedule 09.09.2020


Ответы (1)


Проблема была вызвана устаревшей версией модуля ActiveDirectory PowerShell.

Версия 1.0.0.0 была на сервере вместо 1.0.1.0.

person Marius    schedule 16.09.2020