2012-03-29 4 views
0

ich die folgende Batch-Skript auf einem Windows 2008 R2 Server:Batch-Skript läuft gut, aber nicht, wenn sie durch Powershell-Remoting ausgeführt

@echo off 
djoin.exe /provision /domain my.domain.com /machine test /savefile savefile.txt 
echo %ERRORLEVEL% 

Wenn ich das Skript auf dem Server laufen selbst, entweder durch Eingabeaufforderung oder PowerShell, es funktioniert einwandfrei und gibt "0" zurück.

Das Problem ist, dass ich es von einem entfernten Computer ausführen müssen, so dass ich die folgenden Punkte (ein Beispiel nur zum Testen) tun:

Invoke-Command -ComputerName remotehost -ScriptBlock {.\script.cmd} 

Der Ausgang „-1073740940“ ist, was wahrscheinlich ist, Fehler Code C0000374, der etwas mit der Heap-Beschädigung zu tun haben könnte.

Dies scheint ein Problem mit dem Befehl djoin selbst zu sein. Ich kann djoin auskommentieren und andere Binaries wie Ping ausführen, ohne Probleme mit dem gleichen Invoke-Befehl.

Wenn Sie daran denken, dass das Skript einwandfrei funktioniert, wenn es von PowerShell auf dem Zielcomputer ausgeführt wird, welche Probleme könnte der Vorgang des Remotings verursachen?

In beiden Fällen wird das Skript mit den gleichen Berechtigungen ausgeführt, die mein Konto verwenden, das ein Mitglied von Domänen-Admins ist. Ich bezweifle, dass es ein Problem mit Berechtigungen ist und keine Ahnung, wo ich sonst hinschauen könnte.

[Bearbeiten]

Gave über die ganze Sache auf. Dies ist entweder ein Fehler in djoin oder ein unklares Problem in der Interaktion zwischen djoin und PS remoting.

Ich habe es geschafft, djoin direkt auf dem Client laufen zu lassen, indem ich 'runas/netonly ...' benutzte, um Domänen-Zugangsdaten bereitzustellen. Es ist eine sehr unordentliche Lösung (und ich muss noch herausfinden, wie man den Exit-Status eines Prozesses, der mit runas gestartet wurde, bekommt), aber erledigt die Arbeit.

+0

Ist 'Invoke-Command -Computer remotehost -ScriptBlock {djoin.exe/Bereitstellung/Domäne my.domain.com/machine test/savefile savefile.txt; $ LASTEXITCODE} 'etwas anderes tun? Mit anderen Worten: Warum brauchen Sie die Batch-Datei? – Joey

+0

Das scheitert genau so. Die Batch-Datei ist entstanden, als mir alle anderen Ideen, wie man djoin.exe ausführen könnte, ausgegangen sind. Die Sache ist, dass das Ausführen von "djoin.exe /?", Zum Beispiel, völlig in Ordnung ist, und ich bekomme die Nutzungsausgabe. Dieser Befehl wird jedoch verwendet, um Computerkonten im Active Directory vorab zu stempeln. Dies ist die Hauptoperation, die fehlschlägt. – VokinLoksar

+0

Ok, aber es ist nicht die Batch-Datei, sondern das Problem mit PowerShell-Remoting, das verhindert, dass 'djoin' das tut, was es tun soll. – Joey

Antwort

0

Dies ist mit ziemlicher Sicherheit ein klassisches "Double-Hop" -Authentifizierungsproblem. Denken Sie daran, dass Sie bei Verwendung von PowerShell Remoting einen dieser Hops verwenden. Alles, was Sie auf diesem Remote-Computer ausführen, der auf einen dritten Remote-Computer zugreift, funktioniert wahrscheinlich nicht, wenn eine Authentifizierung erforderlich ist.

Um dies zu umgehen, können Sie eine Authentifizierungsmethode verwenden, die Ihnen ermöglicht, Delegierten Anmeldeinformationen wie CredSSP. Es ist ein wenig komplizierter, als einfach Ihren Authentifizierungstyp zu ändern, da Sie Änderungen auf der Clientseite und auf der Serverseite der Transaktion vornehmen müssen. Lesen Sie in diesem Blogpost auf MSDN, PowerShell Remoting and the “Double-Hop” Problem und dieses "Hey, Scripting Guy!" Post, Enable PowerShell "Second-Hop" Functionality with CredSSP.

Verwandte Themen