2016-08-05 18 views
0

Ich habe eine Website, die zwei Server verwendet (A und B). Es zeigt Berichte an, die aus MSSQL gezogen wurden. Die Server sind beide Windows 2012 R2. Ich habe eine .bat-Datei, die ich erstellt habe, um die Website-Dateien von einem Server (B) auf den anderen (A) zu kopieren, so dass ich sie zusammen aktualisieren kann. Ich manuell nur die Dateien für die Website auf Server B aktualisieren.Bat-Skript auf Server B ausgeführt kann keine Verbindung zu Server A herstellen, um Dateien zu kopieren

Ich kann die .bat-Datei in Ordnung auf meinem Computer oder direkt auf jedem Server und es funktioniert gut, alle Dateien werden von B nach A kopiert. Hier ist die .bat file:

rem echo off 

SET source="D:\WebContent\engsys.corp.ftr.com" 
SET source2="\\MAFINFWWWPV02\D$\WebContent\engsys.corp.ftr.com" 
SET dest1="\\MAFINFWWWPV01\engsys.corp.ftr.com" 

xcopy %source% %dest1% /E /Y 

rem xcopy %source2% %dest1% /E /Y 

echo #%username%@%computername% 

Ich verwende Variablen, damit ich sie schnell zum Testen schalten kann.

Ich habe eine Schaltfläche auf einer meiner Webseiten erstellt, so dass ich einfach auf die Schaltfläche klicken konnte, und es wird die .bat-Datei ausgeführt. Allerdings kopiert es die Dateien nicht, wenn ich es mit der Schaltfläche starte. In der Website, wenn ich auf die Schaltfläche klicken diese aufgerufen wird: system('cmd /c ' . $script); dann auf der Webseite zeigt es

Ungültige Laufwerksspezifikation 0 Datei (en) kopiert

Wenn ich das Ziel zu C:\Temp dann ändern läuft gut und kopiert die Dateien in den Ordner auf dem Server, auf dem das Skript ausgeführt wird. Wenn ich es zu Z:\ ändere, erhalte ich den gleichen Fehler, als ob ich das Original laufen lassen würde. Z:\ ist das zugeordnete Laufwerk für den anderen Server (A), den ich auf B.

Ich weiß, dass die Server miteinander kommunizieren können, wie ich Laufwerke von einem Server auf den anderen für den Ort, wo die Website Dateien werden so gespeichert, dass jedem Server ein zugeordnetes Laufwerk für die Website-Dateien der anderen Server zugeordnet ist (Z:\). Ich hatte gedacht, dass ich das als Ziel verwenden könnte. Das gibt nur den gleichen Fehler, aber kein gültiges Laufwerk.

Da ich nicht der einzige Admin bin, der die Website verwenden wird, brauche ich wirklich diese Schaltfläche, um zu arbeiten. Es gibt zwei von uns, die die Dateien aktualisieren können, aber wir haben ein Team, das die Admin-Seite benötigt, um bestimmte Dinge zu aktualisieren und dann die Schaltfläche verwenden muss, um sicherzustellen, dass sie auf beide Server kopiert werden.

EDIT

ich aus der echo off hier kommentiert ist, die Ergebnisse der BAT-Datei ausgeführt wird. Ich habe es so formatiert, dass es nicht nur eine lange Zeichenfolge ist.

>rem echo off 
>SET source="D:\WebContent\engsys.corp.ftr.com" 
>SET source2="\\MAFINFWWWPV02\D$\WebContent\engsys.corp.ftr.com" 
>SET dest1="\\MAFINFWWWPV01\engsys.corp.ftr.com" 
>xcopy "D:\WebContent\engsys.corp.ftr.com" "\\MAFINFWWWPV01\engsys.corp.ftr.com" /E /Y Invalid drive specification 0 File(s) copied 
>rem xcopy "\\MAFINFWWWPV02\D$\WebContent\engsys.corp.ftr.com" "\\MAFINFWWWPV01\engsys.corp.ftr.com" /E /Y 
>rem pause 
>echo #[email protected] #[email protected] 

Benutzername Computername, wenn ohne Verwendung der Webseite von dem Server ausgeführt werden:

#[email protected] 

Antwort

1

Hier ist, was schließlich arbeitete:

Dieses in der PHP ist Datei:

case 'CopyFiles': 
$script = chr(92) . chr(92) . 'MAFINFWWWPV02\D$\WebContent\engsys.corp.ftr.com\BatchFiles\CopyFiles.bat'; 
system('cmd /c ' . $script); echo " <br>"; 
GetCommand(!NULL); 
break; 

Dies ist die .bat-Datei:

echo off 

SET source2="\\MAFINFWWWPV02\engsys.corp.ftr.com" 

START /wait NET USE L: "\\MAFINFWWWPV01\engsys.corp.ftr.com" Password /user:corp\mmm976 

xcopy %source2% L: /E /Y /Q 

NET USE L: /DELETE 

Nachdem die bat-Datei das freigegebene Laufwerk gemappt hatte, konnte ich es verwenden, um die Dateien zu kopieren. Ich weiß nicht wirklich, warum das funktionierte, wenn ich den Standort vorher kartiert hatte und es nicht funktionierte, aber jetzt ist es so.

+0

Ich habe versucht, den UNC-Pfad, Service-Desktop-Zugriff, Dienst als Administrator, nichts funktioniert. Die Verwendung von "net use" zum Erstellen des Laufwerks innerhalb der Batch-Datei funktionierte einwandfrei. Danke – ChrisAdmin

+0

@ChrisAdmin Froh, dass es geholfen hat, das war ein großer Schmerz zu arbeiten, bis ich das kleine bisschen gefunden habe. – Mike

0

Z auf einen UNC-Pfad verweisen.

Sie sollten sich nie auf Laufwerke verlassen, sondern den UNC-Pfad verwenden, es sei denn, Sie müssen cd an den Speicherort, der hier nicht der Fall ist. UNC-Pfad hat eine bessere Chance, von allen Maschinen gesehen zu werden. Abhängig von den Sitzungen wurden Laufwerke möglicherweise nicht bereitgestellt.

Typ net use | find "Z"

Sie werden sehen, wo Z angebracht ist, Beispiel: \\foo\bar

ersetzen Z:\ durch \\foo\bar\ in Ihrem Skript.

In Ihrem Fall (läuft auf MAFINFWWWPV02):

xcopy D:\WebContent\engsys.corp.ftr.com "\\MAFINFWWWPV01\engsys.corp.ftr.com" /E /Y 

(Sie wegen Quelle ungültig Laufwerk waren immer auch)

+0

Ich habe das versucht. Ich habe das 'Z: \' durch die Ergebnisse von 'net use | ersetzt finde "Z" ', das ich auf dem Server ausgeführt habe, auf dem ich es gemappt habe. Ich bekomme immer noch die 'Invalid drive specification 0 Datei (en) kopiert '. Es wurde '\\ ServerName \ ShareName' – Mike

+0

' \\ MAFINFWWWPV01 \ engsys.corp.ftr.com' war das Ergebnis. – Mike

+0

Es kann kein ungültiges Laufwerk ausgeben, wenn kein Laufwerk vorhanden ist. Kannst du 'echo on 'setzen und die Ausgabe deines Skripts posten? –