|
- using Security2;
- using System;
- using System.Management.Automation;
-
- namespace NTFSSecurity
- {
- [Cmdlet(VerbsCommon.Set, "NTFSSecurityDescriptor")]
- [OutputType(typeof(FileSystemSecurity2))]
- public class SetSecurityDescriptor : BaseCmdletWithPrivControl
- {
- private SwitchParameter passThru;
-
- [Parameter(Mandatory = true, Position = 2, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)]
- public FileSystemSecurity2[] SecurityDescriptor
- {
- get { return securityDescriptors.ToArray(); }
- set
- {
- securityDescriptors.Clear();
- securityDescriptors.AddRange(value);
- }
- }
-
- [Parameter()]
- public SwitchParameter PassThru
- {
- get { return passThru; }
- set { passThru = value; }
- }
-
- protected override void BeginProcessing()
- {
- base.BeginProcessing();
- }
-
- protected override void ProcessRecord()
- {
- foreach (var sd in securityDescriptors)
- {
- try
- {
- sd.Write();
-
- if (passThru)
- {
- WriteObject(new FileSystemSecurity2(sd.Item));
- }
- }
- catch (UnauthorizedAccessException)
- {
- try
- {
- var ownerInfo = FileSystemOwner.GetOwner(sd.Item);
- var previousOwner = ownerInfo.Owner;
-
- FileSystemOwner.SetOwner(sd.Item, System.Security.Principal.WindowsIdentity.GetCurrent().User);
-
- sd.Write();
-
- FileSystemOwner.SetOwner(sd.Item, previousOwner);
- }
- catch (Exception ex2)
- {
- WriteError(new ErrorRecord(ex2, "WriteSdError", ErrorCategory.WriteError, sd.Item));
- continue;
- }
- }
- catch (Exception ex)
- {
- WriteError(new ErrorRecord(ex, "WriteSdError", ErrorCategory.WriteError, sd.Item));
- }
- }
- }
- }
- }
|