2016-08-02 41 views
0

私は、ユーザーが簡単なWebインターフェイス経由でExchange上の他のユーザーの不在メッセージを更新できるようにするアプリを持っています。RunSpaceの作成時に内部エラーが発生しました

Microsoft.Exchange.WebServicesを使用してExchangeサービスに接続しようとしましたが、システムアカウントに必要なアクセス許可があるため、これを放棄しなければなりませんでした(アカウントにはEWSフルメール)。私のマシン上またはサーバー上のEXEとしてローカルで実行する場合これも動作します

public class ExchangeShell 
{ 
    private Runspace MyRunSpace; 
    private PowerShell MyPowerShell; 
    private Uri ExchangeServer; 

    public ExchangeShell() 
    { 
     var exchangeserverurl = new Uri("http://EXCHANGESERVER/PowerShell"); 
     var psCredential = GetCredentials(); 
     var connectionInfo = new WSManConnectionInfo(exchangeserverurl, "http://schemas.microsoft.com/powershell/Microsoft.Exchange", psCredential); 

     try 
     { 
      MyRunSpace = RunspaceFactory.CreateRunspace(connectionInfo); 
     } 
     catch (Exception ex) 
     { 
      Email.Send($"Unable to connect \n\n Error: {ex.Message} "); 
      Environment.Exit(Environment.ExitCode); 
     } 
    } 

    public OofSettings GetOofSettings(string email) 
    { 
     using (MyRunSpace) 
     { 
      MyRunSpace.Open(); 

      using (var powerShell = PowerShell.Create()) 
      { 
       powerShell.Runspace = MyRunSpace; 

       var command = new PSCommand(); 

       command.AddCommand("Get-MailboxAutoReplyConfiguration"); 
       command.AddParameter("Identity", email); 

       powerShell.Commands = command; 

       var result = powerShell.Invoke(); 

       var oofSetting = new OofSettings(); 

       oofSetting.State = (OofState)Enum.Parse(typeof(OofState), result[0].Properties["AutoReplyState"].Value.ToString()); 
       oofSetting.Duration = new TimeWindow((DateTime)result[0].Properties["StartTime"].Value, (DateTime)result[0].Properties["EndTime"].Value); 
       oofSetting.ExternalAudience = (OofExternalAudience)Enum.Parse(typeof(OofExternalAudience), result[0].Properties["ExternalAudience"].Value.ToString()); 
       oofSetting.InternalReply = result[0].Properties["InternalMessage"].Value.ToString(); 
       oofSetting.ExternalReply = result[0].Properties["ExternalMessage"].Value.ToString(); 

       return oofSetting; 
      } 
     } 
    } 

    private PSCredential GetCredentials() 
    { 
     var secureString = new SecureString(); 
     foreach (char c in @"PASSWORD") 
     { 
      secureString.AppendChar(c); 
     } 
     return new PSCredential("SERVICEACCOUNT", secureString); 
    } 
} 

だからこれを克服するために、私は同じことを達成するためにPowerShell Remotingを使用して次のクラスを作成しました。

しかし、私はこれは私がこの行のエラーを見ていIIS上でホストするときは:

MyRunSpace = RunspaceFactory.CreateRunspace(connectionInfo); 

内部エラーが発生しました。

これは非常に有用なエラーメッセージではありません。私はこれをどのようにデバッグすることができますか分かりません。誰にもこれに関する提案はありますか?


更新

私はweb.configにトレーサーを取り付け、ここにいくつかのトレース情報は、オフィスの詳細を彼らのうちを取得するには、ユーザーを選択した後である。「

Category  Message     From First(s)  From Last(s) 
aspx.page  Begin PreInit 
aspx.page  End PreInit    0.000025   0.000025 
aspx.page  Begin Init    0.000035   0.000009 
aspx.page  End Init     0.000057   0.000022 
aspx.page  Begin InitComplete  0.000065   0.000008 
aspx.page  End InitComplete   0.000073   0.000008 
aspx.page  Begin PreLoad   0.000081   0.000008 
aspx.page  End PreLoad    0.000093   0.000012 
aspx.page  Begin Load    0.000101   0.000008 

しかし、私は本当にドンこの情報をどのように作るかを知っている - runspaceとサーバーの間で実際に何が起こっているのかはほとんど分かりません。

スタックトレース:System.Management.Automation.Remoting.Client.WSManClientSessionTransportManager.Initialize(ウリをConnectionUri、WSManConnectionInfo connectionInfo)で

System.Management.Automation.Remoting.Client.WSManClientSessionTransportManagerで.. System.ManでSystem.Management.Automation.Remoting.ClientRemoteSessionDSHandlerImpl..ctorでCTOR(GUID runspacePoolInstanceId、WSManConnectionInfo connectionInfo、PSRemotingCryptoHelper cryptoHelper) (ClientRemoteSessionセッション、PSRemotingCryptoHelper cryptoHelper、RunspaceConnectionInfo connectionInfo、URIDirectionReported uriRedirectionHandler) System.Management.Automation.Runspaces.Internalでagement.Automation.Remoting.ClientRemoteSessionImpl..ctor System.Management.Automation.Internal.ClientRunspacePoolDataStructureHandler..ctor(RemoteRunspacePoolInternal clientRunspacePool、TypeTable typeTable)で(RemoteRunspacePoolInternal rsPool、URIDirectionReported uriRedirectionHandler) 。 System.Management.Automation.Runspaces.RunspacePool..ctor(Int32 minRunspaces、Int32 maxRunspaces、TypeTable typeTable、PSHost host、またはSystem.Management.Automation.Runspaces.RunspacePool..ctor)の にあるRemoteRunspacePoolInternal..ctor(Int32 minRunspaces、Int32 maxRunspaces、TypeTable typeTable、PSHostホスト、PSPrimitiveDictionary applicationArguments、RunspaceConnectionInfo connectionInfo) PSPrimitiveDictionary applicationArguments、RunspaceConnectionInfo connectionInfo) at System.Management。SetOutOfOffice.ExchangeShellでSystem.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace(RunspaceConnectionInfo connectionInfo、PSHostホスト、TypeTable typeTable、PSPrimitiveDictionary applicationArguments) でAutomation.RemoteRunspace..ctor(TypeTable typeTable、RunspaceConnectionInfo connectionInfo、PSHostホスト、PSPrimitiveDictionary applicationArguments) ..ctor()

答えて

0

この問題は、サーバーに間違ったバージョンのPowerShellがインストールされていたために発生していました。

Internal Errorメッセージにはこれは言及されていませんが、このエラーが発生したときには確認するのが良いかもしれません。

1

デバッグしたい場合は、.NETでのトレースを使用することができるはずですまたはちょうどあなたがバイパスにしようとする場合がありますので、一般的な問題は、証明書のチェックを失敗しているデバッガ

を添付それらは例えば

connectionInfo.SkipCACheck = true; connectionInfo.SkipCNCheck = true; connectionInfo.MaximumConnectionRedirectionCount = 4;

+0

答えてくれてありがとうGlen、私はそれらの 'connectionInfo'チェックをスキップしましたが、成功しませんでした。 'trace.axd'をチェックした後、私は本当に有益な情報を見ることができません。(私はそれを正しく読まないかもしれませんが) - 私は私の質問にいくつか投稿しました – Bassie

関連する問題