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