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

Rückgabe eines CMD Befehls in eine Variable speichern

Frage Entwicklung VB for Applications

Mitglied: ThomasBroecker

ThomasBroecker (Level 1) - Jetzt verbinden

17.11.2010 um 10:02 Uhr, 8474 Aufrufe, 10 Kommentare

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.
Mitglied: BigWim
17.11.2010 um 10:18 Uhr
Moin moin,

die einfachste Version sieht so aus:

01.
@echo off 
02.
for /f "tokens=1,3" %%a in ('qwinsta') do echo %%a %%b
Liefert Dir z. b. 1. und die 3. Spalte zurück.


Markus
Bitte warten ..
Mitglied: ThomasBroecker
17.11.2010 um 11:14 Uhr
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?)
Bitte warten ..
Mitglied: BigWim
17.11.2010 um 11:23 Uhr
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
Bitte warten ..
Mitglied: ThomasBroecker
17.11.2010 um 12:02 Uhr
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.
Bitte warten ..
Mitglied: BigWim
17.11.2010 um 13:03 Uhr
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.

01.
@echo off 
02.
qwinsta.exe | find /i "<mein Suchtext>" >NUL: 
03.
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
Bitte warten ..
Mitglied: ThomasBroecker
17.11.2010 um 14:01 Uhr
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.
Bitte warten ..
Mitglied: BigWim
17.11.2010 um 15:14 Uhr
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 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
Bitte warten ..
Mitglied: ThomasBroecker
17.11.2010 um 16:40 Uhr
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.
Bitte warten ..
Mitglied: BigWim
18.11.2010 um 08:30 Uhr
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
Bitte warten ..
Mitglied: ThomasBroecker
18.11.2010 um 16:12 Uhr
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.
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
Wert in Registry suchen und in Variable speichern (2)

Frage von J.Troll zum Thema Batch & Shell ...

VB for Applications
gelöst VBA-Makro verschwindet nach Speichern (5)

Frage von lupi1989 zum Thema VB for Applications ...

Batch & Shell
CMD Verschlüsslung ( Batch ) (9)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst Selected Gridview Value in Variable schreiben (4)

Frage von reissaus73 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Erkennung und -Abwehr
Spam mit eigener Domain (12)

Frage von NoobOne zum Thema Erkennung und -Abwehr ...