8

Próbuję ustanowić sesję PowerShell, aby uruchomić kilka poleceń programu Exchange na serwerze Exchange na hoście lokalnym. Wciąż otrzymuję następujący błąd:Błąd "Odmowa dostępu" podczas próby zdalnego dostępu do serwera Exchange na localhost

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 

Mój kod to pasta odpis z Microsoft Technet Article. Działa na zdalnym komputerze, ale gdy tylko celuję w komputer, z którego uruchamiam, pojawia się powyższy błąd.

Co próbowałem dotąd:

  1. sprawdzone temat about_remote_troubleshooting pomocy. Nie ma tam nic związanego z błędami dotyczącymi odmowy dostępu.
  2. Ukierunkowane komputery zdalne korzystające z tych samych poświadczeń, co odebrany błąd odmowy dostępu. (Połączono bez problemu)
  3. Zweryfikowano, że moja sesja PowerShell działa jako Administrator. (Jest)
  4. Zweryfikowano, że Exchange Management Shell może się pomyślnie uruchomić. (Jest)
  5. Próbowano bez poświadczeń, aby sprawdzić, czy to zadziała. (Nie)
  6. Sprawdzono net use i net session, aby upewnić się, że nie miałem dziwnych połączeń wielokrotnych z tym samym numerem poświadczeń. (Nie widziałem niczego, co by to wskazywało)
  7. Próbowałem tego zarówno ze skryptu, który powoduje problemy, jak i ręcznie wpisując polecenia do konsoli Power Shell. (uzyskałem takie same wyniki w obie strony, Yay dla spójności)
  8. Próbowałem tego na wielu systemach. (Taki sam wynik wszędzie)

Kilka szybkich notatek:

  • Jest Exchange 2013 z systemem Windows Server 2012. Jest to podstawowa instalacja, tylko środowisko testowe, które ma bardzo mało danych i minimalnej konfiguracji poza instalacją i włączanie zdalnego dostępu.
  • Poświadczenia użyte zostały dla administratora domeny, który ma również niezbędne uprawnienia Exchange, aby zrobić to, co trzeba. Np. Dopóki celuję w maszynę, która nie jest tą, z której korzystam, nie mam żadnych problemów, ponieważ nic się nie zmieni w sposobie, w jaki się łączę. Dodatkowo jest to domena testowa, w której dostęp administratora domeny nie został w żaden sposób ograniczony lub zmodyfikowany, więc powinien mieć pełny i pełny dostęp do wszystkiego.

Poszczególne komendy mam wchodzące są:

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

łączy się z localhost jak to coś, że powinienem być w stanie to zrobić? Czy to nie jest po prostu obsługiwane?

Jestem w tym momencie kompletnie zagubiony. Każda pomoc, nawet wskazanie mi we właściwym kierunku, byłaby bardzo doceniona.

EDYCJA: Powinienem dodać, próbowałem połączyć się z tym localhost z innego komputera, używając tych samych poleceń, jak powyżej, i działało bez problemu. Tak więc nie myślę, że to jest problem z konfiguracją lokalną.

+0

Czy zweryfikowałeś, że administrator domeny może uzyskać dostęp do serwera? Powodem, dla którego pytam, jest to, że uważam, że potrzebują specjalnego zezwolenia na zdalne wymienianie się, i myślę, że możesz to zrobić tylko z wewnątrz. – Luke

+0

@Luke Tak. Jestem zalogowany na serwerze przy użyciu poświadczeń administratora domeny. Ponadto z innego komputera mogę uzyskać zdalny dostęp do tego komputera przy użyciu tych uprawnień. Aka, komputer A ma zainstalowaną wymianę. Jestem zalogowany do komputera A (localhost w powyższym przykładzie) z kredytami domen, nie mogę powershell zdalny do wymiany z A. Jednak z komputera B (w tej samej domenie) mogę zdalnie do Exchange na komputerze A z tymi samymi creds. Dodatkowo, jeśli próbuję zdalnie od komputera A do komputera C (który również ma zainstalowane wymiany) z moimi administracjami, to działa – Jgraum

+0

w porządku, więc nie działa tylko od A do A ... jest włączona zapora? chociaż sposób, w jaki to wyjaśniłeś, może nie być problemem ... – Luke

Odpowiedz

1

Więc natknąłem się na rozwiązanie pod koniec zeszłego tygodnia. Wygląda na to, że ma coś wspólnego z używanym uwierzytelnianiem. Zostawiłem parametr "-Authentication" pusty, zamierzając pozwolić komendzie New-PSSession ustalić, która metoda byłaby najlepsza.

Najwyraźniej jest to domyślna metoda uwierzytelniania "Negocjuj", która wybierze Kerberos na zdalnej maszynie, ale wybierze NTLM w inny sposób (lub przynajmniej takie było moje zachowanie obserwowane/zakładane). Zobacz this Microsoft description metod uwierzytelniania.

Określanie konkretnej metody uwierzytelniania (zarówno "Kerberos" i "podstawowy" działało, "Negocjuj" nie, nie majstrowałem za dużo) rozwiązuje problem i pozwala mi połączyć się z lokalną instancją wymiany .

Więc zamiast tego:

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

Wykonaj:

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

Dlaczego to działa? Nie mam pojęcia. Zostawię to ludziom, którzy wiedzą więcej niż ja, aby to wyjaśnić.

0

Jeśli próbujesz utworzyć sesję na tym samym komputerze co bieżąca sesja, pomiń URI.

$cred = Get-Credential 
$session = New-PSSession -ConfigurationName Microsoft.Exchange -Credential $cred 

Spowoduje to utworzenie nowej sesji na localhost, z której można się połączyć i wykorzystać w razie potrzeby.

+0

Próbowałem tego, zbliżyłem się. Sesja została utworzona, ale z jakiegoś powodu nie ma w niej poleceń, które muszę uruchomić. Nie jestem do końca pewien, dlaczego, jak ja * myślałem *, nazwa konfiguracji była tym, co udostępniło te polecenia. Myślę, że być może muszę po prostu wykryć, że celuję w mój localhost i jakoś załadować snapin (microsoft.blah.blah.blah.Powershell.E2010) i uzyskać dostęp do poleceń w ten sposób. – Jgraum

+0

Myślę, że możesz przestać o tym myśleć i pomijać punkt tego artykułu, który łączyłeś. Chodzi o to, aby uzyskać dostęp do cmdletów Exchange *, jeśli nie masz zainstalowanych narzędzi Exchange PowerShell Tools na komputerze lokalnym *, co robisz. Do użytku lokalnego powinieneś mieć skrót do konsoli zarządzania programu Exchange lub coś podobnego, co spowoduje utworzenie sesji uprawnień z już załadowanymi i dostępnymi poleceniami cmdlet Exchange. – TheMadTechnician

+0

Mogłem nie wyjaśnić poprawnie mojego przeznaczenia. Piszę skrypt, aby automatycznie uruchamiać kolekcję poleceń przeciwko danemu serwerowi wymiany. Będzie uruchamiany z zewnętrznej aplikacji i nie chcę, aby pojawiała się konsola. Więc ... O ile wiem, potrzebuję stworzyć pssession przeciwko lokalnej maszynie.Jednak znalazłem rozwiązanie pod koniec zeszłego tygodnia, wkrótce opiszę to tutaj jako odpowiedź. – Jgraum