我正在創建一個應用程序,它能夠告訴我誰在登錄到製造中心的PC上工作。VB.Net:正則表達式
我使用psexec的psloggedon cmd進程爲我提供了有關我和VB.net Windows應用程序的信息,以向我顯示信息。
我首先查詢所有PC的數據庫,我們當前有活動並將數據轉儲到datagridview對象中。 (如下圖所示)
Private Sub Button(sender As System.Object, e As System.EventArgs) Handles btngetPC.Click
'GET AREAS FROM DATABASE
Dim ds As New DataSet()
Dim db As String = "QUERY STRING GOES HERE"
'CONNECT TO DATABASE
Using da As New SqlDataAdapter(db, MySQLConnection)
da.Fill(ds, "MACHINE_NAME")
End Using
With datagridView1
.DataSource = ds.Tables("MACHINE_NAME")
End With
'ADD COLUMN TO DATAGRIDVIEW
datagridView1.Columns.Add("LOGGED_IN", "LOGGED_IN")
MySQLConnection.Close()
End Sub
一旦我有我的DataGridView對象填寫了我的所有活動PC的,然後我就可以使用計算機名來運行psloggedon CMD得到誰在登錄我使用這樣做:
Private Sub execute(sender As Object, e As EventArgs) Handles bntExecuteCmd.Click
'COUNT ENTRIES
Dim RowCount As Integer = datagridView1.RowCount
''EXECUTE CMD
For i = 0 To RowCount - 2
'PERFORM PSLOGGEDON ROUTINE
Dim Proc1 As New Process
Proc1.StartInfo = New ProcessStartInfo("psloggedon")
Proc1.StartInfo.Arguments = "-l \\" & datagridView1.Rows(i).Cells(1).Value & ""
Proc1.StartInfo.RedirectStandardOutput = True
Proc1.StartInfo.UseShellExecute = False
Proc1.StartInfo.CreateNoWindow = True
Proc1.Start()
If Not Proc1.WaitForExit(300) Then
Proc1.Kill()
End If
'INSERT RESULTS INTO LOGGEN_IN COLUMN
Dim msg As String = Proc1.StandardOutput.ReadToEnd
Dim idx As Integer = msg.LastIndexOf("\"c)
Dim user As String = msg.Substring(idx + 1)
Dim final As String = UCase(System.Text.RegularExpressions.Regex.Replace(user, "^ELP.*$", ""))
datagridView1.Rows(i).Cells(2).Value = final
Next
End Sub
最後,這裏是我的問題:
要獲得監守RAW格式是不能接受的,我必須使用正則表達式的員工姓名。
原始格式:
「連接到\ ELPSC171698的註冊...
用戶本地登錄: ECHOSTAR \ Jane.Doe」 申請後
格式:
'INSERT RESULTS INTO LOGGEN_IN COLUMN
Dim msg As String = Proc1.StandardOutput.ReadToEnd
Dim idx As Integer = msg.LastIndexOf("\"c)
Dim user As String = msg.Substring(idx + 1)
Dim final As String = UCase(System.Text.RegularExpressions.Regex.Replace(user, "^ELP.*$", ""))
datagridView1.Rows(i).Cells(2).Value = final
「PAULA.RODRIGUEZ」
看起來不錯,對嗎?然而,當原始格式有一個以上的聯營公司,像這樣:
「連接到\ ELPSC173068的註冊...
用戶本地登錄: ECHOSTAR \ John.Doe ECHOSTAR \ Ben.Doe 「
我寫的代碼會讓我成爲這個列表中的最後一個人。在這種情況下,當我需要BEN.DOE時,我會得到JOHN.DOE。
現在的問題:我怎樣才能改變這種代碼:
'INSERT RESULTS INTO LOGGEN_IN COLUMN
Dim msg As String = Proc1.StandardOutput.ReadToEnd
Dim idx As Integer = msg.LastIndexOf("\"c)
Dim user As String = msg.Substring(idx + 1)
Dim final As String = UCase(System.Text.RegularExpressions.Regex.Replace(user, "^ELP.*$", ""))
datagridView1.Rows(i).Cells(2).Value = final
要得到我的第一人, 「JOHN.DOE」 從這裏開始:
「連接到\ ELPSC173068的註冊.. 。
用戶本地登錄: ECHOSTAR \ John.Doe ECHOSTAR \ Ben.Doe」
我希望我的問題是明確的一個很好建造。謝謝。