You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

9.2 KiB

status last-verified owner source
current 2026-10-04 active-agent repository evidence

Progress

Current status

PRs #91, #92, and #93 are merged. The documentation matches the cmdlets at master, and the module ships the help file generated from it (en-US\NTFSSecurity.dll-Help.xml). Otherwise the module source differs from the 4.2.6 release only by the Remove-Item2 -PassThru rename and CompatiblePSEditions. Open PRs: #94 (work package 3) and #95 (work package 4, stacked on #94); the move to GitHub Actions is PR-ready locally on ai/github-actions, stacked on #95.

Recent milestones

  • 2026-10-02: Memory Bank initialized. PR #91 aligned the documentation with the code (36 cmdlet pages, conceptual pages, README, mkdocs.yml, .readthedocs.yml, CHANGELOG.md) and made appveyor.yml build the module and check the docs against that build (Decision 6); squash-merged as 690d8dd.
  • 2026-10-02: PR #83 (TechNet links) closed by the maintainer as superseded by #91.
  • 2026-10-04: Work package 1 merged as PR #92 with a merge commit (d917832): promptHistory.md ignored, Decision 7, Decisions moved to decisions/.
  • 2026-10-04: Work package 2 squash-merged as PR #93 (14799fb): generated help file shipped (Decision 8), stale help files removed, FileList complete, Tests\Help.Tests.ps1 (218 Pester tests), CI steps 03 (help file current) and 04 (Pester, one Tests-tab entry per test; the NUnit upload had listed 870), six cmdlet-page links reworded for the help text. AppVeyor passed 218 of 218 on the PR (54834295) and on master (54834350).
  • 2026-10-04: The maintainer dropped Read the Docs: the docs stay on GitHub and the wiki is retired (Decision 9). Work package 3 committed locally on ai/docs-on-github (84328dc). The strict Read the Docs build prepared before stays unmerged on the local branch ai/read-the-docs.
  • 2026-10-04: Work package 4 committed locally on ai/manifest-version (678ff90), stacked on ai/docs-on-github: valid manifest (requires PowerShell 5.1), 36 cmdlets, version 5.0.0 everywhere (Decision 10), -PassThur alias. The AppVeyor test script, run locally in Windows PowerShell 5.1, passed: no docs drift, 0 broken links, current help file, 228 of 228 Pester tests. Test-ModuleManifest passes in Windows PowerShell 5.1 and PowerShell 7.6.1.
  • 2026-10-04: The maintainer opened #94 and #95, then chose to keep the wiki, generated from Docs, and to move CI from AppVeyor to GitHub Actions in one PR (Decision 11): committed locally on ai/github-actions, stacked on #95. Wiki.Tests.ps1 failed 25 of 25 before the exporter existed and passes in both editions; Invoke-Tests.ps1 passed locally in Windows PowerShell 5.1 (253 of 253) and PowerShell 7 (217 passed, 36 skipped); actionlint found nothing.

Stable capabilities

  • 36 cmdlets: access (7), audit (5), inheritance (6), owner and security descriptor (4), privileges (3), long-path items (6), links, hash, and disk space (5).
  • Works in Windows PowerShell 5.1 and PowerShell 7 (smoke-tested), except Get-FileHash2, which fails in PowerShell 7 (missing RIPEMD160 type).

Open work

Work packages in the order agreed with the maintainer. Each gets one ai/<slug> branch and PR, committed locally. The maintainer pushes and opens the PR (the agent can't; see techContext.md, Constraints), and the next package starts only after the maintainer's go-ahead.

  1. Housekeeping: done (#92).
  2. Ship help: done (#93).
  3. Docs on GitHub (was: Read the Docs), PR #94: Read the Docs and MkDocs configuration removed, Docs/index.md renamed to Docs/README.md, the wiki's version history and install steps moved into Docs (with reconstructed notes for 4.2.5 and 4.2.6), contributor guide updated. Keep the wiki on: the GitHub Actions PR generates it from Docs, which also keeps the release-note links to wiki/Version-History working. Sup3rlativ3 may be asked to delete the Read the Docs project.
  4. Manifest and version, PR #95, stacked on #94 (merge #94 first with a merge commit). Maintainer decisions: PowerShellVersion 5.1, DotNetFrameworkVersion 4.5.2, RootModule; version 5.0.0; [Alias('PassThur')] on Remove-Item2 -PassThru, listed under Deprecated; NTFSSecurity, Security2, and PrivilegeControl carry the module version (Decision 10). Before the release, not part of the PR: set the date of the 5.0.0 section to the release date, tag 5.0.0 (no v prefix), build in Release, and clean C:\Program Files\WindowsPowerShell\Modules\NTFSSecurity before Publish-Module; releases so far were Debug builds published with the whole output folder (.pdb, .xml, System.Management.Automation.dll), and the removed NTFSSecurity-Help.xml would ship again. 4b. GitHub Actions for CI and the wiki (Decision 11), PR-ready on ai/github-actions, stacked on #95 (merge #94 and #95 first with merge commits). AppVeyor reports a failure on this PR because it removes appveyor.yml; that's expected. After the merge: delete the AppVeyor project raandree/ntfssecurity and revoke AppVeyor's GitHub access, check the first wiki publication, and consider Restrict editing to collaborators only for the wiki.
  5. Code defects, listed below: review: on, one PR per group, regression test first. Pester 5 tests import NTFSSecurity\bin\Release, run in a $env:TEMP sandbox and in the CI workflow (pattern: Tests\Help.Tests.ps1), and skip elevated cases when not elevated; check whether the GitHub Actions Windows runner runs elevated. Each fix updates its cmdlet page and CHANGELOG.md.

Code defects (work package 5)

Numbered as agreed with the maintainer; each is documented on its page.

A: Crashes and wrong results

  • (1) Set-NTFSInheritance reads an unset Nullable<bool> when -AccessInheritanceEnabled is omitted; omitted should mean unchanged.
  • (2) Get-ChildItem2 casts a file -Path to DirectoryInfo (InvalidCastException).
  • (3) Get-FileHash2 returns at a folder in -Path and skips the rest.
  • (4) Get-NTFSAudit re-emits the previous item's entries after a failed path, and returns nothing without the Security privilege instead of an error.
  • (5) Add-NTFSAudit: -Account and -AccessRights share position 2; use 2 and 3 like Remove-NTFSAudit.
  • (6) -PassThru returns access entries in Add-NTFSAudit SD sets and Remove-NTFSAudit Path sets.
  • (7) FileSystemAuditRule2.GetFileSystemAuditRules takes InheritanceEnabled from AreAccessRulesProtected.
  • (8) Get-NTFSInheritance -SecurityDescriptor reports AuditInheritanceEnabled = $true without a SACL (Path set: $null).
  • (9) Get-NTFSOwner: the access-denied retry repeats the failing call, and the catch-all turns PipelineStoppedException into ReadSecurityError.
  • (10) Copy-Item2 fails on a folder with files (DirectoryNotFoundException).
  • (11) Disable-Privileges hits a null privileges field when EnablePrivileges = $false.
  • (12) The six inheritance cmdlets enable privileges unconditionally in BeginProcessing and leave them enabled.
  • (13) Format view Children2: the Inherits column uses IsInheritanceBlocked, so it always shows True for Get-ChildItem2.

B: Ignored parameters and parameter sets

  • (14) SD sets of Add-/Remove-NTFSAccess and Add-/Remove-NTFSAudit cannot resolve without -AppliesTo or the flag parameters.
  • (15) Get-NTFSEffectiveAccess: -ExcludeNoneAccessEntries has no effect, there is no output without -Path, and the SD set returns nothing.
  • (16) Get-NTFSOrphanedAccess, Get-NTFSOrphanedAudit, and Get-NTFSSimpleAccess ignore -Account and -SecurityDescriptor; Get-NTFSOrphanedAudit writes collections; SimpleFileSystemAccessRule has no format view.
  • (17) removeSpecific in Remove-NTFSAccess/Audit is never bound; Remove-NTFSAudit leaves appliesTo uninitialized.

C: Error handling

  • (18) Copy-Item2, Move-Item2, Remove-Item2: one failing path skips the rest of -Path (return instead of continue).
  • (19) Remove-NTFSAccess continues after a failed read and writes a second, misleading RemoveAceError.
  • (20) The inheritance cmdlets write -PassThru output in finally, even after a failure.
  • (21) New-NTFSHardLink says the target path exists when it doesn't.

D: Metadata and cosmetics

  • (22) Wrong or missing [OutputType] (Test-Path2, Get-FileHash2, Add-NTFSAudit, *-Item2, inheritance cmdlets); Enable-/Disable-Privileges -PassThru writes one collection; New-NTFSSymbolicLink -PassThru returns FileInfo for folder links.
  • (23) Typos: "Privliege" in the Get-NTFSEffectiveAccess warning; "are now enabled" in the Disable-Privileges verbose message.
  • (24) Dead code in RemoveItem2.cs and OtherCmdlets.cs.

E: Maintainer decisions before changing behavior

  • Clear-NTFSAccess -DisableInheritance discards inherited entries: keep that, or copy them?
  • Set-NTFSInheritance defaults are the opposite of the dedicated inheritance cmdlets: align?
  • The audit inheritance switches are named *AccessRules: add *AuditRules aliases?
  • Get-FileHash2 fails in PowerShell 7 (RIPEMD160): drop the algorithm there, load it lazily, or deprecate the cmdlet?