Powershell - 审核事件日志

时间:2013-07-13 11:32:21

标签: powershell

我需要监控用户何时登录终端服务器(并注销)。现在,安全日志自然可以告诉我们这些信息,但它也为我们提供了更多信息!

我知道PowerShell可以Get-EventLog但是它是否足够聪明以某种方式被过滤器只能记录事件的次数,用户登录和注销的ID,或者这个要求太多了?

谢谢!

1 个答案:

答案 0 :(得分:1)

从您的问题中不清楚您是否希望在登录时看到登录信息(“需要监控用户何时登录”),或者您是否希望稍后检查日志,这就是“Get-EventLog”建议的内容。

这是假设后者。

这将需要一些实验。在事件日志(eventvwr.msc)中查找要查看的消息。我没有安装TS,但我猜你有两条消息要发送给你。找两个例子。记下这两条消息中的每一条的事件ID,任务类别和来源。然后执行:

get-eventlog -instanceid <event id> -logname <logname>

“logname”可能是“system”或“security”,但TS可能拥有自己的日志。 “event id”将是你记下的两个中的一个。如果这为您提供了所需的信息,那么您的最终脚本可能只有两个get-eventlog命令,一个用于登录事件,另一个用于注销事件。如果事件是正确的事件,但过于“冗长”,那么您可以使用各种技术从事件消息中提取您想要的信息:正则表达式(help about_regular_expressions),使用-split运算符(help about_split) ,或使用String类中的方法([string] | get-memeber)。例如:

$eventmsg = get-eventlog -instanceid 4648 -logname security | select-object -first 1

# breaks the message into 3 parts. The middle part is the account name
  $eventmsg.message -split "Account Name:" -split "Account Domain: | 
# select the middle part, which is the account name
    select-object -first 1 -skip 1 |       
# assign account name to a variable
    set-variable accountName # (don't use $ with set-variable) 

# Do similar set of operations to get $logonTime, $domain, and whatever else

# Write message containing info you want to see:
"User $domain/$accountName, logged in, at $time`n"

如果您收到非TS登录/注销事件,您可以使用Source(您在上面记下来)来过滤:get-eventlog -source "Terminal Services" ...。 (我不知道“终端服务”实际上是一个源名称。你会在第一步中找到它,你在那里记下了信息。)


顺便说一下,除了询问你需要的信息(只是“是/否”与“我如何”)之外,确保你的用例是明确的也是有帮助的。我的答案大约是你问题长度的4倍,主要是因为你的问题不够具体,无法用简洁的答案来覆盖它。