Hey 37mm, this should help. Instead of having to build out a static list of all of the combinations, I created a function called “Expand-AccessRights” that will convert your AccessMask into an array containing all of the Access Rights the mask represents. I then use this function to populate the “WhatHappenedText” property of the custom object. Hope this helps.
Function Expand-AccessRights {
[CmdLetBinding()]
Param (
[int]$AccessMask
)#param
$AccessRightsConstants = @(
(0x1, "FILE_READ_DATA, FILE_LIST_DIRECTORY"),
(0x2, "FILE_WRITE_DATA, FILE_ADD_FILE"),
(0x4, "FILE_APPEND_DATA, FILE_ADD_SUBDIRECTORY"),
(0x8, "FILE_READ_EA"),
(0x10, "FILE_WRITE_EA"),
(0x20, "FILE_EXECUTE, FILE_TRAVERSE"),
(0x40, "FILE_DELETE_CHILD"),
(0x80, "FILE_READ_ATTRIBUTES"),
(0x100, "FILE_WRITE_ATTRIBUTES"),
(0x10000, "DELETE"),
(0x20000, "READ_CONTROL"),
(0x40000, "WRITE_DAC"),
(0x80000, "WRITE_OWNER"),
(0x100000, "SYNCHRONIZE")
)
($AccessRightsConstants.Count - 1) .. 0 | ForEach-Object {
If ($AccessRightsConstants[$_][0] -le $AccessMask) {
$AccessRights += @($AccessRightsConstants[$_][1])
$AccessMask = $AccessMask - $AccessRightsConstants[$_][0]
}#if
}#foreach
$AccessRights
}#function
$Events = Get-WinEvent -ComputerName server1 -FilterHashtable @{LogName="Security"; ID=5145}
Foreach ($Event in $Events) {
$EventDataXML = ([xml]$Event.ToXML()).Event.EventData.Data
[PSCustomObject]@{
TimeCreated = $Event.TimeCreated;
UserName = ($EventDataXML | Where-Object {$_.Name -eq 'SubjectUserName'}).'#text';
Object = ($EventDataXML | Where-Object {$_.Name -eq 'ObjectType'}).'#text';
HostIP = ($EventDataXML | Where-Object {$_.Name -eq 'IpAddress'}).'#text';
FileLocation = ($EventDataXML | Where-Object {$_.Name -eq 'ShareName'}).'#text';
WhatFile = ($EventDataXML | Where-Object {$_.Name -eq 'ShareLocalPath'}).'#text';
WhatHappenedCode = ($EventDataXML | Where-Object {$_.Name -eq 'AccessMask'}).'#text';
WhatHappenedText = Expand-AccessRights -AccessMask ($EventDataXML | Where-Object {$_.Name -eq 'AccessMask'}).'#text'
}#pscustomobject
}#foreach
Results:
TimeCreated : 9/24/2015 10:00:20 PM
UserName : user1
Object : File
HostIP : 111.111.111.111
FileLocation : \\*\IPC$
WhatFile :
WhatHappenedCode : 0x12019f
WhatHappenedText : {SYNCHRONIZE, READ_CONTROL, FILE_WRITE_ATTRIBUTES, FILE_READ_ATTRIBUTES...}
TimeCreated : 9/24/2015 10:00:19 PM
UserName : user1
Object : File
HostIP : 111.11.111.111
FileLocation : \\*\test$
WhatFile : \??\C:\Users\Public\Desktop\Automation
WhatHappenedCode : 0x100081
WhatHappenedText : {SYNCHRONIZE, FILE_READ_ATTRIBUTES, FILE_READ_DATA, FILE_LIST_DIRECTORY}
TimeCreated : 9/24/2015 10:00:19 PM
UserName : user1
Object : File
HostIP : 111.111.111.111
FileLocation : \\*\test$
WhatFile : \??\C:\Users\Public\Desktop\Automation
WhatHappenedCode : 0x120089
WhatHappenedText : {SYNCHRONIZE, READ_CONTROL, FILE_READ_ATTRIBUTES, FILE_READ_EA...}
TimeCreated : 9/24/2015 10:00:19 PM
UserName : user1
Object : File
HostIP : 111.111.111.111
FileLocation : \\*\test$
WhatFile : \??\C:\Users\Public\Desktop\Automation
WhatHappenedCode : 0x100081
WhatHappenedText : {SYNCHRONIZE, FILE_READ_ATTRIBUTES, FILE_READ_DATA, FILE_LIST_DIRECTORY}
TimeCreated : 9/24/2015 10:00:19 PM
UserName : user1
Object : File
HostIP : 111.111.111.111
FileLocation : \\*\IPC$
WhatFile :
WhatHappenedCode : 0x12019f
WhatHappenedText : {SYNCHRONIZE, READ_CONTROL, FILE_WRITE_ATTRIBUTES, FILE_READ_ATTRIBUTES...}
TimeCreated : 9/24/2015 10:00:19 PM
UserName : user1
Object : File
HostIP : 111.111.111.111
FileLocation : \\*\test$
WhatFile : \??\C:\Users\Public\Desktop\Automation
WhatHappenedCode : 0x100080
WhatHappenedText : {SYNCHRONIZE, FILE_READ_ATTRIBUTES}
TimeCreated : 9/24/2015 10:00:05 PM
UserName : user1
Object : File
HostIP : ::1
FileLocation : \\*\test$
WhatFile : \??\C:\Users\Public\Desktop\Automation
WhatHappenedCode : 0x100080
WhatHappenedText : {SYNCHRONIZE, FILE_READ_ATTRIBUTES}
TimeCreated : 9/24/2015 10:00:05 PM
UserName : user1
Object : File
HostIP : ::1
FileLocation : \\*\test$
WhatFile : \??\C:\Users\Public\Desktop\Automation
WhatHappenedCode : 0x100080
WhatHappenedText : {SYNCHRONIZE, FILE_READ_ATTRIBUTES}