正在获取有关exchange服务器的信息
本文关键字:服务器 信息 exchange 获取 | 更新日期: 2023-09-27 18:22:12
我的办公室里有一台exchange服务器2013。我想查找使用exchangemanagementshell命令找到的有关exchange服务器的所有信息。我想找到如下数据。
服务器名称、邮箱数、邮件联系人数、信息存储、存储组、最近创建和删除的邮箱、有关exchange服务器中所有电子邮件流的信息、有关发件人、收件人的信息以及我从exchange服务器中找到的更多信息。
程序化。我想使用C#从地理距离以编程方式找到这些信息。我的机器上有一个窗口7,我想通过它来做这件事。我正在使用带有C#的远程电源外壳进行尝试。例如,我有一个交换机管理shell命令,即
Get-mailbox -resultsize unlimited -filter {$_.forwardingaddress -ne $null} | select name, userprincipalname
在使用exchangemanagementshell执行了上述cmdlet之后,我已经获得了一些数据,我想使用C#以编程方式获得类似的信息。
我的代码片段
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections.ObjectModel;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string schemaURI = "http://schemas.microsoft.com/powershell/Microsoft.Exchange";
Uri connectTo = new Uri("https://<serverIP>/powershell/");
string strpassword = "password";
System.Security.SecureString securePassword = new System.Security.SecureString();
foreach (char c in strpassword)
{
securePassword.AppendChar(c);
}
PSCredential credential = new PSCredential("Administrator", securePassword);
WSManConnectionInfo connectionInfo = new WSManConnectionInfo(connectTo,schemaURI, credential);
connectionInfo.MaximumConnectionRedirectionCount = 5;
connectionInfo.SkipCACheck = true;
connectionInfo.SkipCNCheck = true;
try
{
Runspace remoteRunspace = RunspaceFactory.CreateRunspace(connectionInfo);
remoteRunspace.Open();
var command = new Command("Get-mailbox");
command.Parameters.Add("resultsize", "unlimited");
command.Parameters.Add("Filter", "{forwardingaddress -ne $null}");
var pipeline = remoteRunspace.CreatePipeline();
pipeline.Commands.Add(command);
var results = pipeline.Invoke();
foreach (PSObject item in results)
{
PSPropertyInfo pinfo = (PSPropertyInfo)item.Properties["Name"];
PSPropertyInfo prop = (PSPropertyInfo)item.Properties["userprincipalname"];
//prop = item.Properties["Name"];
if (pinfo != null)
{
MessageBox.Show(pinfo.Value.ToString());
}
if (prop != null)
{
MessageBox.Show(prop.Value.ToString());
}
}
remoteRunspace.Dispose();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
线路:
remoteRunspace.Open();
生成以下异常:
连接到远程服务器失败,返回以下错误消息:WinRM客户端无法处理该请求。WinRM客户端尝试使用协商身份验证机制,但使用目标计算机(IP:443)返回"拒绝访问"错误。更改配置允许使用协商身份验证机制或指定一个服务器支持的身份验证机制。使用Kerberos,指定本地计算机名称作为远程目标。还要验证客户端计算机和目标计算机是否已加入域。要使用Basic,请将本地计算机名指定为远程目标,指定基本身份验证并提供用户名称和密码。报告的可能身份验证机制服务器:有关详细信息,请参阅about_Remote_Troubleshooting帮助主题
如何修复这种类型的异常?
在您的服务器上转到下面给定的路径,您希望获得有关该路径的上述信息。
Start Menu -> Administrative tools -> iis manager -> Sites -> default web site -> powershell
然后在/powershell主页中选择IIS身份验证,打开身份验证后,中列出了六个身份验证
Anonymous authentication "disabled"
Asp.net impersonation "disabled"
Basic authentication "disabled"
Digest authentication "disabled"
Forms authentication "disabled"
Windows authentication "disabled"
现在启用了最后一个身份验证,即windows身份验证。启用windows身份验证后,它们看起来像低于
Anonymous authentication "disabled"
Asp.net impersonation "disabled"
Basic authentication "disabled"
Digest authentication "disabled"
Forms authentication "disabled"
Windows authentication "enabled"
在那之后运行你的代码,你得到了想要的结果。
您需要在使用的WSManConnectionInfo对象上设置AuthenticationMechanism,以匹配Exchange Server的配置方式。如果你使用https,那么你应该将其设置为Basic,例如
connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Basic;
否则,如果您的Exchange Server上仍然有默认配置,则可以使用Kerberos和http,因此更改MSDN示例中使用的配置http://technet.microsoft.com/en-us/library/dd335083(v=exchg.150).aspx(确保使用FQDN而非IP)
Uri connectTo = new Uri("http://<FQDN>/powershell/");
然后使用
connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Kerberos;
干杯Glen