function Get-MySharePermissions
{
param([string]$computername,[string]$sharename)
$ShareSec = Get-WmiObject -Class Win32_LogicalShareSecuritySetting -ComputerName $computername
ForEach ($ShareS in ($ShareSec | Where {$_.Name -eq $sharename}))
{
$SecurityDescriptor = $ShareS.GetSecurityDescriptor()
$myCol = @()
ForEach ($DACL in $SecurityDescriptor.Descriptor.DACL)
{
$myObj = "" | Select Domain, ID, AccessMask, AceType
$myObj.Domain = $DACL.Trustee.Domain
$myObj.ID = $DACL.Trustee.Name
Switch ($DACL.AccessMask)
{
2032127 {$AccessMask = "FullControl"}
1179785 {$AccessMask = "Read"}
1180063 {$AccessMask = "Read, Write"}
1179817 {$AccessMask = "ReadAndExecute"}
-1610612736 {$AccessMask = "ReadAndExecuteExtended"}
1245631 {$AccessMask = "ReadAndExecute, Modify, Write"}
1180095 {$AccessMask = "ReadAndExecute, Write"}
268435456 {$AccessMask = "FullControl (Sub Only)"}
default {$AccessMask = $DACL.AccessMask}
}
$myObj.AccessMask = $AccessMask
Switch ($DACL.AceType)
{
0 {$AceType = "Allow"}
1 {$AceType = "Deny"}
2 {$AceType = "Audit"}
}
$myObj.AceType = $AceType
Clear-Variable AccessMask -ErrorAction SilentlyContinue
Clear-Variable AceType -ErrorAction SilentlyContinue
$myCol += $myObj
}
}
Return $myCol
}
$shares = gwmi win32_share
foreach($share in $shares)
{
$share | Format-Table Name, Path -AutoSize
Get-MySharePermissions . $share.Name | Format-Table Domain, ID, AccessMask, AceType -AutoSize
Write-Host "==============================================="
}