2013-07-13 189 views
-3

我需要監視用戶登錄到終端服務器(並註銷)。自然,安全日誌可以告訴我們這些信息,但它也給了我們更多的信息!Powershell - 審計事件日誌

我知道PowerShell可以Get-EventLog,但它足夠聰明,以某種方式喂入一個過濾器,只記錄事件的時間,用戶登錄和註銷的ID,或者這是要求太多?

謝謝!

+0

除非您希望答案是「是」或「否」(在本例中爲「否」),否則您不應該詢問是/否問題。 –

+0

可能適合[服務器故障](http://serverfault.com/)。 – 2013-07-17 04:23:24

回答

1

從您的問題中不清楚您是否希望在出現登錄時(「需要監視用戶登錄時的情況」)還是希望稍後檢查日誌,這就是「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倍,主要是因爲你的問題不夠具體,不足以得到一個簡潔的答案來覆蓋它。