如何在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#中运行命令?

如何在c#中使用ActiveDirectory模块(RSAT工具)

正如@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;