Powershell常规会话,并在Exchange远程管理会话中导入此会话
本文关键字:会话 导入 远程管理 并在 常规 Powershell Exchange | 更新日期: 2023-09-27 18:11:40
情况:
我正在尝试制作一个应用程序(c#-asp.net(来操作exchange服务器上的用户。该应用程序将位于与交易所不同的服务器上。因此,为了操作数据,我使用了一个用c#创建的"Exchange远程管理会话"。Exchange远程管理会话允许访问简单的powershell命令,如"新建邮箱"answers"设置用户"-这对于简单的任务很好,但在我的情况下,我必须执行更复杂的操作,这些操作需要一些默认命令中未包含的特定命令。要访问这个命令,我必须使用一些特定的模块,比如"ActiveDirectory"。很简单吗?仅使用"导入模块"!不是真的,就像我说的,"Exchange远程管理会话"受到命令的限制,并且"导入模块"是不允许的。。。
那么我们能做什么呢
我读了很多关于我的问题的书,最"简单"(我理解理论(的解决方案是:
从通用PS会话开始,导入AD模块,然后连接到Exchange管理会话,执行import PSSession并对Exchange管理内容使用隐式远程处理
考虑到我对用c#操作Powershell还很陌生,我不知道如何在我的代码中使用这个很棒的解决方案。所以我请求你的帮助。
这是我当前的代码:
// Prepare the credentials.
string runasUsername = @"MarioKart 8";
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("MarioKart8Server"),
"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);
// create the PowerShell command
var command = new Command("New-Mailbox");
....
// 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");
此代码适用于简单的任务(如"新邮箱"(!但是,如何创建"通用PS会话",然后在"Exchange远程管理会话"中使用此会话?
据我所知,您的问题是:
您必须执行更复杂的操作,这些操作需要一些默认命令中未包含的特定命令。要访问此命令,您必须使用一些特定的模块,如"Active Directory">
以下是在没有PowerShell模块的情况下使用C#查询Active Directory的三种方法(。
第一个,使用ADSI(老式(
如何用C#在Active Directory上做几乎所有的事情(使用ADSI(。
第二个,从.NET 3.5开始Microsoft引入Principal
和AccountManagement
。
如何用C#在Active Directory上做几乎所有的事情(使用AccountManagement(。
第三,您可以使用低级别(本地LDAP(协议
System.DirectoryServices.Protocols(S.DS.p(.
您并不完全正确。由于您正在连接到REMOTE powershell会话,因此不需要执行导入模块。
创建会话时,IIS和Powershell将根据与凭据关联的访问权限自动为您加载所需的模块。这与加载Exchange Powershell时类似,并在页面加载模块顶部看到绿色条。
希望能有所帮助。