Task auslesen und in variable schreiben
#1
geschrieben 09. April 2021 - 20:30
ich versuche in Batch eine Schleife zu schreiben welche mir von einer besthenden aufgabe die User Id ausliest UND in eine variable schreibt, also quasi dieses
schtasks /query /TN _01_Regwerte_setzen /XML
Aber es soll in eine Variable geschrieben werden und ohne die tags, gibt es da eine Möglichkeit?
Vielen dank i.V.
lg und sW
Stefan
Anzeige
#2
geschrieben 11. April 2021 - 21:31
also mit
schtasks /query /TN _01_Regwerte_setzen /XML | findstr "UserId"
hättest du schon mal deinen Wert den du gerne hättest ohne den ganzen anderen Kram. Aber in Batch bin ich nicht sehr fit, dass ich den Rest deiner Anforderung nicht zusammen bekäme.
#3
geschrieben 12. April 2021 - 13:08
lg
stefan
Dieser Beitrag wurde von stefan4711 bearbeitet: 12. April 2021 - 13:10
#4
geschrieben 12. April 2021 - 19:20
setlocal EnableDelayedExpansion for /f "tokens=1" %%a in ('schtasks /query /TN _01_Regwerte_setzen /XML ^|findstr "UserId"') DO Set "userid=%%a" echo !userid!
lg
stefan
#5
geschrieben 12. April 2021 - 20:07
Ich bin eher ein Fan von Powershell und bekomme immer das grauen sich noch mit batch Syntax auseinanderzusetzen, wenn es doch mittlerweile moderner und einfacher geht.
Deine UserId aus dem schtasks bekomme ich zwar noch nicht raus, aber mit dem Powershell Befehl kann man auch schon einiges auslesen:
Get-ScheduledTask | where {$_.TaskName -like "_01_Regwerte_setzen"} | fl *
Und all diese Werte könnte man auch einzeln ansprechen und weiter verarbeiten.
#6
geschrieben 12. April 2021 - 22:41
Vorweg, ja ich weiss Powershell ist viel viel viel mächtiger als Batch, dass weiss ich, aber die beste Waffe nützt einem nix wenn man sie nicht beherscht, und ich tue das nicht mal ansatzweise. Ich bin froh mit Batch einigermaßen zurecht zu kommen. Desweiteren habe ich ein meherere 100 Zeilen großes Script, ich finde es nicht so toll, hier zig verschiedne Scriptelemente zu intrudieren (klar geht auch das), und leider bin ich auch ein bisl in Zeitnot, also ist auf die schnelle PS zu lernen, was sicher sinnvoll ist, momentan keine Option. Die Realität zeigt auch dass auf manchen Systemen evtl PS deaktiviert ist, und dann läuft dass eh nicht.
Ich kann mir nicht vorstellen dass dass in einer Batchzeile so ein großes Problem sein soll? Dein PS Einzeiler habe ich probiert, aber es enthält leider nicht die gewünschte Information. Ich suche die User Id, also die ID des Users unter welchem der Task läuft
lg
Stefan
Dieser Beitrag wurde von stefan4711 bearbeitet: 12. April 2021 - 22:48
#7
geschrieben 15. April 2021 - 11:46
lg
stefan
#8
geschrieben 15. April 2021 - 20:18
Mein Ergebnis mit Powershell:
$UId = schtasks /query /TN _01_Regwerte_setzen /XML | findstr "UserId"
$UId = $UId.trim()
$UId = $UId.trimstart("<UserId>")
$UId = $UId.trimend("</UserId>")
$uid > c:\userId.txt
Trim löscht Leerzeichen, Trimstart und Trimend löscht Zeichen die du nicht möchtest und es bleibt die UserId übrig. Die wird in die Textdatei in der letzten Codezeile geschrieben und von dort könntest du sie dann wieder auslesen und weiter verarbeiten. Mag schon sein, dass es auch mit Batch Kommandos geht, aber wie ich weiter oben schrieb, keine Lust mich damit auseinanderzusetzen.
Dieser Beitrag wurde von Stef4n bearbeitet: 15. April 2021 - 20:20
#9
geschrieben 16. April 2021 - 16:04
dankeschön
lg
Stefan
ok cool,
immerhin mal ne Lösung die funktioniert, recht schönen Dank, sonst hör ich ja immer nur nimm Powershell und letztlich kommt keine Lösung, und was eingangs gesagt wurde, das Batch nun so kryptisch sei, kann ich so nicht ganz nachvollziehen, ist wohl alles eher ne Befassungssache
#10
geschrieben 16. April 2021 - 16:59
jetzt wollt ich das in meiner batch integrieren, auch wenn ich ansonsten kein Freak von Fragmentlösungen bin, aber leider momentan keine Zeit habe mir ein 1000 Seiten PS Buch reinzuziehen und ich bekomme den Wert nicht aus der Datei ausgelesen, was sonst immer funktioniert. in der Datei steht die entsprechende ID, allet fein soweit. In der Variable steht aber ■S , warum auch immer.
POWERSHELL.EXE -NoProfile -ExecutionPolicy Bypass -File "E:\CheckUseridTask.ps1" set /p ts=<c:\userid.txt echo %ts% pause IF %ts%==S-1-5-18 ECHO .... ........
Vielleicht sieht ja da noch jemand den Fehler, mit Ausnahme das es kein PS ist
lg
Stefan
Dieser Beitrag wurde von stefan4711 bearbeitet: 16. April 2021 - 17:00
#11
geschrieben 16. April 2021 - 17:09
jetzt wollt ich das in meiner batch integrieren, auch wenn ich ansonsten kein Freak von Fragmentlösungen bin, aber leider momentan keine Zeit habe mir ein 1000 Seiten PS Buch reinzuziehen und ich bekomme den Wert nicht aus der Datei ausgelesen, was sonst immer funktioniert. in der Datei steht die entsprechende ID, allet fein soweit. In der Variable steht aber ■S , warum auch immer.
POWERSHELL.EXE -NoProfile -ExecutionPolicy Bypass -File "E:\CheckUseridTask.ps1" set /p ts=<c:\userid.txt echo %ts% pause IF "ts"==S-1-5-18 ECHO .... ........
Vielleicht sieht ja da noch jemand den Fehler, mit Ausnahme das es kein PS ist
lg
Stefan
Der Fehler is, das PS die Datei falsch kodiert, und zwar als UCS2 Big Endian, kann man das auch anders gestalten?
#12
geschrieben 16. April 2021 - 20:59
Ich habe die Ausgabe in die Text Datei in meinem Code mal umgebaut.
$UId = schtasks /query /TN _01_Regwerte_setzen /XML | findstr "UserId"
$UId = $UId.trim()
$UId = $UId.trimstart("<UserId>")
$UId = $UId.trimend("</UserId>")
$uid | Out-File c:\userId.txt -Encoding utf8
Als was will Batch denn die Zeichenkodierung? In dem Thema bin ich jetzt nicht so wirklich drin. UTF8 ist jetzt nur ein Versuch gewesen um im Notepad++ dann zu sehen ob die Kodierung eine andere ist wie mit Default Einstellung.
Du kannst in PS die Ausgabe in eine Datei auch abwandeln, hier findest du auch eine Beschreibung welche Werte du für den -Encoding Parameter setzen kannst. Da wird sich sicherlich was finden was Batch kann.
Dieser Beitrag wurde von Stef4n bearbeitet: 16. April 2021 - 21:00
#13
geschrieben 17. April 2021 - 11:58
lg und schönes we
stefan
Jetzt war ich zu voreilig, die im Batch ausgelesene Variable sieht jetzt so aus: ´╗┐S-1-5-18 , kann man auch UTF-8 ohne BOM realisieren, denke dass will er haben
#14
geschrieben 17. April 2021 - 16:40
Ich habe es so probiert
for /F "tokens=2 delims=´╗┐" %%i in ("%ts%") do ( set string=%%i )
ich habe es so probiert:
set string=%string:╗┐=%
echo %string%
Kommt nur Müll bei raus, schade
#15
geschrieben 17. April 2021 - 18:19
Kannst du denn in Batch den Rückgabewert von schtasks /query /TN _01_Regwerte_setzen /XML | findstr "UserId" in eine Variable schreiben?
Aus einem alten Batch Backup Skript habe ich einen Syntax, der mir ein Datum setzt.
SET DATUM=%DATE:~-4%-%DATE:~-7,2%-%DATE:~-10,2%_%TIME:~-11,2%-%TIME:~-8,2%-%TIME:~-5,2%
Wenn du die Ausgabe des schtasks in einer Variable hättest, könntest du mit dem Code die entsprechenden Zeichen der UserId rausfiltern, so denke ich.
- ← Problem mit Wordpress Theme
- Skript/Web-Programmierung
- PHP Script, welches die PHP in einem Verzeichnis aufruft →