peacer
Goto Top

VB.NET Output analysieren und nur bestimmten Teil ausgeben

Hallo zusammen,

wie bereits beschrieben brauche ich eine Auswertung für ein StandardOutput.

Und zwar mache ich folgendes:

Ich will wissen wer an einem PC im Netzwerk lokal angemeldet ist. Dank meiner unzureichenden Prgrammierkenntnisse nehme ich dafür die psloggedon.exe (sysInternals) her.

Hier der Code:

Sub button9ItemClick(sender As Object, e As EventArgs)
		Dim psloggedon As New Process
			With psloggedon.StartInfo
				.FileName = "psloggedon.exe"  
				.Arguments = " -x -l \\" & textBox1.Text  
				.CreateNoWindow = True
				.RedirectStandardOutput = True
				.RedirectStandardError = True
				.UseShellExecute = False
			End With
		psloggedon.Start()
		textBox1.Text = psloggedon.StandardOutput.ReadToEnd
	End Sub

Die Ausgabe erscheint dann folgendermaßen:

Connecting to Registry of \\PC2496...
                                                                              
Users logged on locally:
     	DOMAIN\testuser

Jetzt will ich erreichen, das nicht diese gesamte Ausgabe in der textbox1 steht sondern nur "testuser", damit ich das richtig weiterverarbeiten kann.

Ich dachte an so etwas wie, suche "DOMAIN\" und gib den Rest der Zeile aus. Wichtig wäre auch OHNE die zusätzliche leere Line am Ende.


Danke für Hilfe
LG Peacer

Content-ID: 160721

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

Ausgedruckt am: 22.11.2024 um 07:11 Uhr

SlainteMhath
SlainteMhath 14.02.2011 um 12:41:39 Uhr
Goto Top
Moin,

aus dem kopf hingeschrieben und ohne Gewähr face-smile

dim str as string = psloggedon.StandardOutput.ReadToEnd 
dim rc as string =""  
for each L as string in str.split(vbcrlf)
  if L.contains("DOMAIN\") then  
    rc=rc & trim(L).replace("DOMAIN\","") & vbCrLf  
  end if
next
textBox1.Text = rc

lg,
Slainte
bastla
bastla 14.02.2011 um 14:16:07 Uhr
Goto Top
@SlainteMhath
Minimaler Änderungsvorschlag (nur für den Fall des Falles - dass etwa doch vor dem Usernamen auch noch ein Timestamp ausgegeben würde [Edit] die Verwendung von "-x" ist mir leider etwas zu spät aufgefallen, daher ist diese Variante eigentlich schon wieder hinfällig face-sad [/Edit]):
Dim str As String = psloggedon.StandardOutput.ReadToEnd
Dim rc As String =""  
Dim sep As String = "DOMAIN\"  
For Each L As String In str.Split(".")  
    If L.Contains(sep) Then
        rc = rc & Trim(Split(L, sep)(1)) & vbCrLf
    End If
Next
TextBox1.Text = rc
Grüße
bastla
ackerdiesel
ackerdiesel 14.02.2011 um 16:10:12 Uhr
Goto Top
Ohne Gewähr:


Dim User() As String = Split(rc, "\")
TextBox1.Text = User(1)
Peacer
Peacer 14.02.2011 um 17:27:08 Uhr
Goto Top
Also, vielen Dank erstmal für die Vorschläge.

Ich habe für mein Konzept festgestellt das bastlas version am besten funktioniert hat bis auf eines:

Dim str As String = psloggedon.StandardOutput.ReadToEnd
Dim rc As String =""  
Dim sep As String = "DOMAIN\"  
For Each L As String In str.Split(".")  
    If L.Contains(sep) Then
        rc = rc & Trim(Split(L, sep)(1))
    End If
Next
TextBox1.Text = rc

das" & vbcrlf" bringt mir eine Leerzeile ins Result die ich nicht wollte und deshalb gekickt habe, allerdings bleibt dann NOCH eine Leerzeile übrig. Wie bekomme ich die weg? Sie wird leider auch in einer einzeiligen Textbox1 als undefined Symbol ausgegeben und stört die weiterverarbeitung.

LG Peacer
bastla
bastla 14.02.2011 um 17:34:31 Uhr
Goto Top
Hallo Peacer!

Sorry - hatte zum Testen herumgespielt und Slaintes ursprüngliches "vbCrLf" im "Split()" durch einen "." ersetzt (und beim Posten nicht wieder korrigiert face-sad) - daher bitte als Zeile 4 wieder:
For Each L As String In str.Split(vbCrLf)
Grüße
bastla
Peacer
Peacer 14.02.2011 um 17:39:03 Uhr
Goto Top
Hi bastla,

Genau das war es was ich lesen wollte.
Jetzt ist es perfekt

Vielen Dank und schönen Abend noch an alle Mitwirkenden