killtec
Goto Top

Cmd Script ignoriert if Abfrage

Hi,
ich habe ein CMD-Script was beim herunterfahren des Rechners etwas installieren soll. Dies wird per GPO realisiert und auch ausgeführt.
Dieses Script soll jedoch nur einmal ausgeführt werden, da das Setup recht groß ist.
Es handelt sich genauer um zwei Setup Dateien (eine 640, die andere 750MB).

Dazu habe ich am ende des Scripts diesen Eintrag stehen:
echo Installiert > c:\temp\dmsinfo.txt

Am Anfang habe ich ein
if exist c:\temp\dmsinfo.txt exit

stehen. Diese Zeile wird komplett ignoriert, obwohl meine Prüfdatei vorhanden ist.

Zwischen der ersten und letzten Zeile sind nur Registry-Werte die gesetzt werden und der Silent Aufruf des Setups.
Dieser Teil funktioniert wie er soll face-smile

Nur die If-Abfrage leider nicht. Die Frage ist, Warum?

Gruß

Content-ID: 6359506496

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

Ausgedruckt am: 23.11.2024 um 10:11 Uhr

chkdsk
chkdsk 14.03.2023 um 10:51:49 Uhr
Goto Top
Möglicherweise liegt ein Syntaxfehler im Skript vor, der dazu führt, dass der "if exist"-Befehl übersprungen wird. Vielleicht ein fehlendes Anführungszeichen oder ein falscher Variablenverweis an einer anderen Stelle des Skripts?

Unzureichenden Berechtigungen für den Zugriff auf das Verzeichnis "c:\temp" sind ausgeschlossen?
killtec
killtec 14.03.2023 um 10:58:18 Uhr
Goto Top
Berechtigungen auf die Datei sind nicht die Ursache. Die Datei wurde ja auch vom Script selbst angelegt...
Ich kann auch ein if exist auf die Datei vom DMS Viewer machen, da geht das Script auch nicht in exit sondern läuft durch.
Es muss irgend etwas dann an dem if statement sein.
erikro
erikro 14.03.2023 um 12:31:42 Uhr
Goto Top
Moin,

ich meine mich dunkel daran zu erinnern, dass man bei batches

exit /b

schreiben muss. Ansonsten: Lerne Powershell. face-wink

hth

Erik
killtec
killtec 14.03.2023 aktualisiert um 15:23:58 Uhr
Goto Top
wenn ich ein /b dran packe passiert auch nichts...

Das Script importiert zu Beginn 2 .reg Dateien
Danach ruft es das erste Setup mit "PFAD\Zur\EXE.exe" /S auf,
anschließend ein Robocopy
Aufruf 2. Setup-File
zum Schluss noch zwei Dateien per robocopy.

Wie gesagt, bis auf den If Bereich läuft alles.
Im Powershell wüsste ich gerade nicht, wie der Aufruf per GPO aussehen soll wen an den Clients überall die Execution-Policy auf restricted steht... Daher cmd.

#edit:
hier mal das CMD Script.
if exist "c:\temp\dmsinfo.txt" exit /b  
cls
echo DMS Installation läuft. Bitte dieses Fenster nicht schliessen.
reg import \\pfad\Zur\setup\DMS\dms_options.reg
reg import \\pfad\Zur\setup\DMS\ocr_options.reg
"\\pfad\Zur\setup\DMS\setup.exe" /S  
robocopy \\pfad\Zur\setup\dms "C:\Pfad\DMS\config" DMSMaintenance.ini  
"\\pfad\Zur\setup\DMS\setup_ocr.exe" /S  
robocopy \\pfad\Zur\setup\dms "C:\Pfad\DMS\ocr\Bin" Settings.xml  
robocopy \\pfad\Zur\setup\dms "C:\Pfad\DMS\ocr\Bin64" Settings.xml  
echo Installiert > "c:\temp\dmsinfo.txt"  
das läuft ohne Probleme bis auf das if-statement...

bei der Powershell wird es schwierig das per GPO ohne signatur auszuführen und ohne die policy anzupassen....
if (-not (Test-Path "c:\temp\dmsinfo.txt")){  
}

Problem bei der PS ist, dass er die reg Werte nicht schreibt....
ThePinky777
ThePinky777 14.03.2023 aktualisiert um 15:43:00 Uhr
Goto Top
Also einfach:

if exist C:\ exit

sollte die Zeile sein,
also in deinem Fall:

if exist "c:\temp\dmsinfo.txt" exit

geht so manuell, wenn er das nicht macht.
Dann liegts an der GPO die er wohl doch nicht so macht wie du dir das vorstellst.

Beachte das du die GPO als Herunterfahren Script laufen lässt.
Und nicht als Abmelden Script.

Weil Abmelden läuft im User Kontext und Herunterfahren im Admin Kontext.
Wenn du was installieren willst im Admin Kontext muss es also dort an der richtigen stelle sein.
Und der Admin Kontext läuft als System Account, bedeutet der kann nicht auf Setupdateien im Netzwerk zugreifen,
weil er ja kein Netzwerk Account ist, ausser die Source im Netzwerk ist erreichbar mit rechten: jeder / lesend.
ggf. kann man auch die Gruppe im AD "Domain Computers" verwenden.
ThePinky777
ThePinky777 14.03.2023 um 15:45:55 Uhr
Goto Top
Powershell per bat starten null Problemo:

@echo off

set lsdp_temp=%~dp0

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -executionpolicy Unrestricted -File "%lsdp_temp%PowerShellScript.ps1"



Bat Datei und ps1 Datei liegen im selben pfad.
killtec
killtec 14.03.2023 um 16:08:33 Uhr
Goto Top
Also das Script wird per GPO schon richtig geöffnet.
das If Statement wird weder beachtet wenn ich es manuell aufrufe, noch per GPO. Das ist im Kern das Problem.
Prinzipiell will ich das Script einmalig beim Herunter fahren ausführen.
6247018886
Lösung 6247018886 14.03.2023 aktualisiert um 16:34:24 Uhr
Goto Top
Ich tippe auf falsches Character Encoding des Batch Skripts evt. versehentlich mit BOM gespeichert.
Also mal als explizit als ANSI oder UTF-8 (ohne BOM) neu abspeichern.

Denn die Syntax der Zeile an sich ist fehlerfrei. Es gibt also ein Format- oder Zugriffs-Problem deiner Batch.

Zitat von @ThePinky777:
Und der Admin Kontext läuft als System Account, bedeutet der kann nicht auf Setupdateien im Netzwerk zugreifen, weil er ja kein Netzwerk Account ist,
Blödsinn natürlich kann SYSTEM auch auf Netzlaufwerke zugreifen wenn die Maschine in den NTFS-ACLs und in der der Freigabe zugelassen wurde!

Cheers Briggs
killtec
killtec 14.03.2023 um 16:57:27 Uhr
Goto Top
Sch... Encodig... :D - In der Tat war meine Batch Datei nicht in ANSI Codiert.
einmal in ANSI konvertiert und schon rennt das Teil...

Danke face-smile