Ich habe eine App, die es Benutzern ermöglicht, die Abwesenheitsnotiz anderer Benutzer auf Exchange über eine einfache Webschnittstelle zu aktualisieren.Interner Fehler beim Erstellen von RunSpace
Mein erster Versuch, diese Microsoft.Exchange.WebServices
verwendet, um die Erstellung zu verbinden Dienstleistungen auszutauschen, aber ich hatte diese zu verlassen (auch wenn es funktioniert hat) aufgrund der auf dem Systemkonto erforderlichen Berechtigungen (ein Konto OOF-Nachrichten über EWS
Aktualisierung erfordert FULL Postfachberechtigungen).
Also, dies zu überwinden, habe ich die folgende Klasse, die PowerShell
Remote verwendet die gleiche Sache zu erreichen:
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);
}
}
Dies funktioniert auch, wenn sie lokal auf meinem Rechner oder als EXE auf dem Server ausgeführt.
Allerdings, wenn ich Gastgeber dies über IIS ich auf dieser Linie einen Fehler sehe:
MyRunSpace = RunspaceFactory.CreateRunspace(connectionInfo);
ein interner Fehler aufgetreten.
Dies ist keine sehr hilfreiche Fehlermeldung und ich bin mir nicht sicher, wie ich über das Debugging gehen kann. Hat jemand dazu irgendwelche Vorschläge?
aktualisieren
angebracht ich einen Tracer in web.config
und hier ist eine Trace-Informationen nach Auswahl eines Benutzers ihre aus dem Amt Details abzurufen:
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
Aber ich wirklich don‘ Ich weiß nicht, was ich aus dieser Information machen soll - es scheint nicht viel darüber zu sagen, was zwischen dem runspace
und dem Server passiert.
Stack Trace:
bei System.Management.Automation.Remoting.Client.WSManClientSessionTransportManager.Initialize (Uri ConnectionURI, WSManConnectionInfo connection) bei System.Management.Automation.Remoting.Client.WSManClientSessionTransportManager .. ctor (Guid runspacePoolInstanceId, WSManConnectionInfo connection, PSRemotingCryptoHelper cryptoHelper) bei System.Management.Automation.Remoting.ClientRemoteSessionDSHandlerImpl..ctor (ClientRemoteSession Sitzung, PSRemotingCryptoHelper cryptoHelper, RunspaceConnectionInfo connection, URIDirectionReported uriRedirectionHandler) bei System.Man agement.Automation.Remoting.ClientRemoteSessionImpl..ctor (RemoteRunspacePoolInternal rsPool, URIDirectionReported uriRedirectionHandler) bei System.Management.Automation.Internal.ClientRunspacePoolDataStructureHandler..ctor (RemoteRunspacePoolInternal clientRunspacePool, TypeTable typeTable) bei System.Management.Automation.Runspaces.Internal. RemoteRunspacePoolInternal..ctor (Int32 minRunspaces, Int32 maxRunspaces, TypeTable typeTable, PSHost-Host, PSPrimitiveDictionary applicationArguments, RunspaceConnectionInfo connectionInfo) bei System.Management.Automation.Runspaces.RunspacePool..ctor (Int32 minRunspaces, Int32 maxRunspaces, TypeTable typeTable, PSHost-Host, PSPrimitiveDictionary applicationArguments, RunspaceConnectionInfo connectionInfo) bei System.Management.Automation.RemoteRunspace..ctor (TypeTable typeTable, RunspaceConnectionInfo connection, PSHost Wirt, PSPrimitiveDictionary applicationArguments) bei System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace (RunspaceConnectionInfo connection, PSHost Wirt, TypeTable typeTable, PSPrimitiveDictionary applicationArguments) bei SetOutOfOffice.ExchangeShell ..ctor()
Vielen Dank für Ihre Antwort Glen, ich habe versucht, diese 'connectionInfo' Checks zu überspringen, aber ohne Erfolg. Nach der Überprüfung von 'trace.axd' kann ich wirklich keine nützlichen Informationen sehen (obwohl ich es vielleicht nicht richtig lese) - ich habe einige in meiner Frage gepostet – Bassie