Herstellen einer Verbindung mit Microsoft Exchange PowerShell in C #

8

Ich versuche, von der C # .NET WinForms App aus eine Verbindung zur Remote-Powershell herzustellen. Mein Ziel ist es, eine eigene Version von Microsoft PowerShell ISE zu erstellen. Also brauche ich eine Möglichkeit, PowerShell-Skripte von meiner App auf Remote Machines auszuführen. Ich habe einige Methoden erstellt und auf dem lokalen Computer von meiner App aus getestet. Wenn ich WSManConnectionInfo nicht verwende und benutze (Runspace remoteRunspace = RunspaceFactory.CreateRunspace ()) kann ich Scripts lokal ausführen, als wäre es eine echte Powershell (kleine Skripte, Verwendung Variablen, Ausgabedaten mit ft , fl , machen eine Menge anderer Dinge, die ich normalerweise mit Powershell mache. Das Problem beginnt, wenn ich WSManConnectionInfo und hinzufüge Hinweis: Es kann grundlegende Dinge wie "get-mailbox" ausführen, aber sobald ich versuche, Dinge zu puffern, benutze einige Skriptfunktionen wie $ variable, die brechen und sagen, dass es nicht unterstützt wird.

Ebenso muss ich powershell.AddCommand ("out-string"); deaktivieren, wenn ich es nicht lokal verwende.

  

Eine nicht behandelte Ausnahme vom Typ 'System.Management.Automation.RemoteException' ist in System.Management.Automation.dll aufgetreten.

     

Weitere Informationen: Der Begriff 'Out-String' wird nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder überprüfen Sie, ob der Pfad korrekt ist, und versuchen Sie es erneut.

Derselbe Fehler tritt nicht auf, wenn ich die Remote-Verbindung nicht erzwinge, sondern einfach lokal. Es sieht so aus, als ob das SchemaUri es sehr streng macht, nur grundlegende Befehle auszuführen. Ich sah andere Beispiele, in denen Leute sehr direkte Informationen wie uns benutzten:

%Vor%

Aber bei diesem Ansatz müsste ich viele mögliche Optionen definieren und ich möchte nicht Parameter und andere Dinge definieren. Ich möchte einfach "Skript" laden und es wie im PowerShell-Fenster ausführen. Hier ist ein Beispiel, was ich jetzt benutze.

%Vor%

Irgendwelche Ratschläge, warum dies geschieht, und Workaround, wie man es dazu bringt, sich genauso zu verhalten? Ich habe viele Blogs wie dies , aber das Definieren jedes einfachen Befehls ergibt für mich keinen Sinn. Ich sah auch eine Option zum Erstellen einer lokalen Verbindung und dann Remote-Verbindung innerhalb dieser Aber das muss der letzte Ausweg sein, da es sich auf mehrere andere Faktoren stützt.

    
MadBoy 26.03.2016, 15:09
quelle

3 Antworten

7

Überprüfen Sie Ссылка :

  

Die von Exchange 2010 über PowerShell bereitgestellte Managementerfahrung   wurde von Local nach Remote verschoben. [...] In diesem Remoting-Szenario funktionieren nur Exchange-Cmdlets. Sie können die meisten Powershell-Cmdlets nicht ausführen . [...] Ja, das bedeutet, dass Sie keine Cmdlets wie Where-Object- und .PS1-Skripts im Remote-Runspace ausführen können .

     

Ist das eine Einschränkung? Ich denke nicht. Wir können sehr leicht umgehen, indem wir eine neue Session erstellen und importieren .

Sie müssen also so etwas machen :

%Vor%     
Aziz Kabyshev 30.03.2016, 21:45
quelle
2

Ab Exchange Server 2010 müssen Sie eine Remote-PowerShell-Sitzung verwenden, anstatt Exchange-PowerShell-Snapin direkt hinzuzufügen (aufgrund der Verwendung von RBAC anstelle von ACL im Austausch 2010). Sie müssen also eine neue PowerShell-Sitzung erstellen (mit New-PSSession) und sie dann importieren (mit Import-PSSession). Sie können Code wie diesen verwenden, um Ihre PowerShell-Befehle remote auszuführen:

%Vor%     
SergeyIL 05.04.2016 14:35
quelle
0

Es sieht so aus, als ob Sie Probleme mit der Doppel-Hop-Authentifizierung haben. Ich hatte die gleichen Probleme, als ich das versuchte.

Nach dem Durcheinander habe ich die Exchange PowerShell-Addins lokal installiert und sie verwendet, um eine Remote-Verbindung mit dem Exchange-Server herzustellen.

Grobes Beispiel:

%Vor%     
ServerMonkey 29.03.2016 06:58
quelle