我需要监控用户何时登录终端服务器(并注销)。现在,安全日志自然可以告诉我们这些信息,但它也为我们提供了更多信息!
我知道PowerShell可以Get-EventLog但是它是否足够聪明以某种方式被过滤器只能记录事件的次数,用户登录和注销的ID,或者这个要求太多了?
谢谢!
答案 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" ...
。 (我不知道“终端服务”实际上是一个源名称。你会在第一步中找到它,你在那里记下了信息。)