问题描述
我们正在创建一个微服务以在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
。