Powershell - 审计事件日志
我需要监视用户登录到终端服务器(并注销)。自然,安全日志可以告诉我们这些信息,但它也给了我们更多的信息!Powershell - 审计事件日志
我知道PowerShell可以Get-EventLog,但它足够聪明,以某种方式喂入一个过滤器,只记录事件的时间,用户登录和注销的ID,或者这是要求太多?
谢谢!
从您的问题中不清楚您是否希望在出现登录时(“需要监视用户登录时的情况”)还是希望稍后检查日志,这就是“Get-EventLog”的建议。
这是假设后者。
这将需要一些实验。在事件日志(eventvwr.msc)中查找要查看的消息。我没有安装TS,但我猜测有两条消息说明您希望看到的TS问题。找到两个例子。记下这两条消息中的每一条的事件ID,任务类别和来源。然后执行:
get-eventlog -instanceid <event id> -logname <logname>
“logname”可能是“system”或“security”,但TS可能有自己的日志。 “事件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" ...
。 (我不知道,“终端服务”,实际上是一个源名称,您将在第一步中,在那里你记下的信息已经想通了这一点。)
BTW,除了要求的您需要的信息(只是“是/否”与“我如何”),确保您的用例清晰也很有帮助。我的答案大概是你问题长度的4倍,主要是因为你的问题不够具体,不足以得到一个简洁的答案来覆盖它。
除非您希望答案是“是”或“否”(在本例中为“否”),否则您不应该询问是/否问题。 –
可能适合[服务器故障](http://serverfault.com/)。 – 2013-07-17 04:23:24