我首先要解释一下我想要实现的目标。
对于他们想要监控PC试点组的项目。他们想要以下信息:
所以我继续创建了一个登录和注销脚本。这些脚本的输出每月都是一个txt文件。
例如:文件01-2017.txt
包含:
25-01-2017,09:29,lky9,WS257737,Logon
25-01-2017,10:37,lky9,WS257737,Logoff
25-01-2017,10:01,1f57,WS157954,Logon
25-01-2017,10:29,7df6,WS248751,Logon
25-01-2017,10:34,7df6,WS248751,Logoff
25-01-2017,10:48,1f57,WS157954,Logoff
现在我(不成功)尝试使用Get-Content
在数组中获取所有这些内容。因为当我能做到这一点时,我可以进一步尝试。 PowerShell技能仍然很差,但我可以管理数组没关系。所以问题是;
任何人都可以向我解释我是如何在阵列中得到的吗?
答案 0 :(得分:0)
您需要的是使用Import-CSV
cmdlet导入CSV,因为这会将所有记录作为对象数组提供:
$logList = Import-Csv -Path "Path_to_01-2017.txt" -Header @('Date', 'Time', 'User', 'PC', 'Type')
<强>输出:强>
Date : 25-01-2017
Time : 09:29
User : lky9
PC : WS257737
Type : Logon
Date : 25-01-2017
Time : 10:37
User : lky9
PC : WS257737
Type : Logoff
Date : 25-01-2017
Time : 10:01
User : 1f57
PC : WS157954
Type : Logon
Date : 25-01-2017
Time : 10:29
User : 7df6
PC : WS248751
Type : Logon
Date : 25-01-2017
Time : 10:34
User : 7df6
PC : WS248751
Type : Logoff
Date : 25-01-2017
Time : 10:48
User : 1f57
PC : WS157954
Type : Logoff
示例如何使用它来回答您的问题:
#total unique users that logged on
$logList.User | select -Unique | Measure | select -ExpandProperty Count
#Total log on
$logList | where Type -eq LogOn | Measure | select -ExpandProperty Count
#Time of each session per user
# This is a bit tricky so I leave that up to you :p
答案 1 :(得分:0)
我使用完全不同的方法。事件查看器保持登录&amp;注销带有用户ID的时间戳(我认为它是用户的sid)。然后,您只需要跟踪意外的重新启动,以确保对于那些只有该登录事件的会话来说,这是您的截止点。
然后,您可以在计划任务或任何事情的任何给定时间运行脚本。您不必在登录/注销期间运行,这可能会影响登录时间(不多但仍然如此)。