diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2c03f4c..fc2071a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -68,5 +68,8 @@ The format is based on
both at position 2, so that positional calls failed; `-AccessRights` is
now at position 3, like in `Remove-NTFSAudit`
([#4](https://github.com/raandree/NTFSSecurity/issues/4))
+- Fix `-PassThru` of `Add-NTFSAudit` with `-SecurityDescriptor` and of
+ `Remove-NTFSAudit` with `-Path`, which returned access entries; both now
+ return the audit entries
[Unreleased]: https://github.com/raandree/NTFSSecurity/compare/4.2.6...HEAD
diff --git a/Docs/Cmdlets/Add-NTFSAudit.md b/Docs/Cmdlets/Add-NTFSAudit.md
index bc30563..4ffb685 100644
--- a/Docs/Cmdlets/Add-NTFSAudit.md
+++ b/Docs/Cmdlets/Add-NTFSAudit.md
@@ -278,9 +278,9 @@ The value passed to `-AppliesTo` is converted to this type and binds by property
## OUTPUTS
-### Security2.FileSystemAccessRule2
+### Security2.FileSystemAuditRule2
-Without `-PassThru` the cmdlet writes nothing. With `-PassThru` the type depends on the parameter set: in the `Path` sets the cmdlet writes all audit entries of the item, explicit and inherited ones, as `Security2.FileSystemAuditRule2` objects, while in the `SecurityDescriptor` sets it writes the access entries of the descriptor as `Security2.FileSystemAccessRule2` objects. Use `Get-NTFSAudit` when you need the audit entries of a security descriptor.
+Without `-PassThru` the cmdlet writes nothing. With `-PassThru` the cmdlet writes all audit entries of the item or the security descriptor, explicit and inherited ones, as `Security2.FileSystemAuditRule2` objects. Before 5.0.0, the `SecurityDescriptor` sets wrote the access entries of the descriptor instead.
## NOTES
diff --git a/Docs/Cmdlets/Remove-NTFSAudit.md b/Docs/Cmdlets/Remove-NTFSAudit.md
index 6738cff..c387e31 100644
--- a/Docs/Cmdlets/Remove-NTFSAudit.md
+++ b/Docs/Cmdlets/Remove-NTFSAudit.md
@@ -276,9 +276,9 @@ The value passed to `-AppliesTo` is converted to this type and binds by property
## OUTPUTS
-### Security2.FileSystemAccessRule2
+### Security2.FileSystemAuditRule2
-Without `-PassThru` the cmdlet writes nothing. With `-PassThru` the type depends on the parameter set: in the `Path` sets the cmdlet writes all access entries of the item, explicit and inherited ones, as `Security2.FileSystemAccessRule2` objects, while in the `SecurityDescriptor` sets it writes all audit entries of the descriptor as `Security2.FileSystemAuditRule2` objects. Use `Get-NTFSAudit` to check the audit entries of an item after the removal.
+Without `-PassThru` the cmdlet writes nothing. With `-PassThru` the cmdlet writes all audit entries of the item or the security descriptor, explicit and inherited ones, as `Security2.FileSystemAuditRule2` objects. Before 5.0.0, the `Path` sets wrote the access entries of the item instead.
## NOTES
diff --git a/NTFSSecurity/AuditCmdlets/AddAudit.cs b/NTFSSecurity/AuditCmdlets/AddAudit.cs
index 8d97b54..9151a6f 100644
--- a/NTFSSecurity/AuditCmdlets/AddAudit.cs
+++ b/NTFSSecurity/AuditCmdlets/AddAudit.cs
@@ -169,7 +169,7 @@ namespace NTFSSecurity
if (passThru == true)
{
- FileSystemAccessRule2.GetFileSystemAccessRules(sd, true, true).ForEach(ace => WriteObject(ace));
+ FileSystemAuditRule2.GetFileSystemAuditRules(sd, true, true).ForEach(ace => WriteObject(ace));
}
}
}
diff --git a/NTFSSecurity/AuditCmdlets/RemoveAudit.cs b/NTFSSecurity/AuditCmdlets/RemoveAudit.cs
index 8ce78b0..6876297 100644
--- a/NTFSSecurity/AuditCmdlets/RemoveAudit.cs
+++ b/NTFSSecurity/AuditCmdlets/RemoveAudit.cs
@@ -162,7 +162,7 @@ namespace NTFSSecurity
if (passThru == true)
{
- FileSystemAccessRule2.GetFileSystemAccessRules(item, true, true).ForEach(ace => WriteObject(ace));
+ FileSystemAuditRule2.GetFileSystemAuditRules(item, true, true).ForEach(ace => WriteObject(ace));
}
}
}
diff --git a/NTFSSecurity/en-US/NTFSSecurity.dll-Help.xml b/NTFSSecurity/en-US/NTFSSecurity.dll-Help.xml
index 942c0ec..a420e33 100644
--- a/NTFSSecurity/en-US/NTFSSecurity.dll-Help.xml
+++ b/NTFSSecurity/en-US/NTFSSecurity.dll-Help.xml
@@ -1490,10 +1490,10 @@
- Security2.FileSystemAccessRule2
+ Security2.FileSystemAuditRule2
- Without `-PassThru` the cmdlet writes nothing. With `-PassThru` the type depends on the parameter set: in the `Path` sets the cmdlet writes all audit entries of the item, explicit and inherited ones, as `Security2.FileSystemAuditRule2` objects, while in the `SecurityDescriptor` sets it writes the access entries of the descriptor as `Security2.FileSystemAccessRule2` objects. Use `Get-NTFSAudit` when you need the audit entries of a security descriptor.
+ Without `-PassThru` the cmdlet writes nothing. With `-PassThru` the cmdlet writes all audit entries of the item or the security descriptor, explicit and inherited ones, as `Security2.FileSystemAuditRule2` objects. Before 5.0.0, the `SecurityDescriptor` sets wrote the access entries of the descriptor instead.
@@ -9083,10 +9083,10 @@ PS C:\Data> Get-NTFSSecurityDescriptor
- Security2.FileSystemAccessRule2
+ Security2.FileSystemAuditRule2
- Without `-PassThru` the cmdlet writes nothing. With `-PassThru` the type depends on the parameter set: in the `Path` sets the cmdlet writes all access entries of the item, explicit and inherited ones, as `Security2.FileSystemAccessRule2` objects, while in the `SecurityDescriptor` sets it writes all audit entries of the descriptor as `Security2.FileSystemAuditRule2` objects. Use `Get-NTFSAudit` to check the audit entries of an item after the removal.
+ Without `-PassThru` the cmdlet writes nothing. With `-PassThru` the cmdlet writes all audit entries of the item or the security descriptor, explicit and inherited ones, as `Security2.FileSystemAuditRule2` objects. Before 5.0.0, the `Path` sets wrote the access entries of the item instead.
diff --git a/Tests/Audit.Tests.ps1 b/Tests/Audit.Tests.ps1
index 432cced..3ce0b6f 100644
--- a/Tests/Audit.Tests.ps1
+++ b/Tests/Audit.Tests.ps1
@@ -93,4 +93,33 @@ Describe 'Add-NTFSAudit' {
@($rules | Where-Object -FilterScript { $_.IdentityReference.Value -eq 'S-1-1-0' }) | Should -HaveCount 1
}
}
+
+ Context 'With -PassThru' {
+ It 'Should return the audit entries of a security descriptor, not its access entries' {
+ $file = New-TestSandboxItem -Sandbox $sandbox -Name 'PassThru'
+ $sd = Get-NTFSSecurityDescriptor -Path $file
+
+ $result = @(Add-NTFSAudit -SecurityDescriptor $sd -Account 'Everyone' -AccessRights ReadData -InheritanceFlags None -PropagationFlags None -PassThru)
+
+ $result | Should -Not -BeNullOrEmpty
+ $result | ForEach-Object -Process { $_ | Should -BeOfType [Security2.FileSystemAuditRule2] }
+ @($result | Where-Object -FilterScript { $_.Account.Sid -eq 'S-1-1-0' }) | Should -HaveCount 1
+ }
+ }
+}
+
+Describe 'Remove-NTFSAudit' {
+ Context 'With -PassThru' {
+ It 'Should return the audit entries of the item, not its access entries' -Skip:(-not $canReadAudit) {
+ $file = New-TestSandboxItem -Sandbox $sandbox -Name 'PassThru'
+ Add-NTFSAudit -Path $file -Account 'Everyone' -AccessRights ReadData -InheritanceFlags None -PropagationFlags None
+ Add-NTFSAudit -Path $file -Account 'BUILTIN\Users' -AccessRights Delete -InheritanceFlags None -PropagationFlags None
+
+ $result = @(Remove-NTFSAudit -Path $file -Account 'Everyone' -AccessRights ReadData -InheritanceFlags None -PropagationFlags None -PassThru)
+
+ $result | Should -Not -BeNullOrEmpty
+ $result | ForEach-Object -Process { $_ | Should -BeOfType [Security2.FileSystemAuditRule2] }
+ @($result | Where-Object -FilterScript { $_.Account.Sid -eq 'S-1-5-32-545' }) | Should -HaveCount 1
+ }
+ }
}