Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch unter Windows 7 - generelles Problem

Frage Entwicklung Batch & Shell

Mitglied: thecaptain

thecaptain (Level 1) - Jetzt verbinden

10.02.2010 um 15:39 Uhr, 15798 Aufrufe, 10 Kommentare

Hallo,

ich versuche grade eine kleine Batch zu schreiben, die, unter anderem, eine Datei in den allusers-Autostart unter Win7 ablegen soll. Da die Benutzerkontensteuerung den Zugriff einschränkt, soll er prüfen, ob die Batch als Admin ausgeführt wurde (sprich das Kopieren überhaupt klappen kann). Ich habe mir eine Batch gebaut um den Ablauf zu simulieren. Leider verhält sich das Ding wirklich merkwürdig. Ich teste das hier unter Window 7 Professional x64, eigentlich dürfte es daran aber nicht liegen (korrigiert mich bitte, sollte ich falsch liegen).

01.
@echo off 
02.
 
03.
SET autostart=%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Startup 
04.
 
05.
XCOPY /C /F /R /Y TEST.cmd "%autostart%" 
06.
IF %ERRORLEVEL% NEQ 0 (ECHO ACHTUNG - %ERRORLEVEL%)  
07.
IF %ERRORLEVEL% EQU 0 (ECHO Sollte geklappt haben - %ERRORLEVEL%) 
08.
 
09.
ECHO. 
10.
ECHO. 
11.
PAUSE
Ausführen mit normalen Rechten:
Zugriff verweigert
0 Datei(en) kopiert
Sollte geklappt haben - 0
Zugriff verweigert habe ich erwartet, ist also OK. Der Errorlevel sollte aber doch grade ungleich 0 sein wenn es einen Fehler gab, oder???

Ausführen als Administrator:
Datei TEST.cmd nicht gefunden
0 Datei(en) kopiert
ACHTUNG - 4
DAS verstehe ich ja nun gar nicht. Die Datei ist absolut 100%ig vorhanden, Zugriffsrechte sind gegeben, Speicherplatz ist massig da, etc.

Leider muss es eine Batch sein, da das Ding auch auf unseren alten Möhren laufen muss. Daher, und weil ich mich damit nicht auskenne, kommt Powershell nicht in Frage.
Mitglied: Pjordorf
10.02.2010 um 15:46 Uhr
Hallo thecaptain,

01.
rem @echo off 
02.
dir 
03.
pause
Fehler. Mach das "Echo aus" ertsmal aus, dann siesht du auch etwas.

dann wirst du feststellen, das dein Verzeichniss jeweils ein anderes ist.

Ausführen mit normalen Rechten:
> Zugriff verweigert
> 0 Datei(en) kopiert
Richtig so

Ausführen als Administrator:
> Datei TEST.cmd nicht gefunden
Richtig

DAS verstehe ich ja nun gar nicht. Die Datei ist absolut 100%ig vorhanden, Zugriffsrechte sind gegeben, Speicherplatz ist massig
da, etc.
Nur leider an der falschen Stelle, von deiner Batchdate aus betrachtet.

Peter
Bitte warten ..
Mitglied: DerWoWusste
10.02.2010 um 15:56 Uhr
Hi.

Wann soll denn die Batch laufen? In Startskripten stört die UAC nicht. Startest Du sie manuell oder aus einem anderen Programm heraus, muss sie nicht nur als Admin, sondern auch hochgestuft (=elevated) gestartet werden.
Bitte warten ..
Mitglied: thecaptain
10.02.2010 um 16:22 Uhr
Zitat von DerWoWusste:
Wann soll denn die Batch laufen? In Startskripten stört die UAC nicht. Startest Du sie manuell oder aus einem anderen
Programm heraus, muss sie nicht nur als Admin, sondern auch hochgestuft (=elevated) gestartet werden.

Bei einigen speziellen Rechnern wird es manuell ausgelöst, ansonsten wollte ich die Batch später in unser Kixstart-Skript mit einbinden, das läuft aber erst nach der Benutzeranmeldung durch, also dürfte die UAC Probleme machen.

Zitat von Pjordorf:
>
01.
rem @echo off 
02.
> dir 
03.
> pause 
04.
> 
Fehler. Mach das "Echo aus" ertsmal aus, dann siesht du auch etwas.
dann wirst du feststellen, das dein Verzeichniss jeweils ein anderes ist.
> Ausführen als Administrator:
> > Datei TEST.cmd nicht gefunden
Richtig
Ok, Ok, I see. Als Administrator ausgeführt geht das Ding von dem Pfad %SYSTEMROOT%\system32 aus. Das erklärt den Fehler natürlich - GUTER Hinweis. Allerdings verstehe ich nicht ganz, was das "dir" an der Stelle bringen sollte, aber egal. Schon mal ein wichtiger Ansatzpunkt. Gleich mal ausprobieren...

Aber den merkwürdigen "Errorlevel" mit normalen Rechten kann ich mir immer noch nicht erklären.
Bitte warten ..
Mitglied: 60730
10.02.2010 um 16:32 Uhr
Moin,

Allerdings verstehe ich nicht ganz, was das "dir" an der Stelle bringen sollte

naja - bei Ordnern - die nicht 80+ Dateien/Unterordner haben - hätte das was gebracht - um genauer zu sein...
01.
rem @echo off 
02.
dir /p 
03.
pause 
04.
rem usw.
wäre dann der Zaunpfahl, an den Du dich anlehnen kannst.

Aber den merkwürdigen "Errorlevel"...

naja der ist wie immer - würdig um Ihn sich zu merken...

01.
XCOPY /C /F /R /Y TEST.cmd "%autostart%"  
02.
if not exist "%autostart%\TEST.cmd" echo hier stimmt was nicht
... oder so ähnlich passt viel besser.
Bitte warten ..
Mitglied: Pjordorf
10.02.2010 um 16:55 Uhr
hallo thecaptain,

> Aber den merkwürdigen "Errorlevel"...

01.
> XCOPY /C /F /R /Y TEST.cmd "%autostart%"  
02.
> 
Du verwendest den Parameter /C (Ignore errors laut technet). Ohne diesen sollte es dann gehen. Also

01.
XCOPY /F /R /Y TEST.cmd "%autostart%" 
02.
IF %ERRORLEVEL% NEQ 0 (ECHO ACHTUNG - %ERRORLEVEL%) 
03.
IF %ERRORLEVEL% EQU 0 (ECHO Sollte geklappt haben - %ERRORLEVEL%) 
Peter
Bitte warten ..
Mitglied: Biber
10.02.2010 um 18:35 Uhr
@Pjordorf

Zitat von Pjordorf:
Du verwendest den Parameter /C (Ignore errors laut technet).
Ohne diesen sollte es dann gehen. Also

Ja schon, wenn irgendein Delmenhorster Volkshochschulkurs die XCopy.exe implementiert hätte, dann ja.
Für die Redmonder XCopy-Variante und speziell die zurückgegebenen Errorlevel ist keinerlei Logik erkennbar.

Eher eine gewisse Gelassenheit..

Beispiel:
>xcopy d:\temp\Jibbet.Nich e:\   
Datei Jibbet.Nich nicht gefunden. 
0 Datei(en) kopiert 
 
>echo %errorlevel% 
 
>xcopy d:\temp\Jibbet.Nich? e:\ 
Datei Jibbet.Nich? nicht gefunden. 
0 Datei(en) kopiert 
 
>echo %errorlevel% 
 
>xcopy d:\temp\Jibbet.Nich e:\  /C 
Datei Jibbet.Nich nicht gefunden. 
0 Datei(en) kopiert 
 
>echo %errorlevel% 
4
Anmerkung:
- der Errorlevel 4 im Fall "Eine konkret angegebene Quell Datei" wie auch der Errorlevel 0 im zweiten Wildcard-Fall korrespondieren in keinster Weise mit der technet und/oder Windows-Dokumentation.

... Setzen von /C bedeutet wirklich nur /Continue, aber die Fehlercodes werden dennoch gesetzt.
Natürlich auch die, die immer falsch gesetzt werden

Grüße
Biber
Bitte warten ..
Mitglied: Pjordorf
10.02.2010 um 19:55 Uhr
@Biber,

ich kann dir da nicht widersprechen. Ich habe das auch so gesehen. Es geht hier aber noch um den fall, das die zu kopierende Datei im Pfad existiert, aber wegen fehlender Schreibrechte nicht angelegt werden kann. Da ist das Ergebniss bei xcopy dann ohne /C wieder richtig.

Die zu kopierende Datei ist nicht vorhanden, keine Schreibrechte im Zielordner
>XCOPY /C /F /R /Y D:\Temp\Jibbet.nich D:\Testing 
Datei Jibbet.nich nicht gefunden. 
0 Datei(en) kopiert 
>Errorlog = 4 
 
>XCOPY /F /R /Y D:\Temp\Jibbet.nich D:\Testing 
Datei Jibbet.nich nicht gefunden. 
0 Datei(en) kopiert 
>Errorlog = 4
Die zu kopierende Datei ist vorhanden, keine Schreibrechte im Zielordner
>XCOPY /C /F /R /Y D:\Temp\Jibbet.nich D:\Testing 
D:\Temp\Jibbet.Nich -> D:\Testing\Jibbet.Nich 
Zugriff verweigert 
0 Datei(en) kopiert 
>Errorlog = 0
Hier das auszuwertende Ergebniss (keine Schreibrechte)
>XCOPY /F /R /Y D:\Temp\Jibbet.nich D:\Testing 
D:\Temp\Jibbet.Nich -> D:\Testing\Jibbet.Nich 
Zugriff verweigert 
>Errorlog = 4
Zu kopierende Datei ist vorhanden, Schreibrechte im Zielordner vorhanden
>XCOPY /C /F /R /Y D:\Temp\Jibbet.nich D:\Testing 
D:\Temp\Jibbet.Nich -> D:\Testing\Jibbet.Nich 
1 Datei(en) kopiert 
Errorlog = 0 
 
>XCOPY /F /R /Y D:\Temp\Jibbet.nich D:\Testing 
D:\Temp\Jibbet.Nich -> D:\Testing\Jibbet.Nich 
1 Datei(en) kopiert 
Errorlog = 0
Somit wird das fehlen der Schreibrechte bei xcop nur ohne /C im ERRORLEVEL auswertbar übergeben.

Peter
Bitte warten ..
Mitglied: Biber
10.02.2010 um 20:46 Uhr
Moin Pjordorf,

watt sind die tricky, diese RedmonderInnen.... *staun*

Punktuell coden die ja wie die Profis.... da kann ich gar nicht schnell genug hinterbatchen.

Du hast natürlich Recht... in dem Fall "Zieldatei kann nicht geschrieben werden" wirkt der Schalter /C auf das Errorlevel bzw. setzt es auf 0.

Viellecht sollten wir mal die TechNet-Doku ein bisschen ergänzen.

Grüße
Biber
Bitte warten ..
Mitglied: thecaptain
11.02.2010 um 09:02 Uhr
Hallo nochmal,

vielen Dank für die Hinweise. Ich habe die Batch jetzt ein wenig umgeschrieben, um mich nicht mehr auf diese *tollen* Errorlevel verlassen zu müssen.

Ist zwar nicht hübsch, aber funktioniert jetzt wenigstens:
01.
::@echo off 
02.
SET autostart=%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Startup 
03.
SET quelle=D:\Softwaretests\Batch-Installer\2010-02-10 
04.
 
05.
XCOPY /C /F /R /Y "%quelle%"\TEST.cmd "%autostart%" 
06.
IF EXIST "%autostart%"\TEST.cmd (ECHO Hat geklappt) 
07.
IF NOT EXIST "%autostart%"\TEST.cmd (ECHO ACHTUNG - Kein Admin!) 
08.
 
09.
ECHO. 
10.
ECHO. 
11.
PAUSE
Man glaubt gar nicht, wie viel Zeit man mit einer so banalen Batch verplempern kann...
Bitte warten ..
Mitglied: DerWoWusste
11.02.2010 um 18:56 Uhr
Man glaubt gar nicht, wie viel Zeit man mit einer so banalen Batch verplempern kann...
... und dann stimmt's immer noch nicht ; )
Deine Adminprüfung berücksichtigt die Elevation doch gar nicht. Ein Admin ist erst elevated "richtig" Admin. Dein Test wird also auch bei allen Admins zurückgeben "Achtung - kein Admin", solange die UAC an ist.

Also lass die Prüfung sein und mach ein Startskript daraus - geht immer. Wenn es manuell ausgeführt werden soll, musst man es elevated starten (per Rechtsklick -> "als Administrator ausführen"). Kommt eine Kennwortabfrage, ist man nicht in der Admingruppe - ganz einfach.
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Exchange Server
gelöst Outlook 2010, Exchange 2013, Windows 10, Performance-Problem (13)

Frage von halani01 zum Thema Exchange Server ...

Batch & Shell
gelöst Windows 7: Problem mit CP in Batch (3)

Frage von Maik87 zum Thema Batch & Shell ...

Windows Server
Problem mit Windows Server 2012 R2 (MSConfig - Systemstart Modus) (3)

Frage von FloFMS zum Thema Windows Server ...

LAN, WAN, Wireless
gelöst Windows 10 - Wake on Lan Problem (4)

Frage von Jannis92 zum Thema LAN, WAN, Wireless ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
Suche passender Treiber (12)

Frage von stolli zum Thema Windows Server ...