使用.Net Core在PowerShell中安装ActiveDirectory Drive时出现问题

问题描述

我们正在创建一个微服务以在AD中做一些事情。此服务要求将活动目录作为PSDrive挂载到AD

我了解安装的工作原理,并且可以在服务器上的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();

解决方法

此问题是由ActiveDirectory Powershell模块的过时版本引起的。

版本1.0.0.0位于服务器上,而不是1.0.1.0