pixelschubser
Goto Top

Einer Batchfile Rechte geben

Guten Tag,

eigentlich ist mein Problem simple, dennoch finde ich keine Lösung. Ich habe in Outlook 2007 eine Regel erstellt. Diese bewirkt, dass bei einem bestimmten Ereignis ein batch-script ausgeführt werden soll.

In dieser Batchfile soll unter anderem eine *.txt datei verändert werden. Dies funktioniert aber nur, wenn ich die Batch-Datei manuell auslöse. Wenn Sie über die Outlook-Regel ausgelöst wird, verändert er die txt-Datei nicht.
Für mich eine ganze klare Sache. Die Batch-Datei verfügt nicht über ausreichend Rechte um die txt-Datei zu bearbeiten.

Ich suche nach einer Befehlzeile, die die Batch-Datei die nötigen Rechte gibt um diese Datei zu bearbeiten. Wenn es geht ohne das Passwort in Klartext in das Script zu schreiben.

Kann mir jemand weiterhelfen?

Schöne Grüße
Samuel

Content-Key: 128100

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

Ausgedruckt am: 28.03.2024 um 13:03 Uhr

Mitglied: Larz
Larz 28.10.2009 um 11:15:46 Uhr
Goto Top
Hallo Samuel,

Du könntest ja einen geplanten Task einrichten, der dann von der Outlook-Regel aufgerufen wird. Dort kann man ja Benutzer und Passwort verdeckt hinterlegen.
In einer Batch geht das meines Wissens nicht.

Gruß
Larz
Mitglied: Snowman25
Snowman25 28.10.2009 um 11:17:25 Uhr
Goto Top
wenn du dein script nicht direkt über Office aufrufst, sondern von einem vorangesetzten runas-script, dann sollte es ja funktionieren...

Ich habe hier im Forum schon batchscripte mit ein wenig vb drinnen, damit das passwort abgefragt, aber nicht angezeigt wird.
*such*
Mitglied: Pixelschubser
Pixelschubser 28.10.2009 um 11:23:45 Uhr
Goto Top
Gute Idee, allerdings kann man keine Tasks in den Regeln ausführen lassen...
Mitglied: Snowman25
Snowman25 28.10.2009 um 11:27:48 Uhr
Goto Top
Ich kann besagtes script momentan leider nicht finden. Allerdings könntest du das Passwort ja Base64-codiert in einem textfile speichern und dieses dann von einem vb-script decoden lassen. Das decodierte PW wird dann an die batch für den runas-befehl gesendet...

ömm moment mal:
RunAs hat doch sowieso eine verdeckte Passworteingabe, solange es dir nicht zuviel Mühe ist, das Passwort jedesmal selbst einzutippen reicht das doch
Mitglied: Pixelschubser
Pixelschubser 28.10.2009 um 11:29:14 Uhr
Goto Top
Ohhhaa. Ich glaub etwas zu ansprochsvoll für meine bescheidenen Kenntnisse. Mit VB hatte ich noch nie was gemacht...
Mitglied: 60730
60730 28.10.2009 um 11:40:20 Uhr
Goto Top
Servus,

mal ganz laaangsam..

Per Outlook ein batch starten, damit dass in einer textdatei was ändert?
Ok soweit - so "krumm"

Aber nun noch eine andere Batch starten, die die Batch startet?
  • krümmer geht ümmer ? face-wink

Vermutung ist doch eher - ohne die Batch zu kennen - die läuft gar nicht.

mal ein
echo %date%time >%temp%\logfile.ini
am anfang der batch schreiben und dann outlook zwingen die Batch auszuführen - sollte einem zeigen ob die überhaupt läuft.

Aber wie geschrieben mit vba ein cmd starten - wo doch vba einiges kann?

Gruß
Mitglied: Pixelschubser
Pixelschubser 28.10.2009 um 11:45:02 Uhr
Goto Top
Doch die Batch läuft. In der Batch werden auch noch andere Befehlszeilen ausgeführt.

for /F %%i in (status.txt) do set x=%%i
set /a y=(%x%-1)
echo %y% > status.txt

if %y%==1 GOTO off
if not %y%==1 GOTO end

:off
echo %y%
"C:\Power Manager\pm2.exe" -off -Device2 -Socket1

:end
Mitglied: Snowman25
Snowman25 28.10.2009 um 11:46:58 Uhr
Goto Top
nicht mit vbs ein batch starten, sondern ein batch starten, das ein vbs ausführt, welches ein passwort decodiert und wieder zurückgibt, um es in einem RunAs-befehl zu verwenden, damit die eigentliche Batch als Admin läuft (umständlich, aber es funktioniert)
Mitglied: Pixelschubser
Pixelschubser 28.10.2009 um 11:49:22 Uhr
Goto Top
Das würde dann wie ausschauen?
Mitglied: Larz
Larz 28.10.2009 um 11:54:52 Uhr
Goto Top
Hi,

Du kannst doch einen Befehl ausführen lassen, oder? Sonst könntest Du die Batch nicht starten.

Nimm als Befehl
schtasks /run /tn "Name des Tasks in Anführungszeichen"  

So sollte es gehen. Falls tatsächlich nur eine Datei durch die Regel aufgerufen werden kann, dann müsste man wirklich eine "Hilfs-Batch" schreiben, die o.g. Befehl enthält. Ist aber wahrscheinlich schon so wie Timo unten schreibt, etwas "krümmer"...

Gruß
Larz

P.S.: Runas-Scripts - da muss man doch auch das Passwort im Klartext hinterlegen oder auf die Eingabe warten...
Mitglied: Pixelschubser
Pixelschubser 28.10.2009 um 12:19:36 Uhr
Goto Top
Scheint nicht zu funktionieren. Wenn man einen Task anlegt, muss man vorher festlegen wann dieser ausgeführt werden soll.
Mitglied: 60730
60730 28.10.2009 um 12:29:09 Uhr
Goto Top
ich weiß - ich bin heute im Montagsmodus...

...Aber - wenn denn die batch läuft - warum sollte die dann weitere rechte bekommen?
for /F %%i in (status.txt) do set x=%%i
set /a y=(%x%-1)
echo %y% > status.txt

if %y%==1 GOTO off
if not %y%==1 GOTO end

:off
echo %y%
"C:\Power Manager\pm2.exe" -off -Device2 -Socket1  

:end

entweder mal cmd dir status.txt /s laufen lassen oder aus
echo %y% > status.txt
echo %y% > laufwerk\pfad\status.txt
machen - wobei mir der Montagsmodus sagt - für jede Zeile in Status Text via > Status ändern?

Gruß
Mitglied: Pixelschubser
Pixelschubser 28.10.2009 um 13:24:57 Uhr
Goto Top
Scheinbar ist es doch kein Rechteproblem.

Ich habe eine "PAUSE" reingebaut...

"Die Datei 'status.txt' kann nicht gefunden werden"

obwohl er genau auf den Ordner verweist...

Konsole
Mitglied: Snowman25
Snowman25 28.10.2009 um 13:28:57 Uhr
Goto Top
sagst du jetzt, wo ich fertig bin? -.-'
http://pastebin.com/f2a199d30 <-- das VBScript
http://pastebin.com/f3ebb7c70 <-- das .BAT-File
Mitglied: 60730
60730 28.10.2009 um 13:34:16 Uhr
Goto Top
Zitat von @Pixelschubser:
Scheinbar ist es doch kein Rechteproblem.
jaja - die ollen Säcke hams doch noch drauf...
Ich habe eine "PAUSE" reingebaut...
fürs testen immer gut..(genauso - wie :echo off)
"Die Datei 'status.txt' kann nicht gefunden werden"
aha
obwohl er genau auf den Ordner verweist...
nee kann nicht - sonst würde ja:
Die Datei "c:\pfad\status.txt" kann nicht gefunden werden.
als Fehlermeldung kommen...
01. for /F %%i in (laufwerk:\pfadd\status.txt) do set x=%%i

Gruß
Mitglied: Pixelschubser
Pixelschubser 28.10.2009 um 13:40:01 Uhr
Goto Top
Hier mal einen kleinen Einblick...

Konsole
Mitglied: Pixelschubser
Pixelschubser 28.10.2009 um 13:44:07 Uhr
Goto Top
Is das nicht a weng arg? Mein Script ist 10 Zeilen groß...
Mitglied: Snowman25
Snowman25 28.10.2009 um 13:45:22 Uhr
Goto Top
Anführungszeichen in der schleife...

Deine schleife wird nicht durchlaufen. X bekommt keinen wert. Set /A meckert rum, weil X keinen wert hat. Y bekommt keinen wert. Nichts wird ausgeführt
Mitglied: Pixelschubser
Pixelschubser 28.10.2009 um 13:50:26 Uhr
Goto Top
Wie kann ich dann den Wert aus der status.txt auslesen?
Mitglied: Snowman25
Snowman25 28.10.2009 um 13:50:28 Uhr
Goto Top
würde man es von anfang an richtig schreiben...
und auch 1 zu 1 kopieren, dann hätt ich mir die arbeit garnet gemacht :P
Mitglied: Pixelschubser
Pixelschubser 28.10.2009 um 14:53:17 Uhr
Goto Top
Wenn ich das Anführungszeichen raus nehme, habe ich das selbe Problem...
Mitglied: Snowman25
Snowman25 28.10.2009 um 15:14:14 Uhr
Goto Top
Die Angabe deiner Textdatei in der Schleife muss in Anführungszeichen stehen. Da ist ein Leerzeichen drin..
Unter welchem verzeichnis läuft die Batch eigentlich, wenn du sie aus Office startest?
Mitglied: Pixelschubser
Pixelschubser 28.10.2009 um 15:17:24 Uhr
Goto Top
Ja, habe ich beides ausprobiert. Funktioniert nicht.

Die Batch liegt im selben Verzeichnis wie die status.txt
Mitglied: Biber
Biber 28.10.2009 um 15:21:21 Uhr
Goto Top
Moin pixelschubser,

du hättest dir und vor allem snowman25 einige Dutzend Minuten unwiderbringlich und für immer verlorener Lebenszeit ersparen können, wenn du
  • den tätsächlich aufgerufenen Batch gepostet hättest
  • wenigstens zum Testen der Batchschnipsel vom CMD-Prompt gearbeitet hättest

Dieser hier funktioniert, sagst du:
For /F %%i in (status.txt) do set x=%%i
set /a y=(%x%-1)
echo %y% > status.txt

if %y%==1 GOTO off
if not %y%==1 GOTO end

:off
echo %y%
"C:\Power Manager\pm2.exe" -off -Device2 -Socket1  

:end
--> dann wird entsprechend dieser hier auch funktionieren:

for /F %%i in ("c:\Power Manager\status.txt") do set x=%%i  
set /a y=(%x%-1)
echo %y% > status.txt

if %y%==1 GOTO off
if not %y%==1 GOTO end

:off
echo %y%
"C:\Power Manager\pm2.exe" -off -Device2 -Socket1  

:end

Dass die Zeichen in der Klammer [ -> also ("c:\Power Manager\status.txt") ] in Anführungszeichen gehören hat snowman25 aber auch vor geraumer Zeit gepostet.

Ich denke, du solltest ihm mal einen Cappuccino ausgeben.

Grüße
Biber
Mitglied: Snowman25
Snowman25 28.10.2009 um 15:24:34 Uhr
Goto Top
ich will nicht wissen wo sie liegt, sonder in welchem verzeichnis sie ausgeführt wird.
Wenn der von dir gepostete screenshot die Ausführung aus Office heraus ist, dann wird die batch im Verzeichnis C:\Dokumente und Einstellung\sysdoc ausgeführt.
wechsle vor allen anderen befehlen in das Verzeichnis C.\Power Manager durch:
cd\
cd "Power Manager"  
Mitglied: Snowman25
Snowman25 28.10.2009 um 15:25:46 Uhr
Goto Top
Ich denke, du solltest ihm mal einen Cappuccino ausgeben.

2 Cappucino wären angebrachter...

Grüße
Biber

Grüße zurück face-wink
Mitglied: Pixelschubser
Pixelschubser 28.10.2009 um 15:27:07 Uhr
Goto Top
Beide Varianten funktionieren, wenn ich Sie manuell ausführe.. (doppelklick auf die cmd)

Allerdings funktionieren beide nicht, wenn ich Sie über Outlook ausführen lasse. Solche Sachen wie mit Anführungszeichen hab ich schon selber vorher ausprobiert. Da ich mir der Sache nicht so sicher war.
Mitglied: Snowman25
Snowman25 28.10.2009 um 15:32:14 Uhr
Goto Top
nochmal zum mitlesen, und ganz langsam geschrieben:
ich will nicht wissen wo sie liegt, sonder in welchem verzeichnis sie ausgeführt wird.
Wenn der von dir gepostete screenshot die Ausführung aus Office heraus ist, dann wird die batch im Verzeichnis C:\Dokumente und Einstellung\sysdoc ausgeführt.
wechsle vor allen anderen befehlen in das Verzeichnis C:\Power Manager durch:

cd\
cd "Power Manager"  
Mitglied: Pixelschubser
Pixelschubser 28.10.2009 um 15:37:39 Uhr
Goto Top
Hab ich getan... Problem unverändert.

Konsole
Mitglied: 60730
60730 28.10.2009 um 15:39:33 Uhr
Goto Top
[OT]

kaum macht man mal was produktives für die "eigene" Firma...und hat den Haken nicht abgeklemmt..

Rächt es sich, das er sich mit einem Fred Batch rechte rumgeschlagen hat

Einer spammt mein Postfach zu...
[/OT]

Bin dann mal drausen (Haken raus genommen)

Gruß

edit einen haken muß ich wohl vergessen haben..

Ähh man kann hier auch bilder ablegen..

@echo off
machen die, die Alpha, Beta und Gamma Tests durch haben
und die, die keine Ahnung haben..
ECHO Off bei unfertigen Batchen raus !
Mitglied: Snowman25
Snowman25 28.10.2009 um 15:44:21 Uhr
Goto Top
und wo ist jetzt der prompt hin? verschwunden?
poste hier die komplette batch und deine liste plus die status.txt (falls zu groß, kürzen)
Danach gibts noch genau eine antwort von mir, dann hab ich keine Bock mehr
Mitglied: 60730
60730 28.10.2009 um 15:51:56 Uhr
Goto Top
c:
cd \"Power Manager"  
for /F %%i in (status.txt) do set x=%%i
set /a y=(%x%-1)
echo %y% > status.txt

if %y%==1 GOTO off
if not %y%==1 GOTO end

:off
echo %y%
"C:\Power Manager\pm2.exe" -off -Device2 -Socket1  
:end

@ Biber

offensichtlich mag die Schleife keine " lee r zeic hen"
N:\>for /f %i in ("n:\l og\myini.log") do echo %i  
N:\>echo n:\l
n:\l
Der inhalt von "n:\l og\myini.log" ist eine zahl - er wirft aber l für "l og" raus.

was einem dann aber auch klar wird - wenn man sich
FOR /F ["Optionen"] %Variable IN ("Zeichenkette") DO Befehl [Parameter]
genauer ansieht.
dem bastla wär das nicht passiert face-wink

Gruß & flitz
@Pixelschubser:Thema erledigt?
Mitglied: Pixelschubser
Pixelschubser 28.10.2009 um 15:52:57 Uhr
Goto Top
Batch:

cd\
cd "Power Manager"

for /F %%i in (status.txt) do set x=%%i
set /a y=(%x%-1)
echo %y% > status.txt

if %y%==1 GOTO off
if not %y%==1 GOTO end

:off
echo %y%
"C:\Power Manager\pm2.exe" -off -Device2 -Socket1

:end

in der status.txt steht nur eine ziffer drin. Um normalfall die 1
Mitglied: Snowman25
Snowman25 28.10.2009 um 16:05:41 Uhr
Goto Top
Last Comment:

grml... so ein radau wegen einer einzigen zahl??
dafür braucht man doch keine schleife face-sad
Mitglied: Pixelschubser
Pixelschubser 28.10.2009 um 16:16:51 Uhr
Goto Top
Zitat von @Snowman25:
Last Comment:

grml... so ein radau wegen einer einzigen zahl??
dafür braucht man doch keine schleife face-sad

Kann man es denn geschickter lösen?
Mitglied: bastla
bastla 28.10.2009 um 17:27:38 Uhr
Goto Top
[OT]
@timobeil
dem bastla wär das nicht passiert face-wink
... der baut nämlich öfter mal richtigen Blödsinn ein ... face-wink

(Aber Du hast schon recht: "usebackq" verwende ich wirklich oft.)
[/OT]

Grüße
bastla
Mitglied: Biber
Biber 28.10.2009 um 17:40:31 Uhr
Goto Top
Moin Pixelschrubber,

Kann man es denn geschickter lösen?

Welches der vielen angesprochenen Teilprobleme?

Ich fange mal mit dem lösbaren an:

a) Eine Text-Datei mit "Leerzeichen im Namen oder Pfad" mit einer FOR /F-Anweisung auslesen und erstes Token der Zeile in Variable setzen
[Für den Test am CMD-Prompt]
 for /F "usebackq" %i in ("c:\Power Manager\status.txt") do ECHO set  "x=%i "  
-- oder-
for /F %i in (' type "c:\Power Manager\status.txt"' ) do ECHO set  "x=%i "  

b) Sonderfall: Inhalt einer Text-Datei mit "Leerzeichen im Namen oder Pfad" und EINER einzigen Zeile in Variable setzen
SET /P x=<"c:\Power Manager\status.txt"  
- oder- 
SET /P "x=<"c:\Power Manager\status.txt""  

Der Fall b) läge auch bei dir vor.... kannst Du nehmen.

ABER: grundsätzliche Probleme bleiben:
  • du prüfst in deiner Batch-Logik weder, ob die status.txt existiert noch ob die Variable %x% nach der FOR-Anweisung gesetzt ist
  • und initialisiert wird %x% auch nicht
  • und bei Egal-welchen-Fehlern rennt das Krams einfach weiter

Mit dem Ergebnis: mal funktionierts, mal halt nicht und wahrscheinlich lag es dann am letzten Patch-Day.

Ein weiterer Grund, warum dieser Thread so viel Administratoren-Zeit verbrannt hat ist die Herangehensweise des Fragens.

Entweder jemand fragt bei Skript-Problemen :
"Ich stehe im Moment hier bei A, möchte nach Ziel B und wollte auf folgenden schmalen Brettern dorthin gehen.
Kennt jemand einen anderen Weg? Vielleicht einen ausgetretenen Pfad oder etwas mit Beleuchtung?"

Oder jemand sagt:
"ich habe da etwas programmiert, das eigentlich funktioniert. Plötzlich tritt folgendes Problem auf: ..."

Da du eher die Oder-Variante gewählt hast, sind die Antworten natürlich auch erstmal auf das "schmale Brett" fixiert gewesen...
.. du hast ja unsere Augen darauf gelenkt.

Hat insgesamt auf beiden Seiten unnötige Irrwege verursacht.

Grüße
Biber
Mitglied: 60730
60730 28.10.2009 um 22:26:37 Uhr
Goto Top
Biber sowas von recht geben tuten tun..

c) Sonderfall
in der status.txt steht nur eine ziffer drin. Um normalfall die 1
find "1" "C:\Power Manager\status.txt" && "C:\Power Manager\pm2.exe" -off -Device2 -Socket1  
exit

da brauchts nicht mal ne Kanibale Varibale Variable...
@Biber - jetzt hätten wir mal einen Ansatz, ob wir bei dem "Problem" das Ende des ABc für die diversen Lösungen erleben?

Gruß

und bitte Fred auch mal als abhackt abhaken tun...
Mitglied: Pixelschubser
Pixelschubser 29.10.2009 um 08:30:01 Uhr
Goto Top
Folgendes Script funktioniert jetzt:

SET /P x=<"c:\Power Manager\status.txt"
SET /a y=%x%-1

echo %y% > "c:\Power Manager\status.txt"

if %y%==1 GOTO off
if not %y%==1 GOTO end

:off
echo %y%
"C:\Power Manager\pm2.exe" -off -Device2 -Socket1

:end

Dann möchte ich mich bei allen bedanken und mich für meine schlechte Fragestellung entschuldigen.

Grüße
Samuel
Mitglied: Snowman25
Snowman25 29.10.2009 um 09:12:23 Uhr
Goto Top
und wo bleibt mein Cappucino? face-big-smile