我们正在创建一个微服务来在AD中做一些事情。该服务要求将active directory作为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
。