windows環境だとファイル監査設定をして、ファイルの変更履歴をとるケースって結構あると思う。
この設定を、複数台のサーバにGUIで行うのが辛すぎたので、何とかならないかと調べていたところpowershellでNTFSSecurityという拡張モジュールを使って簡単に出来たのでシェア。
GUIで数時間かかっていた作業が、powershell実行で投げて放置できて幸せ。
##使い方
###1.モジュール置き場を確認
下記コマンドを実行し、ディレクトリに表示されている場所(PSモジュールの置き場)に、NTFSSecurity(このリポジトリにある)をコピーする
#####PATHが通っているとこならどこでもOK
基本的には、C:\Windows\system32\WindowsPowerShell\v1.0\Modules
PS> Get-Module -ListAvailable
ディレクトリ: .....
一応、もう一度同じコマンドを実行し、利用可能モジュールとして[NTFSSecurity]がロードされている事を確認
PS> Get-Module -ListAvailable
ModuleType Name ExportedCommands
.. ... ....
Script NTFSSecurity {Add-NTFSAccess, Add-NTFSAudit, Copy-NTFSAccess, Disable-NTFSAccessIn...
###2.モジュールのインポートを実施
PS> Import-Module NTFSSecurity
###3.コマンド通ることを確認する。
とりあえず、[Add-Audit]と打ってエラー出なければOK
PS> Add-Audit
コマンド パイプライン位置 1 のコマンドレット Add-NTFSAudit
##サンプルコード
上記行った後に、サンプルコードのパスとユーザを追加したら
$TargetFolders = @("Path1",
"Path2")
$_host = hostname
$AuditUsers = @("User1",
"User2")
#監査設定のどの項目を設定したいか
$AuditRules = "Delete,DeleteSubdirectoriesAndFiles,ChangePermissions,Takeownership,WriteData,CreateDirectories,CreateFiles"
$InheritType = "ContainerInherit,ObjectInherit"
$PropagationType = "InheritOnly"
$AuditType = "Success,Failure"
foreach ($AuditUser in $AuditUsers){
foreach ($TargetFolder in $TargetFolders){
Write-Host "TagetHost:",$TargetFolder,"TagetUser:",$AuditUser
Add-Audit $AuditUser $TargetFolder -AccessRights $AuditRules -InheritanceFlags $InheritType -PropagationFlags $PropagationType -Type $AuditType
}
}
Write-Host "ACE Add Complete"
##参照
監査設定項目一覧(powershellは.netのライブラリをそのまま使えるので一緒)
https://msdn.microsoft.com/ja-jp/library/system.security.accesscontrol.filesystemrights%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396