ralfkausk
Goto Top

CMD: Unterschiede bei cmd Dateien in der Ausführung

Hallo zusammen

Ich habe gerade ein kleines Verständnisproblem.
Durch ein Powershell Skript habe ich mir etliche .cmd Dateien erstellen lassen, mit folgendem Inhalt:
@echo off
runas /user:dom.de\admin.xxx"C:\Program Files (x86)\xxx\yyy\zzz.exe"  

Wenn ich diese ausführe passiert genau nix.
(Ok, die cmd blitzt kurz auf und verschwindet direkt wieder ohne etwas zu machen)

Wenn ich die Datei von Hand erstelle, und den gleichen Befehl eintrage, dann werde ich nach meinem Passwort gefragt und die Applikation startet.

Wo genau ist der Unterschied zwischen einer manuell und Skript erzeugten cmd Datei?
Was mache ich falsch?

Danke im voraus
Ralf

Content-ID: 369362

Url: https://administrator.de/forum/cmd-unterschiede-bei-cmd-dateien-in-der-ausfuehrung-369362.html

Ausgedruckt am: 23.12.2024 um 05:12 Uhr

emeriks
emeriks 27.03.2018 aktualisiert um 09:09:35 Uhr
Goto Top
Hi,
da die manuell erstellte Datei hier nicht gepostet ist, können wir das nicht sagen.
Aber ich vermute das fehlende Leerzeichen hinter dem "xxx".

E.

Edit:
Du könntest ein "pause" als letzten Befehl anhängen. Dann kannst Du die Meldungen in der CMD lesen.
SlainteMhath
SlainteMhath 27.03.2018 aktualisiert um 09:09:02 Uhr
Goto Top
Moin,

vor dem ersten " fehlt ein Blank.

/EDIT: Mist, zu langsam :/

lg,
Slainte
AndreasHoster
AndreasHoster 27.03.2018 um 09:27:25 Uhr
Goto Top
Oder auch die Batch in einem offenen CMD Fenster ausführen, damit man die Fehlermeldungen sieht.
Dafür würde es auch helfen, wenn man nicht zuerst mit echo off die meisten Informationen ausblenden würde.
Das kann man machen wenn es tut, aber doch nicht in der Entwicklung.
ralfkausk
ralfkausk 27.03.2018 um 10:51:37 Uhr
Goto Top
Vielen Dank für die Lösungsvorschläge, aber, da gab es wohl einen Fehler als ich die Originaldaten unkenntlich gemacht habe.
Die Befehlszeilen sind 100% korrekt.
Hinter dem admin.xxx kommt est ein Leerzeichen, bevor es mit der Pfadangabe weitergeht.

Ich habe geade noch einen kleinen Test hinterhergeschoben, und jetzt bin ich noch verwirrter.
Ich habe die Skript genreierte Datei etwas geändert.
1. Aus @echo off wurde @echo on
2. habe ich pause ans Ende gesetzt

Wenn ich nun diese Datei mit einem Doppelklick starte passiert ... nix
Wie zuvor blitzt die CMD kurz auf und verschwindet direkt wieder ohne etwas zu machen

Wenn ich nun den Inhalt dieser, generierten, Datei in eine händisch angelegt Datei übertrage und diese ausführe, dann passiert genau was passieren soll. Es öffnet sich eine CMD Konsole und fragt nach dem Passwort für das hinterlegt Adminkonto!
emeriks
emeriks 27.03.2018 um 11:03:21 Uhr
Goto Top
Mal am Rande: Warum überhaupt der Umweg über diese CMD? Warum nicht direkt vom PowerShell aus starten?
Apophis
Lösung Apophis 27.03.2018 um 11:04:00 Uhr
Goto Top
Hallo,

mir ist das Beschriebene mal passiert, als das CMD-Script nicht im ANSI- sondern im UTF8-Format vorlag. Wenn man per Notepad eine CMD-Datei erzeugt, ist ANSI default. Welchen Default hat die Powershell?

Gruß
Apophis
emeriks
emeriks 27.03.2018 aktualisiert um 11:04:57 Uhr
Goto Top
Wenn ich nun diese Datei mit einem Doppelklick starte passiert ... nix
Wie zuvor blitzt die CMD kurz auf und verschwindet direkt wieder ohne etwas zu machen
Wie heißt diese CMD?
Was ist, wenn Du erst eine CMD startest und dann dort erst die Batch startest?
NetzwerkDude
Lösung NetzwerkDude 27.03.2018 um 11:13:59 Uhr
Goto Top
Die Frage ist: Wie generiest du die .cmds in Powershell?
Mit dem cmdlet "Out-File" kann man mit dem Parameter -encoding, überraschung, encoding auswählen face-smile
siehe hier:
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...

Das Problem ist das die alte Kommandozeile einen legasthenischen touch hat face-smile und nicht alle encodings versteht - z.B. bist du mit ASCII auf der sicheren seite, während UFT8/32 problematsich ist
ralfkausk
ralfkausk 27.03.2018 um 12:42:23 Uhr
Goto Top
Die Kodierung ist des Rätsels Lösung

Ich habe den Lösungsvorschlag von NetzwerDude aufgegriffen, und die Ausgabe in die Datei auf "Out-File -Encoding ascii" umgestellt.
Jetzt funktioniert es genau wie es soll.

Noch ein Hinweis:
Ein Versuch mit "Out-File -Encoding utf8" funktioniert bedingt.
In der 1. Zeile steht ein "@echo off"
Damit gibt es aber noch Probleme.
Das Skript startet, meckert wegen obskurer Sonderzeichen ('∩╗┐@echo'), läuft aber weiter und würde funktionieren.
Ist aber nicht so schön, weshalb ich dann lieber mit "ascii" kodiere.

Vielen Dank an alle für eure Unterstützung
AndreasHoster
AndreasHoster 27.03.2018 um 14:19:57 Uhr
Goto Top
Das sind keine obskuren Sonderzeichen, sondern das ist UTF8 mit BOM.
BOM = Byte Order Mark
Siehe auch https://de.wikipedia.org/wiki/Byte_Order_Mark

Dient dazu, das das System erkennen kann, ob es Big- oder Little-Endian kodiert ist.

Das die Kommandozeile damit nicht kann, aber Powershell es im Standard benutzt, ist halt typisch MS.