如何在c#中使用ActiveDirectory模块(RSAT工具)
本文关键字:模块 RSAT 工具 ActiveDirectory | 更新日期: 2023-09-27 18:11:23
我想使用由"Active Directory Administration with Windows PowerShell"提供的特定命令。所以我在我的服务器上安装了这个模块。
现在,我想在代码中使用这些命令。我的项目是c# - ASP.NET。
下面是我用来调用传统"cmdlet"命令(New-Mailbox, Set-User,…)的代码:
string runasUsername = @"Mario";
string runasPassword = "MarioKart";
SecureString ssRunasPassword = new SecureString();
foreach (char x in runasPassword)
ssRunasPassword.AppendChar(x);
PSCredential credentials =
new PSCredential(runasUsername, ssRunasPassword);
// Prepare the connection
var connInfo = new WSManConnectionInfo(new Uri("MarioServer"),
"http://schemas.microsoft.com/powershell/Microsoft.Exchange",credentials);
connInfo.AuthenticationMechanism =
AuthenticationMechanism.Basic;
connInfo.SkipCACheck = true;
connInfo.SkipCNCheck = true;
// Create the runspace where the command will be executed
var runspace = RunspaceFactory.CreateRunspace(connInfo);
//Params
....
// create the PowerShell command
var command = new Command("New-Mailbox");
command.Parameters.Add("Name", name);
....
// Add the command to the runspace's pipeline
runspace.Open();
var pipeline = runspace.CreatePipeline();
pipeline.Commands.Add(command);
// Execute the command
var results = pipeline.Invoke();
if (results.Count > 0)
System.Diagnostics.Debug.WriteLine("SUCCESS");
else
System.Diagnostics.Debug.WriteLine("FAIL");
runspace.Dispose();
这段代码工作完美!太棒了!但是假设我想使用"Set-ADUser",这个命令来自ActiveDirectory模块(RSAT工具)。
考虑到服务器上的所有设置(模块已安装),我试图简单地将"New-Mailbox"更改为"set - aduser":
var command = new Command("Set-ADUser");
当我运行代码时,我有这个错误:
术语'Set-ADUser'不被识别为cmdlet、函数、脚本文件或可操作程序的名称。
这就是我的问题:
我们如何从ActiveDirectory模块(RSAT工具)在c#中运行命令?
正如@JPBlanc在评论部分指出的那样,您需要确保ActiveDirectory
PowerShell模块已加载。PowerShell 3.0及以后的版本默认启用了模块自动加载(可以禁用),但如果你的目标仍然是PowerShell 2.0,那么你必须首先调用:
Import-Module -Name ActiveDirectory;
. .在使用模块内的命令之前。
为了验证,可以使用Get-Module
命令,确保ActiveDirectory
模块已经导入。
Get-Module -Name ActiveDirectory;
如果上述命令返回$null
,则表示未导入模块。要验证PowerShell可以"看到"ActiveDirectory
模块,而不需要实际导入它,运行以下命令:
Get-Module -Name ActiveDirectory -ListAvailable;