none
用Powershell抓取哪一個「帳號」來異動檔案 RRS feed

  • 問題

  • 我寫了一支Powershell來即時監控File Server上特定資料夾檔案的異動

    是使用FileSystemWatcher來寫的

    目前檔案的Created、Delete、Changed、Rename的路徑、檔名、時間點都能正確抓取

    但最重要的是哪一個「帳號」來異動檔案,卻不知到怎麼做

    麻煩專家指點該怎麼做,謝謝

    補上程式碼

    #建立一個FileSystemWatcher物件
    $fsw = New-Object IO.FileSystemWatcher
    #指定要監控的路徑
    $fsw.Path = 'D:\ShareFolder'
    #篩選要監控的檔案類型
    $fsw.Filter = '*.*'
    #是否包括子資料夾
    $fsw.IncludeSubdirectories = $true
    #設定過濾通知器,共有LastAccess,LastWrite,FileName,DirectoryName,Size,Attributes,CreationTime,Security
    $fsw.NotifyFilter = 'LastAccess,LastWrite,FileName,DirectoryName'
    #新增檔案事件
    Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
    #抓取檔名
    $name = $Event.SourceEventArgs.Name
    #抓取完整路徑
    $path = $Event.SourceEventArgs.FullPath
    #抓取異動類型
    $changeType = $Event.SourceEventArgs.ChangeType
    #抓取異動時間
    $timeStamp = $Event.TimeGenerated
    #顯示在螢幕,以綠色字體顯示
    Write-Host "Name:$name,Fullpath:$path,Changetype:$changeType,Time:$timeStamp" -fore green
    #寫入檔案,以附加方式持續寫入
    Out-File -FilePath c:\Log\filechange\outlog.txt -Append -InputObject "Name:$name,Fullpath:$path,Changetype:$changeType,Time:$timeStamp"}
    #刪除檔案事件,顯示在螢幕用紅色字體
    Register-ObjectEvent $fsw Deleted -SourceIdentifier FileDeleted -Action {
    $name = $Event.SourceEventArgs.Name
    $path = $Event.SourceEventArgs.FullPath
    $changeType = $Event.SourceEventArgs.ChangeType
    $timeStamp = $Event.TimeGenerated
    Write-Host "Name:$name,Fullpath:$path,Changetype:$changeType,Time:$timeStamp" -fore red
    Out-File -FilePath c:\Log\filechange\outlog.txt -Append -InputObject "Name:$name,Fullpath:$path,Changetype:$changeType,Time:$timeStamp"}
    #檔案更名事件,顯示在螢幕用黃色字體
    Register-ObjectEvent $fsw Renamed -SourceIdentifier FileRenamed -Action {
    $name = $Event.SourceEventArgs.Name
    $path = $Event.SourceEventArgs.FullPath
    $changeType = $Event.SourceEventArgs.ChangeType
    $timeStamp = $Event.TimeGenerated
    #原始檔名
    $oldname = $Event.SourceEventArgs.OldName
    Write-Host "Oldname:$oldname, NewName:$name, Fullpath:$path, Changetype:$changeType, Time:$timeStamp" -fore yellow    
    Out-File -FilePath c:\Log\filechange\outlog.txt -Append -InputObject "Oldname:$oldname, NewName:$name, Fullpath:$path, Changetype:$changeType, Time:$timeStamp"}
    #檔案變動事件,用白色字體顯示
    Register-ObjectEvent $fsw Changed -SourceIdentifier FileChanged -Action {
    $name = $Event.SourceEventArgs.Name
    $path = $Event.SourceEventArgs.FullPath
    $changeType = $Event.SourceEventArgs.ChangeType
    $timeStamp = $Event.TimeGenerated
    Write-Host "Name:$name,Fullpath:$path,Changetype:$changeType,Time:$timeStamp" -fore white
    Out-File -FilePath c:\Log\filechange\outlog.txt -Append -InputObject "Name:$name,Fullpath:$path,Changetype:$changeType,Time:$timeStamp"}
    

    • 已編輯 kinyx 2018年7月17日 上午 05:36 補上程式碼
    2018年7月16日 上午 06:10

所有回覆

  • FileSystemWatcher本身沒有提供帳號的相關資訊,

    應該要配合檔案稽核原則,再去eventlog抓取相對應的Account name.

    2018年8月7日 上午 05:25
  • 有考慮用 MSSlave 提的檔案稽核紀錄去做嗎
    [資安筆記] Windows企業資安稽核應用系列 (1) - 「稽核」是有力的線索與證據!

    蘇老碎碎念
    資訊無涯,回頭已不見岸
    Facebook - 微軟台灣官方論壇愛好者俱樂部

    論壇不是神壇,沒人會通靈知道問題狀況
    請正確簡述標題及詳述狀況
    如何在論壇正確發問,可以參考iThome的文章:
    如何問到我要的答案

    2018年8月7日 下午 02:17
    版主
  • 我原本使用PowerShell的Get-Eventlog,搭配事件記錄4663和4656觸發

    但發現一次多筆資料新增或刪除,只會觸發最後一筆,中間的都不會做動

    所以才改用FileSystemWatcher,但FileSystemWatcher卻沒帶使用者的資料

    本來是希望能做到市售的檔案稽核工具一樣能抓到即時的檔案異動

    後來我放棄抓即時的異動,改用Get-EventLog抓取「前一小時」所有的安全性事件來分析

    把4663和4656的事件分離出來,其餘事件丟棄

    目前算是能正常稽核,但還是有以下缺點,但這是Windows事件記錄本身的問題,不知道怎麼改進

    1:檔案或資料夾更名時,會有一個原名稱刪除的動作,但新名稱寫入的動作卻不會紀錄在事件記錄的內容(也就是會有一個更名的紀錄,但看不出變更後的名稱是什麼)

    2:Office系列(Word、Excel、Powerpoint)在做任何動作時,會產生很多暫存檔的紀錄,這部分很佔空間

    3:檔案路徑過長時,物件名稱會被分為兩段或三段(如下),而且還有第二段前面還有空格,這部分在處理很麻煩,有考慮用Export-Clixml方式處理,但內容卻會被截斷!

    Out-File

    物件名稱:        D:\ShareFolder\GGGGGGGGGGGGGGGGGGGGGGG\WWWWWWWWWWWWWWWWWWWWWW\FFFFFFFFFFFFFFFFFFF
                         FFFFFFFFFFFFFF\SSSSSSSSSSSSSSSSSSSSSSS\MMMMMMMMMMMMMMMMMMMMMMMM\KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
                         Kk\ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ\RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR\新增 .docx

    Export-Clixml

    S N="propertyValue">{S-1-5-21-1204351893-1071295967-3993435584-1003, user1, FS-LAB, 0x31171...}</S>

    2018年8月21日 上午 01:47