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-Key: 160721

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

Printed on: April 18, 2024 at 07:04 o'clock

Member: SlainteMhath
SlainteMhath Feb 14, 2011 at 11:41:39 (UTC)
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
Member: bastla
bastla Feb 14, 2011 at 13:16:07 (UTC)
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
Member: ackerdiesel
ackerdiesel Feb 14, 2011 at 15:10:12 (UTC)
Goto Top
Ohne Gewähr:


Dim User() As String = Split(rc, "\")
TextBox1.Text = User(1)
Member: Peacer
Peacer Feb 14, 2011 at 16:27:08 (UTC)
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
Member: bastla
bastla Feb 14, 2011 at 16:34:31 (UTC)
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
Member: Peacer
Peacer Feb 14, 2011 at 16:39:03 (UTC)
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