protected override void ProcessRecord() { IEnumerable <FileSystemAccessRule2> acl = null; FileSystemInfo item = null; foreach (var path in paths) { try { item = this.GetFileSystemInfo2(path); } catch (Exception ex) { this.WriteError(new ErrorRecord(ex, "ReadFileError", ErrorCategory.OpenError, path)); continue; } try { acl = FileSystemAccessRule2.GetFileSystemAccessRules(item, !ExcludeExplicit, !ExcludeInherited, getInheritedFrom); } catch (UnauthorizedAccessException) { try { var ownerInfo = FileSystemOwner.GetOwner(item); var previousOwner = ownerInfo.Owner; FileSystemOwner.SetOwner(item, System.Security.Principal.WindowsIdentity.GetCurrent().User); acl = FileSystemAccessRule2.GetFileSystemAccessRules(item, !ExcludeExplicit, !ExcludeInherited, getInheritedFrom); FileSystemOwner.SetOwner(item, previousOwner); } catch (Exception ex2) { this.WriteError(new ErrorRecord(ex2, "AddAceError", ErrorCategory.WriteError, path)); } } catch (Exception ex) { this.WriteWarning(string.Format("Could not read item {0}. The error was: {1}", path, ex.Message)); } finally { if (acl != null) { var orphanedAces = acl.Where(ace => string.IsNullOrEmpty(ace.Account.AccountName)); orphanedSidCount += orphanedAces.Count(); WriteVerbose(string.Format("Item {0} knows about {1} orphaned SIDs in its ACL", path, orphanedAces.Count())); orphanedAces.ForEach(ace => WriteObject(ace)); } } } }
protected override void ProcessRecord() { if (ParameterSetName.EndsWith("Simple")) { FileSystemSecurity2.ConvertToFileSystemFlags(appliesTo, out inheritanceFlags, out propagationFlags); } if (ParameterSetName.StartsWith("Path")) { foreach (var path in paths) { FileSystemInfo item = null; try { item = GetFileSystemInfo2(path); } catch (Exception ex) { WriteError(new ErrorRecord(ex, "ReadFileError", ErrorCategory.OpenError, path)); } if (ParameterSetName == "PathSimple") { FileSystemSecurity2.ConvertToFileSystemFlags(appliesTo, out inheritanceFlags, out propagationFlags); } try { FileSystemAccessRule2.RemoveFileSystemAccessRule(item, account.ToList(), accessRights, accessType, inheritanceFlags, propagationFlags); } catch (UnauthorizedAccessException) { try { var ownerInfo = FileSystemOwner.GetOwner(item); var previousOwner = ownerInfo.Owner; FileSystemOwner.SetOwner(item, System.Security.Principal.WindowsIdentity.GetCurrent().User); FileSystemAccessRule2.RemoveFileSystemAccessRule(item, account.ToList(), accessRights, accessType, inheritanceFlags, propagationFlags); FileSystemOwner.SetOwner(item, previousOwner); } catch (Exception ex2) { WriteError(new ErrorRecord(ex2, "RemoveAceError", ErrorCategory.WriteError, path)); } } catch (Exception ex) { WriteError(new ErrorRecord(ex, "RemoveAceError", ErrorCategory.WriteError, path)); } if (passThru == true) { FileSystemAccessRule2.GetFileSystemAccessRules(item, true, true).ForEach(ace => WriteObject(ace)); } } } else { foreach (var sd in securityDescriptors) { FileSystemAccessRule2.RemoveFileSystemAccessRule(sd, account.ToList(), accessRights, accessType, inheritanceFlags, propagationFlags); if (passThru == true) { FileSystemAccessRule2.GetFileSystemAccessRules(sd, true, true).ForEach(ace => WriteObject(ace)); } } } }
protected override void ProcessRecord() { IEnumerable <FileSystemAccessRule2> acl = null; FileSystemInfo item = null; if (ParameterSetName == "Path") { foreach (var path in paths) { try { item = GetFileSystemInfo2(path); } catch (Exception ex) { WriteError(new ErrorRecord(ex, "ReadFileError", ErrorCategory.OpenError, path)); continue; } try { acl = FileSystemAccessRule2.GetFileSystemAccessRules(item, !excludeExplicit, !excludeInherited, getInheritedFrom); } catch (UnauthorizedAccessException) { try { var ownerInfo = FileSystemOwner.GetOwner(item); var previousOwner = ownerInfo.Owner; FileSystemOwner.SetOwner(item, System.Security.Principal.WindowsIdentity.GetCurrent().User); acl = FileSystemAccessRule2.GetFileSystemAccessRules(item, !excludeExplicit, !excludeInherited, getInheritedFrom); FileSystemOwner.SetOwner(item, previousOwner); } catch (Exception ex2) { WriteError(new ErrorRecord(ex2, "ReadSecurityError", ErrorCategory.WriteError, path)); continue; } } catch (Exception ex) { WriteError(new ErrorRecord(ex, "ReadSecurityError", ErrorCategory.OpenError, path)); continue; } finally { if (acl != null) { if (account != null) { acl = acl.Where(ace => ace.Account == account); } acl.ForEach(ace => WriteObject(ace)); } } } } else { foreach (var sd in securityDescriptors) { acl = FileSystemAccessRule2.GetFileSystemAccessRules(sd, !excludeExplicit, !excludeInherited, getInheritedFrom); if (account != null) { acl = acl.Where(ace => ace.Account == account); } acl.ForEach(ace => WriteObject(ace)); } } }
protected override void ProcessRecord() { //as this cmdlet retreives also the current working folder to show the permissions. if (includeRootFolder & isFirstFolder) { string rootPath = System.IO.Path.GetDirectoryName(paths[0]); if (!string.IsNullOrEmpty(rootPath)) { List <string> l = new List <string>(); l.Add(rootPath); l.AddRange(paths); paths = l; } } foreach (var p in paths) { try { item = GetFileSystemInfo2(p) as DirectoryInfo; if (item != null) { WriteVerbose(string.Format("New folder: {0}", item.FullName)); directoryList.Add(item); var acl = FileSystemAccessRule2.GetFileSystemAccessRules(item, !ExcludeExplicit, !ExcludeInherited).Select(ace => ace.ToSimpleFileSystemAccessRule2()); try { previousItem = item.GetParent(); } catch { } IEnumerable <SimpleFileSystemAccessRule> previousAcl = null; if (isFirstFolder) { previousAcls.Add(item.FullName, acl); aceList.AddRange(acl); acl.ForEach(ace => WriteObject(ace)); isFirstFolder = false; } else { if (previousAcls.ContainsKey(previousItem.FullName)) { previousAcl = previousAcls[previousItem.FullName]; previousAcls.Add(item.FullName, acl); List <SimpleFileSystemAccessRule> diffAcl = new List <SimpleFileSystemAccessRule>(); foreach (var ace in acl) { var equalsUser = previousAcl.Where(prevAce => prevAce.Identity == ace.Identity); var equalsUserAndAccessType = previousAcl.Where(prevAce => prevAce.Identity == ace.Identity & prevAce.AccessControlType == ace.AccessControlType); var equalsRights = previousAcl.Where(prevAce => (prevAce.AccessRights & ace.AccessRights) == ace.AccessRights); var totalEqual = previousAcl.Where(prevAce => prevAce.Identity == ace.Identity & prevAce.AccessControlType == ace.AccessControlType & (prevAce.AccessRights & ace.AccessRights) == ace.AccessRights); if (previousAcl.Where(prevAce => prevAce.AccessControlType == ace.AccessControlType & (prevAce.AccessRights & ace.AccessRights) == ace.AccessRights & prevAce.Identity == ace.Identity).Count() == 0) { diffAcl.Add(ace); } } aceList.AddRange(diffAcl); diffAcl.ForEach(ace => WriteObject(ace)); } } } } catch (Exception ex) { WriteError(new ErrorRecord(ex, "ReadError", ErrorCategory.OpenError, p)); } } }