8

Ich versuche eine PowerShell-Sitzung einzurichten, um mehrere Exchange-Befehle für einen Exchange-Server auf dem lokalen Host auszuführen. Ich erhalte den folgenden Fehler:Fehler "Zugriff verweigert", wenn versucht wird, den Exchange-Server auf localhost zu remoten

New-PSSession : [<HOSTNAME>] Connecting to remote server <HOSTNAME> failed with the following error message 
: Access is denied. For more information, see the about_Remote_Troubleshooting Help topic. 
At line:1 char:12 
+ $session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri 'h ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : OpenError: (System.Manageme....RemoteRunspace:RemoteRunspace) [New-PSSession], PSRemotin 
    gTransportException 
    + FullyQualifiedErrorId : AccessDenied,PSSessionOpenFailed 

Mein Code ist eine Kopie Paste aus dem Microsoft Technet Article. Es funktioniert gegen Remote-Maschine, aber immer wenn ich die Maschine anvisiere, von der ich aus laufe, erhalte ich den obigen Fehler.

Was ich bisher versucht:

  1. Auf das about_remote_troubleshooting Hilfethema. Nichts in Bezug auf Zugriff verweigert Fehler funktionierte.
  2. Gezielte Remotecomputer, die dieselben Anmeldeinformationen verwenden wie der Fehler Zugriff verweigert. (Verbunden ohne Problem)
  3. Verifiziert, dass meine PowerShell-Sitzung als Administrator ausgeführt wird. (Es ist)
  4. überprüft, dass die Exchange-Verwaltungsshell erfolgreich gestartet werden kann. (Es ist)
  5. Ohne Anmeldeinformationen versucht, um zu sehen, ob das funktionieren würde. (Es tat nicht)
  6. Überprüft net use und net session, um sicherzustellen, dass ich nicht eine seltsame mehrere Verbindungen mit den gleichen Anmeldeinformationen Problem hatte. (Ich habe nichts gesehen, um dies anzuzeigen)
  7. Versucht dies sowohl aus dem Skript, das Probleme verursacht, als auch durch Eingabe der Befehle in eine Powershell-Konsole von Hand. (hat die gleichen Ergebnisse in beide Richtungen. Yay für die Konsistenz)
  8. Versucht dies auf mehreren Systemen. (Gleiches Ergebnis überall)

Einige schnellen Anmerkungen:

  • Dies ist von Exchange 2013 auf Windows Server 2012. Es ist eine grundlegende Installation, nur eine Testumgebung, die über die Installation sehr wenig Daten und minimale Konfiguration und Remoting ermöglichen.
  • Die Anmeldeinformationen, die verwendet wurden, waren für den Domänenadministrator, der auch über die erforderlichen Exchange-Berechtigungen verfügt, um alles zu tun, was ich tun muss. Das heißt, solange ich eine Maschine anvisiere, die nicht die ist, vor der ich laufe, habe ich keinerlei Probleme, und nichts ändert sich mehr an der Art, wie ich mich verbinde. Darüber hinaus handelt es sich um eine Testdomäne, bei der der Zugriff des Domänenadministrators in keiner Weise eingeschränkt oder optimiert wurde. Daher sollte er vollständigen und vollständigen Zugriff auf alles haben.

Die spezifischen Befehle Ich Eingabe sind:

$cred = Get-Credential 
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri 'http://<HOSTNAME>/Powershell' -Credential $cred 

wie dieses etwas auf den lokalen Host verbindet, was ich tun sollte in der Lage zu? Oder wird es einfach nicht unterstützt?

Ich bin an diesem Punkt vollständig verloren. Jede Hilfe, auch um mich in die richtige Richtung zu lenken, würde sehr geschätzt werden.

EDIT: Ich sollte hinzufügen, ich habe versucht, die Verbindung zu diesem Localhost von einem anderen Computer, mit den gleichen Befehlen wie oben, und es funktionierte ohne Problem. Also, ich nicht denke, ist es ein lokales Konfigurationsproblem.

+0

Sie haben bestätigt, dass Ihr Domänenadministrator auf den Server zugreifen kann? Der Grund, warum ich frage, ist, dass ich glaube, dass sie eine spezielle Erlaubnis brauchen, um sich auszutauschen, und ich denke, dass man das nur aus dem Austausch heraus tun kann. – Luke

+0

@Luke Ja. Ich bin mit meinen Domänenadministrator-Anmeldeinformationen beim Server angemeldet. Darüber hinaus kann ich von einem anderen Computer remote auf diesen Computer mit diesen Domain-Krediten zugreifen. Aka, Computer A hat Austausch installiert. Ich bin bei Computer A angemeldet (localhost im obigen Beispiel) mit Domain-Creds, kann Powershell Remote nicht von A austauschen. Jedoch kann ich von Computer B (auf der gleichen Domain) in Exchange auf Computer A mit den gleichen Krediten remote. Zusätzlich, wenn ich versuche, von Computer A zu Computer C (der auch Exchange installiert hat) mit meinem Admin-Krediten entfernt funktioniert es – Jgraum

+0

okay, so dass es nur funktioniert nicht von A zu A ... ist die Firewall auf? obwohl die Art, wie Sie das erklärt, das nicht das Problem sein könnte ... – Luke

Antwort

1

Also bin ich letzte Woche über die Lösung gestolpert. Es scheint etwas mit der verwendeten Authentifizierung zu tun zu haben. Ich hatte den Parameter "-Authentication" leer gelassen, um den New-PSSession-Befehl sortieren zu lassen, welche Methode am besten wäre.

Offensichtlich ist dies standardmäßig die Authentifizierungsmethode "Negotiate", die Kerberos gegen eine Remote-Maschine auswählt, aber NTLM andernfalls wählt (oder zumindest war das mein beobachtetes/angenommenes Verhalten). Siehe this Microsoft description der Authentifizierungsmethoden.

Angabe einer bestimmten Authentifizierungsmethode (sowohl "Kerberos" als auch "Basic" funktionierte, "Negotiate" nicht, ich bastelte nicht zu viel darüber) löste das Problem und erlaubte mir, eine Verbindung zur lokalen Exchange-Instanz herzustellen .

Also, anstatt dies:

$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri 'http://<HOSTNAME>/Powershell' -Credential $cred 

tun:

$session = New-PSSession -Authentication Kerberos -ConfigurationName Microsoft.Exchange -ConnectionUri 'http://<HOSTNAME>/Powershell' -Credential $cred 

Warum diese Arbeit getan hat? Ich habe keine Ahnung. Ich werde es Leuten überlassen, die mehr wissen als ich, um es zu erklären.

0

Wenn Sie nur versuchen, eine Sitzung auf demselben Computer wie Ihre aktuelle Sitzung zu erstellen, lassen Sie den URI weg.

Dadurch wird eine neue Sitzung auf dem lokalen Host erstellt, mit der Sie sich verbinden und nach Bedarf verwenden können.

+0

Versuchte dies, brachte mich näher. Die Sitzung wurde erstellt, aber aus irgendeinem Grund hatte sie nicht die Befehle, die ich ausführen musste. Ich bin mir nicht ganz sicher, warum, als ich dachte * der Konfigurationsname war, was diese Befehle verfügbar machte. Ich denke, ich muss nur feststellen, dass ich irgendwie meine localhost targeting bin und nur das Snapin (microsoft.blah.blah.blah.Powershell.E2010) laden und Zugriff auf die Befehle auf diese Weise erhalten. – Jgraum

+0

Ich denke, dass Sie vielleicht darüber nachdenken und den Punkt des Artikels, den Sie verlinkt haben, übersehen haben. Die ganze Sache besteht darin, auf die Exchange-Cmdlets * zuzugreifen, wenn Sie nicht die Exchange PowerShell-Tools auf Ihrem lokalen Computer * installiert haben, was Sie tun. Für die lokale Verwendung sollten Sie eine Verknüpfung zur Exchange-Verwaltungskonsole oder etwas Ähnlichem haben, mit der eine Powershell-Sitzung mit den bereits geladenen und verfügbaren Exchange-Cmdlets erstellt wird. – TheMadTechnician

+0

Ich habe meine beabsichtigte Verwendung nicht richtig erklärt. Ich schreibe ein Skript, um automatisch eine Sammlung von Befehlen für einen bestimmten Exchange-Server auszuführen. Es wird von einer externen Anwendung ausgeführt und ich möchte nicht, dass eine Konsole angezeigt wird. Also ... Soweit ich das beurteilen kann, muss ich eine Pssession gegen die lokale Maschine erstellen.Allerdings habe ich Ende letzter Woche eine Lösung gefunden, die ich in Kürze hier als Antwort veröffentlichen werde. – Jgraum

Verwandte Themen