thomasbroecker
Goto Top

Rückgabe eines CMD Befehls in eine Variable speichern

Moin moin,

Ich versuche grade alle aktiven Sitzungen an einem Terminal Server auszulesen. Den entsprechenden CMD Befehl hab ich inzwischen auch schon gefunden. Allerdings brauch ich dir Rückgabe von dem Befehl in meinem VB Script, weil ich die Ausgabe noch auswerten muss.

Gibt es einen vbs Befehl der das gleiche tut wie der cmd befehl "qwinsta" bzw. gibt es die Möglichkeit die Ausgabe des Befehls in meinen Script zu holen?


Danke schon mal vorab.

Content-Key: 155232

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

Printed on: April 24, 2024 at 22:04 o'clock

Member: BigWim
BigWim Nov 17, 2010 at 09:18:27 (UTC)
Goto Top
Moin moin,

die einfachste Version sieht so aus:

@echo off
for /f "tokens=1,3" %%a in ('qwinsta') do echo %%a %%b  

Liefert Dir z. b. 1. und die 3. Spalte zurück.


Markus
Member: ThomasBroecker
ThomasBroecker Nov 17, 2010 at 10:14:48 (UTC)
Goto Top
Danke für die Antwort!

Ich bin damit allerdings irgendwie überfordert. Ist das vbs?
Ich will das ganze ja nicht in einer batch sondern in einem vbs haben...

Falls das wirklich vbs ist, bitte ich um eine Erklärung von dem was da steht. (wie bekomme ich die Werte in meine Variable , was macht der Parameter /f, warum wofür der Platzhalter vor in? , "tokens=1,3" steht für die ausgewählten spalten oder?)
Member: BigWim
BigWim Nov 17, 2010 at 10:23:52 (UTC)
Goto Top
Oh, sorry, Du hast Recht!!!

Ich war im falschen Film. Tut mir leid. Bei VB muß ich passen!

Aber wenn VB keine solche Funktion bietet, würde ich vorschlagen, die Ausgabe in eine (temporäre) Datei umzulenken und diese Datei mit VBScript lesen und bearbeiten.

Für das Umlenken müßtest Du dann nur ein qwinsta >qwinsta.log anhängen - es sei denn VB liefert noch elegantere Techniken.

Markus
Member: ThomasBroecker
ThomasBroecker Nov 17, 2010 at 11:02:31 (UTC)
Goto Top
Genau auf die Idee bin ich auch schon gekommen
Allerdings würde ich dies nur sehr sehr ungern machen, da ich mein Script als Anmeldescript laufen lassen will.

Ich werde heut noch testen ob ich diesen Teil des Scriptes überhaupt noch brauch, evtl. hat sich dieser Teil schon erledigt.
Ursprünglich hatte ich vor zu überprüfen ob der Benutzer bereits an dem TS angemeldet ist oder ob es der erste anmelde versuch ist. Da ich über dieses Script meine Drucker verbinde und am Anfang des Scriptes erstmal alle Drucker wegwerfe.
Allerdings wird der Benutzer anscheinend nicht zweimal angemeldet wenn er zwei unterschiedliche Anwendungen (Citrix published Application) auf einem Server anmeldet, somit wird das Script so oder so nur einmal ausgeführt.
Member: BigWim
BigWim Nov 17, 2010 at 12:03:39 (UTC)
Goto Top
Wir haben auch Citrix (XenApp) im Einsatz, allerdings von einem Dienstleister konfiguriert. Ich kann nur sagen, dass bei veröffentlichten Anwendungen das volle Programm durchlaufen wird incl. unserer Anmeldescripts. Vielleicht ist da ja "nur" eine Konfigurationssache.

Ursprünglich hatte ich vor zu überprüfen ob der Benutzer bereits an dem TS angemeldet ist oder ob es der erste anmelde versuch ist.
Ich behaupte mal, dass Du das aber einfacher haben kannst. Ich kann's aber nur unter DOS bzw setzen wir für das Anmeldescript Kix32 ein. Hier habe ich die Möglichkeit, mit Run bzw. Shell eine Batch zu starten und einen Errorlevel abzufragen.

@echo off
qwinsta.exe | find /i "<mein Suchtext>" >NUL:  
echo Errorlevel ist %errorlevel%
Echo off schaltet die Anzeige der Aufruf aus
Die Ausgabe von qwinsta wird von Find untersucht.
- /i deaktiviert die Beachtung Groß/Kleinschreibung
<...> mußt Du ersetzen mit dem suchenden String.
Rückgabewert ist
0 = gefunden
1 = nicht gefunden

Du kannst <...> auch durch ein %1 ersetzen und den Suchstring als Parameter mitgeben. Das ist es variabel. Der Aufruf würde dann so lauten:
<MeineBatchdatei>.cmd <mein Suchtext>


Markus
Member: ThomasBroecker
ThomasBroecker Nov 17, 2010 at 13:01:19 (UTC)
Goto Top
Wir haben auch Citrix (XenApp) im Einsatz, allerdings von einem Dienstleister konfiguriert. Ich kann nur sagen, dass bei
veröffentlichten Anwendungen das volle Programm durchlaufen wird incl. unserer Anmeldescripts. Vielleicht ist da ja
"nur" eine Konfigurationssache.

Ja es läuft alles einmal durch, muss es ja auch! Nur wenn du bereits eine Anwendungen offen hast, sagen wir mal Word dann landest du auf server1. Nun möchtest du auch noch excel aufmachen, dann guckt der Citrix Server, der für die Anmeldungen verantwortlich ist (ka wie der heißt, hat jedenfalls nen Namen ;) ), auf welchem Server du bereits eine Anwendung offen hast. Falls dieser Server dann dein Excel auch noch starten kann, öffnet sich auf diesem Server dein Excel. In diesem Fall, du hast also Excel auf dem gleichen Server geöffnet wie dein Word, dürfte keine Windows Anmeldung mehr erfolgen => kein erneutes aufrufen des Anmeldescriptes.

Solltest du noch keine Sitzung an dem Server haben, an dem du dich anmeldest, muss das Script natürlich durchlaufen, sonst hätte der Benutzer ja auch keine Drucker.


Deine Lösung hilft mir immernoch nicht richtig weiter.

1. Das Script würde immer behaupten das der Benutzer bereits angemeldet ist, weil die Sitzung zu dem Zeitpunkt der Ausführung des Scriptes bereits besteht und somit in der Liste auftaucht.
Das kann man wahrscheinlich dann in dem Batch lösen indem man sich ne schleife oder so baut in der man dann zählt
2. gibt mir wshshell.run dann die Werte 0/1 zurück?
Wie gesagt ich brauch die Werte zwingend in meinem vbs.
Member: BigWim
BigWim Nov 17, 2010 at 14:14:09 (UTC)
Goto Top
In diesem Fall, du hast also Excel auf dem gleichen Server geöffnet wie dein Word, dürfte keine Windows Anmeldung mehr erfolgen
=> kein erneutes aufrufen des Anmeldescriptes.
Ja, hört sich glaubwürdig an face-wink Ist mir aber hier nicht gelungen nachzustellen ...

Wie gesagt ich brauch die Werte zwingend in meinem vbs.
Ja, tut mir leid. Kann ich nicht mit dienen.

Ich kann mir nicht vorstellen, dass VB das nicht kann. Du müßtest bei der aufrufenden Funktion mal sehen, was zurückgeliefert wird. In Kix z. B. gibt es dafür eigens Funktionen wie @16034 und @serror.


Aber wenn die Citrix-Sitzung gestartet ist und dann Dein Anmeldescript läuft, ist es dann nicht eh zu spät?


Markus
Member: ThomasBroecker
ThomasBroecker Nov 17, 2010 at 15:40:11 (UTC)
Goto Top
Zitat von @BigWim:
Aber wenn die Citrix-Sitzung gestartet ist und dann Dein Anmeldescript läuft, ist es dann nicht eh zu spät?

Nein das ist nicht zu spät.
Ich trenne die Drucker ja erst in meinem Script und wenn ich vorher eine abfrage starte ob der Benutzer bereits einmal angemeldet ist, springe ich einfach direkt ans ende des Scripts.
Wann sollte ich denn dann das Script starten? Ich kann ja schlecht die ganzen Anwendungen im Citrix umbauen und erst nen Script laufen lassen welcher mir dann sagt ob der Benutzer schon angemeldet ist oder nicht. :P


Ich werde das mit dem ausführen des Anmeldescripts noch einmal testen. Solltest du recht damit haben, dass das Anmeldescript nocheinmal durchläuft, muss ich mir noch was überlegen. Ich kann ja dem Benutzer auch nicht plötzlich die Drucker unterm Hintern weg ziehen -- selbst wenn die kurz später wieder zur Verfügung stehen.
Member: BigWim
BigWim Nov 18, 2010 at 07:30:49 (UTC)
Goto Top
Moin Moin,

ich habe das Gefühl, dass ich mehr Verwirrung stifte als helfe. Ich werde das heute noch einmal probieren, wobei meine Mittel (leider) eingeschränkt sind.

Aber ich bin mir recht sicher, dass wenn wir über veröffentliche Anwendungen reden, dass ich jedesmal eine eigene Citrix-verbindung bekomme, auch wenn ich "zufällig" auf dem selben Terminalserver gelange. Bei einem (zweiten) veröffentlichten Desktop kann ich mir das ja noch verstellen ....

Wenn die Rückgabe des Errorlevel in VB nicht ankommen sollte, hätte ich noch eine Idee. Der find-Befehl "zählt" auch. Anstatt also die gesamte Ausgabe in eine Datei umzuleiten, kannst Du auch die Anzahl der Treffer in eine Datei umleiten. Das wäre zusätzlich der Parameter /C. Diese 5 Byte während der Anmeldeprozedur auszuwerten (mit Datei öffnen, Zeile lesen, Datei schließen) sollte sich nicht bemerkbar machen.


Markus
Member: ThomasBroecker
ThomasBroecker Nov 18, 2010 at 15:12:24 (UTC)
Goto Top
Es geht mir auch nicht um die Datenmenge sondern um die Tatsache, dass ich eine Datei erstellen muss...

Und ja wir sprechen über veröffentlichte Anwendungen. Du landest auch nicht zufällig auf dem gleichen Server sondern mit voller absicht von Citrix. Da du auf zwei verschiedenen Servern jeweils eine gesammte Umgebung brauchst die Speicher usw. frisst... Wenn du allerdings auf dem selben Server landest brauchst du dies nicht.

Citrix kontrolliert ob der Server auf dem du bereits angemeldet bist auch die Anwendung bereitstellen kann, die du aufrufen willst falls der server das kann wirst du auch auf dem selben server landen - Außer der Server ist am Kapazitätslimit.