2014-09-17 1 views
1

J'ai un serveur d'échange 2013 dans mon bureau. Je veux trouver toutes les informations sur le serveur d'échange que j'ai trouvé en utilisant les commandes du shell exchange management. Je veux trouver des données comme ci-dessous.Obtenir des informations sur Exchange Server?

Nom du serveur, le nombre de boîtes aux lettres, le nombre de contacts de messagerie, banque d'informations, groupe de stockage, récemment créé et supprimé les boîtes aux lettres, des informations sur toutes les emailflow via le serveur d'échange, des informations sur les expéditeurs, les destinataires et beaucoup plus d'informations que je trouver du serveur d'échange.

par programme. Je veux trouver cette information par programmation à partir d'une distance géographique en utilisant C#. J'ai la fenêtre 7 sur ma machine à travers laquelle, je veux faire cela. J'essaye ceci using la coquille de puissance à distance avec C#. Par exemple, j'ai une coquille de gestion d'échange des commandes à savoir

Get-mailbox -resultsize unlimited -filter {$_.forwardingaddress -ne $null} | select name, userprincipalname 

après l'exécution des applets de commande ci-dessus à l'aide de shell de gestion d'échange, j'ai obtenir des données, je veut obtenir des informations similaires par programmation C#.

Mon extrait de code

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); 
     }    
    } 
    } 
} 

La ligne:

remoteRunspace.Open(); 

Produire une exception donnée ci-dessous:

Connexion au serveur distant a échoué avec le message d'erreur suivant: Le WinRM le client ne peut pas traiter la demande. Le client WinRM a essayé de utiliser le mécanisme d'authentification Negotiate, mais l'ordinateur de destination (IP: 443) a renvoyé une erreur «Accès refusé». Modifiez la configuration pour autoriser l'utilisation du mécanisme d'authentification de négociation ou spécifiez un des mécanismes d'authentification pris en charge par le serveur. Pour utiliser Kerberos, spécifiez le nom de l'ordinateur local comme destination distante. Vérifiez également que l'ordinateur client et l'ordinateur de destination sont joints à un domaine. Pour utiliser Basic, spécifiez le nom de l'ordinateur local comme la destination distante, spécifiez l'authentification de base et indiquez le nom et le mot de passe de l'utilisateur. mécanismes d'authentification possibles signalés par serveur: Pour plus d'informations, consultez la rubrique d'aide about_Remote_Troubleshooting

Comment puis-je résoudre ce type d'exception?

Répondre

1

Accédez au chemin indiqué ci-dessous sur votre serveur et sur lequel vous souhaitez obtenir les informations ci-dessus.

Start Menu -> Administrative tools -> iis manager -> Sites -> default web site -> powershell 

Sélectionnez ensuite l'authentification IIS dans/Powershell maison et après l'ouverture de l'authentification, il y a six authentification énumérés ci-dessous

Anonymous authentication "disabled" 
Asp.net impersonation "disabled" 
Basic authentication  "disabled" 
Digest authentication "disabled" 
Forms authentication  "disabled" 
Windows authentication "disabled" 

maintenant activé la dernière fenêtre permettant l'authentification des fenêtres à savoir l'authentification authentication.After ils regardent comme ci-dessous

Anonymous authentication "disabled" 
Asp.net impersonation "disabled" 
Basic authentication  "disabled" 
Digest authentication "disabled" 
Forms authentication  "disabled" 
Windows authentication "enabled" 

Ensuite, exécutez votre code, et vous obtenez le résultat souhaité.

0

Vous devez définir AuthenticationMechanism sur l'objet WSManConnectionInfo que vous utilisez pour correspondre à la manière dont vous avez configuré votre serveur Exchange.Si vous utilisez https alors vous devriez le mettre à base par exemple

connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Basic; 

Sinon, si vous avez encore la configuration par défaut sur votre serveur Exchange, vous pouvez utiliser Kerberos et http donc changer ce qui est ce qui est utilisé dans les échantillons MSDN http://technet.microsoft.com/en-us/library/dd335083(v=exchg.150).aspx (Make que vous utilisez le nom de domaine complet pas l'adresse IP)

Uri connectTo = new Uri("http://<FQDN>/powershell/"); 

puis utilisez

connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Kerberos; 

Vive Glen

+0

Je suis mis la AuthenticationMechanism sur l'objet WSManConnectionInfo, et je remplace également l'adresse IP du serveur par FQDN, mais je reçois une exception à savoir ** Connexion au serveur distant a échoué avec les éléments suivants message d'erreur: Le client WinRM ne peut pas traiter la demande car le nom du serveur ne peut pas être résolu. Pour plus d'informations, reportez-vous à la rubrique about_Remote_Troubleshooting Help. ** – user3571578

+0

Cette erreur indique que vous ne parvenez pas à résoudre le nom de domaine complet que vous essayez d'utiliser. Vous devriez être capable de ping quelque nom de serveur que vous utilisez si vous ne pouvez pas cela ne fonctionnera jamais. Avez-vous essayé d'utiliser Powershell pour vous connecter depuis la console? Si vous déterminez quel paramètre auth/server fonctionne dans la console, vous devriez pouvoir les déplacer facilement dans votre code. –

+0

J'ai ajouté le FQDN correctement et j'ai essayé Powershell pour se connecter à la console mais je suis incapable de me connecter comme la même erreur accoured. – user3571578

Questions connexes