【发布时间】:2015-03-27 12:50:42
【问题描述】:
我正在创建一个基于 GUI 的脚本,当用户输入用户名时,它会检索一个逗号分隔的日志文件,其中包含登录日期和时间、他们登录的机器等信息。 作为 GUI 的一部分,我想使用 TreeView 向他们展示他们输入的用户名已登录的 MAC 地址列表。 在某些情况下,一年中登录的时间不同,有很多重复项。 我希望能够将唯一实例显示为父节点,然后对于每个重复的实例,将其作为子节点添加到相应的父节点以及他们登录的时间。
我有我认为是解决方案的一部分,添加唯一节点,并且它按我预期的方式工作,但是我很难将重复节点作为子节点添加到相应的父节点。
例如:如果用户在整个日志文件中登录主机名 COMP1 6 次,我想将 COMP1 显示为父节点,如果用户按下 + 符号,他们将看到下面列出的 6 个实例以及日期附加属性。
这是 .CSV 日志文件中的一个示例,属性位于顶行:
Date,EventType,ConnectionType,UserDomain,UserLogonTime,LogonType,HostName,HostAddress,HostStartTime,RemoteStationName,RemoteStationAddress
3/24/2015 12:49:58 PM,Logon,Local,DOMAIN,3/24/2015 12:49:13 PM,CONSOLE,F0A8F0B01660,10.10.10.11,3/24/2015 12:27:15 PM,N/A,N/A
3/26/2015 12:32:56 PM,TS Session Connected,Remote-RDP,DOMAIN,3/24/2015 7:13:19 AM,CONSOLE,VFP3077V,10.10.10.10,3/23/2015 6:56:32 AM,Dingus,10.10.96.72
我从日志文件中选择的属性是主机名和日期。
这是我当前的一些代码:
$array = Import-Csv $filepath\$username.txt | Where-Object {$_.EventType -eq "TS Session Connected" -or $_.EventType -eq "Logon"} | select -ExpandProperty hostname | sort -Unique
$array2 = Import-Csv $filepath\$username.txt | Where-Object {$_.EventType -eq "TS Session Connected" -or $_.EventType -eq "Logon"} | select -ExpandProperty Date | sort -Unique
#Loops through and singles out each host name, and adds it as a treenode
for ($i = 0; $i -lt $array.Count; $i++) {
$node = $treeviewHostnames.Nodes.Add($array[$i]) | Out-Null
}
树视图对象:
$treeviewHostnames = New-Object System.Windows.Forms.TreeView
$treeviewHostnames.size = New-Object drawing.Size @(300,378)
$treeviewHostnames.Location = New-Object drawing.Size @(380,165)
$treeviewHostnames.Scrollable = $true
这会向我的树视图对象添加一个唯一的主机名列表,但我很难将特定的重复子主机名添加到唯一的父主机名。
【问题讨论】:
-
您是否有一个样本数据集可供使用,这样我们就不必重新发明轮子?
-
更新原帖,完全忘记包含日志中的数据,谢谢!
标签: powershell treeview treenode