WinFuture-Forum.de: Task auslesen und in variable schreiben - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 2 Seiten +
  • 1
  • 2

Task auslesen und in variable schreiben


#1 Mitglied ist offline   stefan4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 41
  • Beigetreten: 22. April 20
  • Reputation: 0

geschrieben 09. April 2021 - 20:30

Hallo allerseits,

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
0

Anzeige



#2 Mitglied ist offline   Stef4n 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.216
  • Beigetreten: 20. August 18
  • Reputation: 251
  • Geschlecht:Männlich
  • Wohnort:RLP ~Mainz
  • Interessen:pc

geschrieben 11. April 2021 - 21:31

Hallo,

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.
... aber bitte vorher ein Backup machen! ;-)
0

#3 Mitglied ist offline   stefan4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 41
  • Beigetreten: 22. April 20
  • Reputation: 0

geschrieben 12. April 2021 - 13:08

ok, dann sage ich erst eimal schon danke, waere natürlich cool wenn nur der eigentliche Wert rauskommen würde, ohne die Tags, den Rest bekomme ich dann schon hin, denk ich

lg

stefan

Dieser Beitrag wurde von stefan4711 bearbeitet: 12. April 2021 - 13:10

0

#4 Mitglied ist offline   stefan4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 41
  • Beigetreten: 22. April 20
  • Reputation: 0

geschrieben 12. April 2021 - 19:20

Also ich habs jetzt mal so probiert, aber kommt leider nur müll raus, die tags können ja von mir aus drin bleiben, will ja nur entsprechend vergleichen, aber er soll es in eine Variable schreiben, ist dass denn wirklich nicht möglich? Vielleicht sieht einer den Fehler


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
0

#5 Mitglied ist offline   Stef4n 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.216
  • Beigetreten: 20. August 18
  • Reputation: 251
  • Geschlecht:Männlich
  • Wohnort:RLP ~Mainz
  • Interessen:pc

geschrieben 12. April 2021 - 20:07

Mal anders gefragt, was möchtest du denn im allgemeinen machen?
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.
... aber bitte vorher ein Backup machen! ;-)
0

#6 Mitglied ist offline   stefan4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 41
  • Beigetreten: 22. April 20
  • Reputation: 0

geschrieben 12. April 2021 - 22:41

Na ja, was will man machen, wenn man einen Wert in eine Variable schreiben will, ich in meinem Fall will diesen dann hinterher entsprechend vergleichen mit If not, EQU etc. um bei einer erfülleten bedingung etwas zu machen. Ich hatte schon Angst, dass mir hier jemand mit Powershell kommt.

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

0

#7 Mitglied ist offline   stefan4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 41
  • Beigetreten: 22. April 20
  • Reputation: 0

geschrieben 15. April 2021 - 11:46

Schade hätt mir nicht vorstellen können, dass dass so eine Megaaufgabenstellung ist. Scheint sich wohl gar keiner mehr mit der archaischen Batch zu beschäftigen. Ich wäre natürlich auch für eine PowerShell Lösung offen, aber Sie müsste mir halt die UserId liefern, wenn möglich ans Batch zurückgeben, aber das siet PS offenbar auch keine Lösung vor.


lg

stefan
0

#8 Mitglied ist offline   Stef4n 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.216
  • Beigetreten: 20. August 18
  • Reputation: 251
  • Geschlecht:Männlich
  • Wohnort:RLP ~Mainz
  • Interessen:pc

geschrieben 15. April 2021 - 20:18

Ich versuche es mal durch die Blume zu sagen: Versuch in einem Kindergarten einen Spezialisten für Herzchirurgie zu finden und du wirst vielleicht nicht die Antwort bekommen, die du dir erhoffst :-)

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

... aber bitte vorher ein Backup machen! ;-)
0

#9 Mitglied ist offline   stefan4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 41
  • Beigetreten: 22. April 20
  • Reputation: 0

geschrieben 16. April 2021 - 16:04

Na ich würd das Forum hier nicht als Kindergarten bezeichnen, ich probier das mal aus


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
0

#10 Mitglied ist offline   stefan4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 41
  • Beigetreten: 22. April 20
  • Reputation: 0

geschrieben 16. April 2021 - 16:59

Na jetzt brat mir einer nen Storch,

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

0

#11 Mitglied ist offline   stefan4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 41
  • Beigetreten: 22. April 20
  • Reputation: 0

geschrieben 16. April 2021 - 17:09

Na jetzt brat mir einer nen Storch,

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?
0

#12 Mitglied ist offline   Stef4n 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.216
  • Beigetreten: 20. August 18
  • Reputation: 251
  • Geschlecht:Männlich
  • Wohnort:RLP ~Mainz
  • Interessen:pc

geschrieben 16. April 2021 - 20:59

Ja so kommt man von einem Problem ins Nächste... :-)
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

... aber bitte vorher ein Backup machen! ;-)
0

#13 Mitglied ist offline   stefan4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 41
  • Beigetreten: 22. April 20
  • Reputation: 0

geschrieben 17. April 2021 - 11:58

hey cool, das hat geklappt, die Ausagbe ist jetzt in UTF-8, recht herzlichen Dank noch mal

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
0

#14 Mitglied ist offline   stefan4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 41
  • Beigetreten: 22. April 20
  • Reputation: 0

geschrieben 17. April 2021 - 16:40

Also das kann ich im Batch so leider nicht verwenden, ich habs auf vershciedene Weise veruscht herauszufilern, um an die Variable zu kommen, aber die bleibt anscheinend immer leer, angeblich ECHO OFF.

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
0

#15 Mitglied ist offline   Stef4n 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.216
  • Beigetreten: 20. August 18
  • Reputation: 251
  • Geschlecht:Männlich
  • Wohnort:RLP ~Mainz
  • Interessen:pc

geschrieben 17. April 2021 - 18:19

okay, andere Idee:

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.
... aber bitte vorher ein Backup machen! ;-)
0

Thema verteilen:


  • 2 Seiten +
  • 1
  • 2

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0