Ping nur als Administrator möglich?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Alles klar, da hat dir die Aufrufhierarchie einen Streich gespielt.

Bei einem Aufruf eines Programms ohne Endung, wird erstmal im aktuellen Arbeitsverzeichnis nach Programmen mit den in %pathext% definierten Endungen gesucht, anschließend würde das gleiche für jeden in %path% definierten Ordner getan, bis zum ersten Auftreten eines Treffers.

Da Deine Batch ping.bat heißt, ist bereits mit ping.bat ein passendes Programm im Arbeitsverzeichnis vorhanden und wird gestartet.

...und das Verhängnis nimmt seinen Lauf. Wir haben eine selbstaufrufende Batch, welche sich bis zum maximalen Rekursionslimit der Console immerwieder startet. Da in jeder Rekursionsebene soviel Aufrufe wie Einträge in Liste erfolgen wird warscheinlich der Speicher schneller erschöpft als die Rekursion abgebrochen wird... dann erscheint die Fehlermeldung bzgl Cmdabsturtz. 🤮

Wenn du als Admin startest ist das Arbeitsverzeichnis ...System32... und nicht das Verzeichnis der Batch. Damit wird auch richtigerweise ping.exe als erstes ping gewählt. Und die Batch läuft durch.

Das ganze hat schon Generationen von Batchprogern zur Verzweiflung gebracht (bei 8.3-Namen war mögliche Wahl von Namen begrenzter als Heute.)

Theoretisch müsste man um derartigen "Verwechslungen" entgegenzuwirken immer den Pfad und vollen Namen.ext aufrufen.

Macht aber keiner... einfach keine gleichen Namen vergeben....

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
qugart  02.08.2019, 07:19

Nachdem ich jetzt das Script gesehen habe ist genau das die Erklärung.

0

https://www.google.com/search?q=windows+ping+admin&ie=utf-8&oe=utf-8

liefert u. a.

https://stackoverflow.com/questions/12412000/basic-windows-commands-ping-ipconfig-need-admin-rights-looking-for-an-optio

Darin wird u. a. ein fehlerhafter Registry-Eintrag für den Benutzer erwähnt. (Hast du noch ein weiteres Nicht-Admin-Benutzerkonto auf dem Rechner? Geht es damit?)

Schau dir mal bei drn Kontoeinstellungen des Benutzers an, was dort unter "PATH" steht. Da könnten ungültige Zeichen drin sein, auch unsichtbare.

Woher ich das weiß:Recherche
Kreatin 
Fragesteller
 31.07.2019, 13:39

Path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0;

Das kommt bei mir heraus.

Bei den anderen Usern klappt es ebenfalls nicht.

0
PWolff  31.07.2019, 13:49
@Kreatin

funktioniert ping ohne die FOR-Schleife?

funktioniert es mit %%i innerhalb von Anführungszeichen in

ping "%%i"

?

Funktioniert es mit

"%WINDIR%\SYSTEM32\ping.EXE" %%i

?

1
Kreatin 
Fragesteller
 31.07.2019, 13:53
@PWolff

Es funktioniert nicht mal ein ping localhost in einem skript (egal ob .bat oder .cmd)

Starte ich einfach so eine cmd und pinge, funktioniert es.

Auch das Skript, geschrieben in der cmd funktioniert. Selbst mit Variablendeklaration. Er hat nur ein Problem bei der Ausführung von CMD/ Batch-Skripten als User. Führe ich das Skript als Administrator aus (über das Kontextmenü der rechten Maustaste (nicht als angemeldeter Administrator!)) funktioniert es.

0
PWolff  31.07.2019, 14:00
@Kreatin

Wie hast du das Script in die Konsole übertragen?

Kann es sein, dass in der Datei ungültige Zeichen sind?

1
Kreatin 
Fragesteller
 31.07.2019, 14:03
@PWolff

Ich habe es einfach abgetippt. Darin sind keine ungültige Zeichen. Selbst ein Skript mit dem Befehl ping localhost funktioniert nicht. Änder ich in meinem Skript das Ping in ein ECHO, funktioniert die Schleife ohne Probleme.

0
PWolff  31.07.2019, 14:42
@Kreatin

Funktioniert ping im Skript außerhalb der Schleife?

0
Kreatin 
Fragesteller
 31.07.2019, 13:46

Anbei mein ganzes SET (Username ersetzt durch xyz)

C:\Users\xyz>set | more
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\xyz\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=HOSTNAME
ComSpec=C:\WINDOWS\system32\cmd.exe
DriverData=C:\Windows\System32\Drivers\DriverData
FPS_BROWSER_APP_PROFILE_STRING=Internet Explorer
FPS_BROWSER_USER_PROFILE_STRING=Default
HOMEDRIVE=C:
HOMEPATH=\Users\xyz
LOCALAPPDATA=C:\Users\xyz\AppData\Local
LOGONSERVER=\\HOSTNAME
NUMBER_OF_PROCESSORS=4
OS=Windows_NT
Path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0;
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 69 Stepping 1, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=4501
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
ProgramW6432=C:\Program Files
PROMPT=$P$G
PSModulePath=C:\Program Files\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules
PUBLIC=C:\Users\Public
QT_DEVICE_PIXEL_RATIO=auto
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\WINDOWS
TEMP=C:\Users\xyz\AppData\Local\Temp
TMP=C:\Users\xyz\AppData\Local\Temp
USERDOMAIN=HOSTNAME
USERDOMAIN_ROAMINGPROFILE=HOSTNAME
USERNAME=xyz
USERPROFILE=C:\Users\xyz
windir=C:\WINDOWS
0
PWolff  31.07.2019, 13:56
@Kreatin

Könnte an dem Semikolon am Ende von %PATH% liegen - ich hab da keins.

(Ausprobieren wäre etwas aufwendiger - %PATH% ist bei mir länger als 256 Zeichen, weil so viel Software glaubt, sich dort verewigen zu müssen)

1
PWolff  31.07.2019, 13:58
@PWolff

Andererseits habe ich zwei doppelte Semikolons da drin - daran kann es also auch nicht liegen.

1
Kreatin 
Fragesteller
 01.08.2019, 15:06

Das Skript heißt ping.bat.

Benne ich es um -> funktioniert es als User und Admin

Heißt es ping.bat -> funktioniert es nur als Admin

gebe ich anstelle von ping %%i -> C:\Windows\System32\ping.exe %%i an -> geht es.

Klar könnte ich es umbenennen und gut ist, aber ich würde dennoch gerne wissen, warum es als User nicht klappt und als Admin schon...

0
PWolff  01.08.2019, 15:12
@Kreatin

Gib doch statt ping einfach ping.exe an, damit sollte es auch schon funktionieren.

Dass das Script denselben Namen hat wie ein Systemtool ist schon merkwürdig und bestimmt nicht zu empfehlen sowie Ursache des Problems. Was jetzt beim Admin an %PATH% und %PATHEXT% anders ist, wäre vielleicht mal interessant, m. E. aber viel zu viel Aufwand verglichen mit dem Aufwand, Namenskonflikte von vornherein zu vermeiden.

(Ich habe auch ein paar Batch-Dateien mit ping in einem der %PATH%-Ordner, aber die heißen ping_local.bat etc.)

0
Kreatin 
Fragesteller
 01.08.2019, 15:39
@PWolff

Hi,

ja, das Umbenennen der Datei oder das Angeben der Ping.exe wäre nun der einfachste Weg.

Es interessiert mich dennoch wieso das so funktioniert/ nicht funktioniert.

Naja - Problem gelöst. Sozusagen.

0
PWolff  01.08.2019, 16:18
@Kreatin

Jeder Benutzer kann seine eigenen Umgebungsvariablen haben. Möglicherweise hat der Administrator andere Einträge in %PATH% oder %PATHEXT% oder die Batch-Datei wird mit verschiedenen aktuellen Verzeichnissen gestartet.

Die verschiedenen Verzeichnisse scheinen mir die Ursache zu sein - soweit ich mich erinnere, startet cmd.exe für Administratoren in %WINDIR%\system32, wo auch ping.exe liegt.

1

Der Pfad: C:\Temp\ erscheint mir doch recht ungewöhnlich.

Standartmäßig befindet sich der Temp-Ordner in "C:\Users\DeinProfile\AppData\Local\Temp" und wird über die Variable %temp% angesprochen.

Immerhin ist es möglich das ein nichtadmin-Profil garnicht die Datei Liste.txt lesen darf. Immerhin kann der Ordner C:\Temp nur als Admin erstellt worden sein.

Da Du Deine Batch auch nicht mit "Pause" abgeschlossen hast kannst du natürlich auch nicht sehen warum die Batch abschmiert.

Klappt wunderbar mit oder ohne admin...

@echo off
set "liste=%temp%\liste.txt"


  rem zur  demo Liste im richtigen Temp-Ordner (auf dem  Du auch  jederzeit zugriff hast) erstellen.
echo localhost >"%liste%"
echo google.com >>"%liste%"
echo gutefrage.net >>"%liste%"


  rem ordentlicher Dateizugriff der auch  bei Leerzeichen im Namen nicht  fehlschlägt.
  rem die von dier verwendete Notation ist extrem feheleanfällig.
for /f "usebackq" %%i in ("%liste%") do (
ping %%i
)
pause
  rem  tempordner öffnen
start "" "%temp%"
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
Kreatin 
Fragesteller
 01.08.2019, 10:19

Hi,

hab das Skript mit der Liste an verschiedenen Orten probiert -> leider kein Erfolg.

Habe Adminrechte als angemeldeter User -> kann überall zugreifen.

Habe bei dem Skript das Ping mal durch Echo ersetzt - > funktioniert dann.

1
Erzesel  01.08.2019, 11:19
@Kreatin

Dann schau dir mal C:\Windows\System32\ping.exe an.

Unter Eigenschaften/Sicherheit findest du die Berechtigungen. Möglicherweise hat irgendein Schadprogramm dort die Berechtigung zum Ausführen für Benutzer entzogen. In diesem Fall musst Du diese wieder erteilen.

In diesem Kontext solltest Du gleich überprüfen, ob ping.exe und andere Programme noch die Rechte vom übergeordneten Verzeichnis erben.

Da das von Dir aufgezeigte Verhalten keineswegs normal ist, solltest Du evtl. eine Neuinstallation oder ein Inplaceupgrade ins Auge fassen.

Wenn das System derartige Fehlfunktionen aufweist dürfte löschen der Systempartition und eine Neuinstallation meines Erachtens der sauberste Weg sein.

1
Kreatin 
Fragesteller
 01.08.2019, 15:05
@Erzesel

Hi, bevor ich das Inplaceupgrade mache ist mir folgendes aufgefallen.

Das Skript heißt ping.bat.

Benne ich es um -> funktioniert es als User und Admin
Heißt es ping.bat -> funktioniert es nur als Admin

gebe ich anstelle von ping %%i -> C:\Windows\System32\ping.exe %%i an -> geht es.

Klar könnte ich es umbenennen und gut ist, aber ich würde dennoch gerne wissen, warum es als User nicht klappt und als Admin schon...

0

Also wenn ich cmd starte kann ich jeden befehl eingeben da stürzt mir gar nix ab.

du hast einen lapsus im batch nehme ich an