As a PowerShell enthusiast you want to do everything in PowerShell, am I right guys? 😉
One of the things that you’ll run into eventually, is the dreaded Max_256 char aka Path too long error, when using Get- or Set-Acl or anything folder related for that matter. It’s one of the reasons why I always revert back to good ol’ icacls!
Sure, there are elaborate workarounds as substitute and you could use PathToLong utility, still…
Why can’t PowerShell just resolve paths exceeding 256 chars? (Pause for emphasis)
Well it turns out there’s a module that can help! Enter NTFSSecurity
I found this lil’ gem on FaceBook, I know right? I’m just as surprised as you are! Don’t judge me… there’s a PowerShell group on FB… Yes I need a life…
[CmdletBinding()] param( [Parameter(Mandatory=$true)] [string]$RootFolder ) #Import NTFSSecurity to overcome 256 MAX_Path limitation #You can find it here: https://ntfssecurity.codeplex.com/ #Place it in your PSModulePath of preference. Import-Module NTFSSecurity Function Read-ACL{ param( [string]$Folder ) try{ $aclFolder = Get-NTFSAccess $Folder -excludeinherited -ErrorAction stop if ($aclFolder -ne $null){ Write-Verbose "Explicit Permissions found on $Folder" $hshACEsFolder =[PSCustomObject]@{ Path = '' ACE = '' ControlType = '' AccessRights = '' } foreach($ace in $aclFolder){ if ($ace.isinherited -eq $false){ $hshACEsFolder.Path = $ace.FullName $hshACEsFolder.ACE = $ace.account.accountname $hshACEsFolder.ControlType = $ace.AccessControlType $hshACEsFolder.AccessRights = $ace.AccessRights Write-Output $hshACEsFolder } } } } catch { Write-Warning "Cannot access Folder: $($Folder)" } } #region Main try{ $Subfolders = Get-ChildItem2 $RootFolder -recurse | Where-Object { $_.Attributes -eq 'Directory' } -ErrorAction stop } catch { Write-Warning "Access denied on $RootFolder" } Write-Verbose "SubFolders count: $($SubFolders.count)" foreach ($SubFolder in $SubFolders) { Read-ACL $Subfolder.FullName } #endregion
I’m only interested in where the NTFS Rights are set explicitly (ExcludeInherited). It works!
I’ve been searching for something like this for quite some time now 🙂
As always be sure to test run first… Guess it’s time to update my NTFS scripts… Hehe…
Ttyl,
Urv
Pingback: Get-NTFSAccess from the NTFSSecurity module | pshirwin
Pingback: Revisiting NTFS Longpaths issue | pshirwin