标题几乎解释了这一切。我有一个没有在Exchange Server上运行的C#应用程序。我需要能够创建邮箱。我尝试使用this教程,但它需要PowerShell IIS Virutal目录:
我们不能做的事情。这引出了两种可能的解决方案。有没有办法修改上面列出的教程不需要这两个限制,或者有没有办法在不使用电源shell的情况下完成它?
以下是代码,如果您不想访问该链接:
using System;
using System.Security;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
namespace PowerShellTest
{
class Program
{
static void Main(string[] args)
{
// Prepare the credentials that will be used when connecting
// to the server. More info on the user to use on the notes
// below this code snippet.
string runasUsername = @"username";
string runasPassword = "password";
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("http://ServersIpAddress/PowerShell"),
"http://schemas.microsoft.com/powershell/Microsoft.Exchange",
credentials);
connInfo.AuthenticationMechanism =
AuthenticationMechanism.Basic;
// Create the runspace where the command will be executed
var runspace = RunspaceFactory.CreateRunspace(connInfo);
// generate the command parameters
var testNumber = 18;
var firstName = "Test";
var lastName = "User" + testNumber;
var username = "tuser" + testNumber;
var domainName = "pedro.test.local";
var password = "ActiveDirectoryPassword1234";
var ssPassword = new SecureString();
foreach (char c in password)
ssPassword.AppendChar(c);
// create the PowerShell command
var command = new Command("New-Mailbox");
command.Parameters.Add("Name", firstName + " " + lastName);
command.Parameters.Add("Alias", username);
command.Parameters.Add(
"UserPrincipalName", username + "@" + domainName);
command.Parameters.Add("SamAccountName", username);
command.Parameters.Add("FirstName", firstName);
command.Parameters.Add("LastName", lastName);
command.Parameters.Add("Password", ssPassword);
command.Parameters.Add("ResetPasswordOnNextLogon", false);
command.Parameters.Add(
"OrganizationalUnit", "NeumontStudents");
// 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();
runspace.Dispose();
if (results.Count > 0)
Console.WriteLine("SUCCESS");
else
Console.WriteLine("FAIL");
}
}
}
答案 0 :(得分:1)
您可以设置一个具有许多不同AuthenticationMechanism
的
使用以下命令访问MSDN网站以获取代码示例:
http://msdn.microsoft.com/en-us/library/ff326159(v=exchg.140).aspx
无论如何,还不需要放弃PowerShell。
答案 1 :(得分:1)
该博客文章的代码有点破碎。 Pipeline类是一种创建命令的过于复杂的方式,它的编写方式涉及创建一对运行空间(一个本地,一个远程),而不仅仅是远程运行空间。
此外,IIS中的“基本”和“http”并不意味着“在PowerShell中没有安全性和加密”。通过WinRM层发送的所有内容都是默认加密的。
来自Exchange团队的This Link涵盖了在C#中正确完成此任务的正确方法。
所以:
也是100%晶莹剔透的:
除了通过PowerShell之外,您无法远程管理Exchange 2010。
希望这有助于