命名って難しい

変数、関数、クラスなどなど実装より命名に毎回悩むタイプの人間による技術についてのメモ。

PowerShellで訳わからん状態になっている共有フォルダのアクセスを少し監視した。

共有フォルダに格納されている特定のファイルを作っているマシン/アプリが不明なので調査したい。

もくじ

環境

  • Windows Server
  • 昔ながらのアプリが共有フォルダを軸にファイルを読み込んだりなんだりしている。
  • 共有フォルダとなるサーバーが乱立している
  • アプリもいろいろなサーバーや共有端末に分散していて全容が不明。

意図

  • 対象のファイルへのアクセスを監視して、読み書きしているサーバーを把握する手がかりにしたい
    • サーバーとアクセス時間帯が分かればそのサーバーのジョブが見れるので多分解析できる。

やったこと

PowerShell実装

PowerShellでの共有フォルダの監視スクリプトを実装。

$smb_namespace = "root\Microsoft\Windows\SMB"
$smb_query = "Select * From __InstanceCreationEvent WITHIN 1 Where TargetInstance ISA 'MSFT_SmbOpenFile'"
$log = "C:\sandbox\log.txt"

#イベントが発生すると実行されるAction
$smb_event = {
    $e = $Event.SourceEventArgs.NewEvent
    $out = [DateTime]::FromFileTime($e.TIME_CREATED).ToString() + "|" + $e.TargetInstance.ClientComputerName + "|" + $e.TargetInstance.ClientUserName + "|" + $e.TargetInstance.Path
    Add-Content -Path $log -Value $out
}

#「SMBLog」という名前のイベントを作成
Register-WmiEvent -Namespace $smb_namespace -Query $smb_query -SourceIdentifier "SMBLog" -Action $smb_event
#Set-Content -Path SubscriptionId.txt -Value $registerInfo.Id


Write-Host "End to [Ctrl + C]"
Try{   
  While ($True) {
    $NewEvent = Wait-Event -SourceIdentifier "SMBLog"
    Remove-Event "SMBLog"
  }    
}Catch{
  Write-Warning "Error"
  $Error[0]
}Finally{
    Get-Event | Remove-Event 
    Get-EventSubscriber | Unregister-Event
}      

とりあえずはこの情報を元に、なにかやれることを組み立てていければと思います。

参考

イベント処理

※URL先の記事が消えてしまっていたのでアーカイブです。

Windows Serverのイベントログをリアルタイムでメール送信 - GMOインターネット株式会社