cle1986
Goto Top

Windows 2000 führt netzwerkbasiertes Startupskript nicht aus

Hallo!

Ich habe folgendes Problem:

Ich habe ein kleines Heimnetzwerk mit 4 Workstations (unter Windows 2000) und einen Server der mit Debian Linux 3.2 und Samba 3.0.20 aufgesetzt ist. Der Server ist ein PDC und die WKS hängen alle in einer Domäne xy.

Da ich nun regelmäßig Updates und Software auf den WKs installieren möchte und nicht bei jeden Rechner immer seperat installieren.
Ich ging dies zuerst über eine cmd Datei (die über Netzpfade die Datein direkt aufruft und installiert [unattened] natürlich) an, dich ich auf den lokalen Rechner in der Gruppenrichtlinie einstellte. Meine Überlegung soweit. Das Skript sollte beim Herunterfahren ausgeführt werden, dann kann man sich den Neustart sparen.
Leider musste ich feststellen, dass dies nicht möglich ist, da da die Netzverbindung schon vorher getrennt wird.
Dann habe ich im Internet gelesen mit einem Startupskript müsste es gehen. Also habe ich das Skript vom Shutdown Ordner auf den lokalen Rechnern in den Startup Ordner und bootete den ersten Rechner neu. Doch das Skript wurde wieder nicht ausgeführt, da die Installation des Updates länger dauert.
Nun möchte ich gerne wissen, was ich in meinem Skript falsch gemacht habe:

Das Startup Skript am lokalen Rechner:

xy.cmd enthält nur \\sbauer01\tools\update.cmd

und ruft somit das unten stehende Skript auf:

update.cmd:

SKRIPT:

if exist \\sbauer01\tools\logs$\Windows2000-KB905749-x86-DEU\%computername% goto done1
echo ok > \\sbauer01\tools\logs$\Windows2000-KB905749-x86-DEU\%computername%
START /WAIT \\sbauer01\tools\tools\updates\Windows2000-KB905749-x86-DEU.EXE /quiet /norestart /log:\\sbauer01\tools\log$\Windows2000-KB905749-x86-DEU.txt

:done1

if exist \\sbauer01\tools\logs$\Windows2000-KB899591-x86-DEU\%computername% goto done2
echo ok > \\sbauer01\tools\logs$\Windows2000-KB899591-x86-DEU\%computername%
START /WAIT \\sbauer01\tools\tools\updates\Windows2000-KB899591-x86-DEU.EXE /quiet /norestart /log:\\sbauer01\tools\log$\Windows2000-KB899591-x86-DEU.txt
:done2

if exist \\sbauer01\tools\logs$\Windows2000-KB902400-x86-DEU\%computername% goto done3
echo ok > \\sbauer01\tools\logs$\Windows2000-KB902400-x86-DEU\%computername%
START /WAIT \\sbauer01\tools\tools\updates\Windows2000-KB902400-x86-DEU.EXE /quiet /norestart /log:\\sbauer01\tools\log$\Windows2000-KB899591-x86-DEU.txt

:done3

if exist \\sbauer01\tools\logs$\dotnet2fx\%computername% goto done4
echo ok > \\sbauer01\tools\logs$\dotnet2fx\%computername%
START /WAIT \\sbauer01\tools\dotnetfx.exe /Q:A /C:"INSTALL.EXE /Q"

:done4

if exist \\sbauer01\tools\logs$\postupdate\%computername% goto done5
echo ok > \\sbauer01\tools\logs$\postupdate\%computername%
\\sbauer01\tools\tools\updates\W2KpostSP4update\W2KpostSP4updater.exe -admin -silent -noreboot

:done5

if exist \\sbauer01\tools\logs$\spam\%computername% goto done6
echo ok > \\sbauer01\tools\logs$\spam\%computername%
\\sbauer01\tools\tools\updates\python-2.5.1.msi /quiet /norestart
\\sbauer01\tools\tools\updates\ActivePython-2.5.1.1-win32-x86.msi /quiet
\\sbauer01\tools\tools\updates\spambayes-1.1a3.exe /silent

:done6
c:\winnt\system32\shutdown.exe /L /R /Y /T:09

SKRIPT ENDE

Damit das Skript nur einmal ausgeführt, wird in einem Ordner eine Datei des PC Namen abgespeichert und bei jeden abruf des Skripts überprüft. Ist der Name vorhanden wird dieses Update nicht mehr installiert und somit übersprungen.

Warum funktioniert das Skript, wenn ich es im Windows normal aufrufen, aber nicht als Startup Skript?
In Samba ist der Ordner Tools auf guest = yes gesetzt, somit sollte jeder zugreifen können. Oder kann es da noch ein anderes Rechte Problem von der Windows/Samba Seite her geben?

Content-ID: 60370

Url: https://administrator.de/contentid/60370

Ausgedruckt am: 23.11.2024 um 01:11 Uhr

36539
36539 01.06.2007 um 19:18:43 Uhr
Goto Top
Hallo,
ich sehe jetzt zwar nicht wo der Fehler ist [1], aber warum verteilst Du die Windows Updates nicht mit dem WSUS?
http://www.gruppenrichtlinien.de/HowTo/WSUS_Server.htm
Wäre das nicht einfacher?

[1]
Du hast das Script in ...\GroupPolicy\Machine\Scripts\Startup und von da startet es nicht automatisch?
Aber wenn Du es dort manuell aufrufst funktioniert es?
So richtig verstanden? Wenn ja, dann:
Start-Ausführen --> gpedit.msc --> Windows Einstellungen --> Scripts --> Doppelklick auf Starten - Was wird dir angezeigt?

gruß
cle1986
cle1986 01.06.2007 um 22:20:34 Uhr
Goto Top
Ich kann mit WSUS nicht verteilen, weil wie ich oben beschrieben haben keinen Windows Server habe, sondern einen Linuxserver mit Samba!
Unter Linux laufen keine Windows Programme.

Ja ich habe das Skript in ...\GroupPolicy\Machine\Scripts\Startup drinnen und beim Starten steht zwar kurz Skripts werden ausgeführt, aber es wurde nichts installiert.

Start-Ausführen --> gpedit.msc --> Windows Einstellungen --> Scripts --> Doppelklick auf Starten

sehe ich jenes Skript das mir das Skripts am Server aufruft, nämlich mein Skript namens startup.cmd.
Dieses Skript ruft dann das am Server liegende Skript auf.
36539
36539 01.06.2007 um 22:39:56 Uhr
Goto Top
Hallo
Nicht-WIN-Server habsch übersehen face-wink
Schreib mal alle "echo ok >" um in "echo ok ^>" ---> vergiss es, du wolltest das sicher ins Log haben

gruß
cle1986
cle1986 01.06.2007 um 22:46:43 Uhr
Goto Top
Ich weiss nicht ob das Problem nicht anderer Herkunft ist.
Habe gerade folgendes auspropiert und zwar hab ich in dem Skript das das Updateskript aufruft folgendes eingetragen:

START /WAIT \\sbauer01\tools\update.cmd

Dann bekomme ich beim Starten folgende Meldung:

Die Datei "\\sbauer01\tools\update.cmd oder eine ihrer Komponenten wurden nicht gefunden. Stellen Sie sicher, dass die Pfad- und Dateiangaben stimmen und ob erforderliche Bibliotheken verfügbar sind.

Irgendwie kann er nicht zugreifen.

Mein Verdacht, der sich im übrigen nicht bestätigte war, dass Windows vielleicht mit versucht mit dem lokalen Admin account auf das update skript zuzugreifen. Daher habe ich den lokalen Administrator so modifiziert, dass er nun meinem root user entspricht.

Funktioniert leider auch nicht.
36539
36539 01.06.2007 um 22:57:48 Uhr
Goto Top
Hallo,
START /WAIT \\sbauer01\tools\update.cmd
naja dann hängt die cmd ja in der Warteschleife.
Wie sieht es mit "call \\sbauer01\tools\update.cmd" aus?

gruß
cle1986
cle1986 01.06.2007 um 23:10:22 Uhr
Goto Top
Nein auch call führt nicht zum gewünschen Ergebnis.

Kann man das Startup Skript sichtbar ablaufen lassen?
So eine Art debugging meine ich. Geht sowas?
36539
36539 01.06.2007, aktualisiert am 18.10.2012 um 18:32:02 Uhr
Goto Top
Hallo,
So eine Art debugging meine ich. Geht sowas?
Mir nicht bekannt
ich behelfe mir immer mit log files > log.txt oder dem Pause-Befehl

Aber warte mal bis die Batchexperten das hier lesen.

Prüf mal ob "if /i exist..." weiterhilft.
/i 
Erzwingt bei Zeichenfolgenvergleichen das Ignorieren der Groß-/Kleinschreibung. Sie können /i bei der Form Zeichenfolge1==Zeichenfolge2 von if verwenden. Diese Vergleiche sind generisch: falls sowohl Zeichenfolge1 als auch Zeichenfolge2 ausschließlich aus numerischen Zeichen bestehen, werden die Zeichenfolgen in Zahlen konvertiert, und es wird ein numerischer Vergleich ausgeführt. 

Enthält %computername% eventuell Leerzeichen? dann dafür sorgen das die Pfade immer in "..." stehen

Ansonsten hat "Biber" hier was zu debugging geschrieben Batch Datei zeigt sich ganz kurz und schließt dann wieder

gruß
cle1986
cle1986 04.06.2007 um 10:02:30 Uhr
Goto Top
/i brachte mich nicht weiter.

Und auch bei dem von "Biber geposteten debugging habe ich auch nichts gefunden, was mir weiter helfen könnte.

Kann mir sonst noch jemand weiter helfen bei meinem Problem?
Biber
Biber 04.06.2007 um 10:29:22 Uhr
Goto Top
Moin cle1986,

ein nahe liegender Verdacht wäre doch, dass schlicht und einfach für den User, mit dem Du den Task ausführen lasst, das Laufwerk "\\sbauer01\tools\logs$\" nicht sichtbar ist.
Wenn alle "if exist \\sbauer01\tools\logs$\..."-Prüfungen ins Leere laufen, hast Du doch mit Deinem Schnipsel genau diesen Effekt.

Also wäre doch das Zweitnaheliegenste, zusätzlich mal ein paar Zeilen für den Not-exist-Fall einzubauen.
 if not exist \\sbauer01\tools\logs$ ( echo \\sbauer01\tools\logs$ jibbet nicht) && pause
-oder-
 if not exist \\sbauer01\tools\logs$ echo %date% %time% Server nicht gefunden>> lokalesLW\Logs\Update.err

Mach mal so etwas in der Art, dann ist es wenigstens verifiziert, dass es ein Rechteproblem ist.

Gruß
Biber
cle1986
cle1986 04.06.2007 um 21:32:16 Uhr
Goto Top
Also die Ausgabe im Logfile lautet:

Mo 04.06.2007 21:24:08,19 Server nicht gefunden

Habe das ausprobiert:

if not exist \\sbauer01\tools\logs$ echo %date% %time% Server nicht gefunden>> lokalesLW\Logs\Update.err
Biber
Biber 04.06.2007 um 21:44:26 Uhr
Goto Top
Na ja, cle1986,

dann habe ich jetzt eine gute und eine gutere Nachricht für Dich:

  • Der Batch wird aufgerufen und funktioniert
  • Du weißt jetzt, dass der Batch-ausführende User keine Lese- (oder Seh-)Rechte auf das Share hat.

Also hast Du, wie immer im Leben, zwei Möglichkeiten:
  • entweder Du lässt den Task von einem User ausführen, der die Rechte hat
  • oder Du gibst dem User, der den Task ausführt (vermutlich "SYSTEM") die Rechte auf den Share.

Grüße
Biber
cle1986
cle1986 04.06.2007 um 22:06:27 Uhr
Goto Top
Da bleibt trotzdem noch etwas offen.

Zu 1) Wie kann ich den Task vom User root ausführen lassen?
oder falls 2 besser sei
Zu 2) Wie kann ich dem "User" System das Recht für das Share geben?
der lokale Administrator hat das Recht.
cle1986
cle1986 06.06.2007 um 10:48:16 Uhr
Goto Top
Das Skript läuft. Updates werden installiert