2013-11-24 3 views
1

Я попытался следующий код, чтобы получить почтовый ящик от обмена server.I я встречая проблема при запуске программыОшибка при выполнении команды Exchange PowerShell из C# программы

static void Main(string[] args) 
{ 
    string user = "Domain\\username"; 
    SecureString passwd = new SecureString(); 
    foreach (char c in "Password") 
    { 
     passwd.AppendChar(c); 
    } 
    PSCredential cred = new PSCredential(user, passwd); 
    WSManConnectionInfo ConnInfo = new WSManConnectionInfo(new Uri(liveIdconnectionUri), "http://schemas.microsoft.com/powershell/Microsoft.Exchange", cred); 
    ConnInfo.AuthenticationMechanism = AuthenticationMechanism.Kerberos; 
    ConnInfo.MaximumConnectionRedirectionCount = 2; 
    //ConnInfo.ProxyAccessType = System.Management.Automation.Remoting.ProxyAccessType.AutoDetect; 
    Runspace ExchangeRunspace = System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace(ConnInfo); 
    PowerShell powershell = PowerShell.Create(); 
    PSCommand command = new PSCommand(); 
    command.AddCommand("Get-Mailbox"); 
    command.AddParameter("Identity", user); 
    powershell.Commands = command; 
    // open the remote runspace 
    ExchangeRunspace.Open(); 
    // associate the runspace with powershell 
    powershell.Runspace = ExchangeRunspace; 
    // invoke the powershell to obtain the results 
    powershell.Invoke(); 
    Collection<PSObject> results = powershell.Invoke(); 

    foreach (PSObject obj in results) 
    { 
     PSMemberInfoCollection<PSPropertyInfo> propInfos = obj.Properties; 
     Console.WriteLine("********************"); 
     foreach (PSPropertyInfo propInfo in propInfos) 
     { 
      string propInfoValue = (propInfo.Value == null) ? "" : propInfo.Value.ToString(); 
      Console.WriteLine("{0} --> {1}", propInfo.Name, propInfoValue); 
     } 


    } 
    Console.ReadLine(); 
} 

Я получаю следующее сообщение об ошибке во время работы выше код

Connecting to remote server failed with the following error message : WinRM cannot process the request. The following error occured while using Kerberos authentication: There are currently no logon servers available to service the logon request. 
Possible causes are: 
    -The user name or password specified are invalid. 
    -Kerberos is used when no authentication method and no user name are specified. 
    -Kerberos accepts domain user names, but not local user names. 
    -The Service Principal Name (SPN) for the remote computer name and port does not exist. 
    -The client and remote computers are in different domains and there is no trust between the two domains. 
After checking for the above issues, try the following: 
    -Check the Event Viewer for events related to authentication. 
    -Change the authentication method; add the destination computer to the WinRM TrustedHosts configuration setting or use HTTPS transport. 
Note that computers in the TrustedHosts list might not be authenticated. 
    -For more information about WinRM configuration, run the following command: winrm help config. For more information, see the about_Remote_Troubleshooting Help topic." 

Даже когда я запускаю команду 'New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionURI $ liveIdconnectionUri -credential "[email protected]" -Authentication керберос', я получаю ту же ошибку.

Любой указатель для решения этого вопроса будет действительно полезен. Спасибо заранее.

ответ

0

Без доступа к системе было бы трудно дать вам точную причину. Я бы хотел (а) бы попробовать:

* Убедитесь, что настройка удалена правильно и что в брандмауэре присутствуют исключения WSMAN. Попробуйте запустить «winrm quickconfig».

* Убедитесь, что вы установили правильную политику выполнения удаленного сценария для сервера. См (Get/Set) -ExecutionPolicy

* Убедитесь в настоящее время прошли соответствующие учетные данные домена и что он может быть заверен от целевого компьютера к домену ctrlr.

0
  string username = "Hitesh"; 
      string password = "Shrimali"; 
      string sSAMAccount = "SAMAccountName"; //here Also you can use Your emailAddress 

      var lyncPW = GetSecurePassword(password); 

      PSCredential creds = new PSCredential(username, lyncPW); 
      Runspace m_RunSpace = RunspaceFactory.CreateRunspace(); 
      PowerShell powershell = PowerShell.Create(); 
      m_RunSpace.Open(); 


      PSCommand CmdCredential = new PSCommand(); 
      CmdCredential.AddCommand("Get-Credential"); 
      CmdCredential.AddParameter("Credential", creds); 
      powershell.Commands = CmdCredential; 
      powershell.Runspace = m_RunSpace; 
      powershell.Invoke(); 


      PSCommand command = new PSCommand(); 
      command.AddCommand("New-PSSession"); 
      command.AddParameter("ConfigurationName", "Microsoft.Exchange"); 
      command.AddParameter("ConnectionUri", "YourURL/PowerShell/"); //Your Exchange URL 
      command.AddParameter("Credential", creds); 
      command.AddParameter("Authentication", "Default"); 
      powershell.Commands = command; 
      powershell.Runspace = m_RunSpace; 
      powershell.Invoke(); 


      PSSessionOption sessionOption = new PSSessionOption(); 
      sessionOption.SkipCACheck = true; 
      sessionOption.SkipCNCheck = true; 
      sessionOption.SkipRevocationCheck = true; 
      command.AddParameter("SessionOption", sessionOption); 
      powershell.Commands = command; 
      powershell.Runspace = m_RunSpace; 

      Collection<PSSession> result = powershell.Invoke<PSSession>(); 
      PSSession ps = result.FirstOrDefault(); 

      RunspaceInvoke runSpaceInvoker = new RunspaceInvoke(m_RunSpace); 
      runSpaceInvoker.Invoke("Set-ExecutionPolicy Unrestricted -Scope CurrentUser"); 


      PSCommand cmdImportSession = new PSCommand(); 
      cmdImportSession.AddCommand("Import-PSSession"); 
      cmdImportSession.AddParameter("Session", ps); 
      cmdImportSession.AddParameter("AllowClobber", true); 
      powershell.Commands = cmdImportSession; 
      powershell.Runspace = m_RunSpace; 
      powershell.Invoke(); 


      PSCommand cmdNewMoveRequest = new PSCommand(); 
      cmdNewMoveRequest.AddCommand("New-MoveRequest"); 
      cmdNewMoveRequest.AddParameter("Identity", sSAMAccount); 
      cmdNewMoveRequest.AddParameter("TargetDatabase", "BoxerProperty Disabled Users Mailbox Database"); 
      powershell.Commands = cmdNewMoveRequest; 
      powershell.Runspace = m_RunSpace; 
      powershell.Invoke(); 


      foreach (ErrorRecord current in powershell.Streams.Error) 
      { 
       // log errors 
      } 

      m_RunSpace.Close(); 
+0

Я использовал «New-MoveRequest» так же, как вы можете использовать любую команду здесь. - спасибо -Hitesh shrimali –

Смежные вопросы