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 madeappveyor.ymlbuild the module and check the docs against that build (Decision 6); squash-merged as690d8dd. - 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.mdignored, Decision 7, Decisions moved todecisions/. - 2026-10-04: Work package 2 squash-merged as PR #93 (
14799fb): generated help file shipped (Decision 8), stale help files removed,FileListcomplete,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 onmaster(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 branchai/read-the-docs. - 2026-10-04: Work package 4 committed locally on
ai/manifest-version(678ff90), stacked onai/docs-on-github: valid manifest (requires PowerShell 5.1), 36 cmdlets, version 5.0.0 everywhere (Decision 10),-PassThuralias. 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-ModuleManifestpasses 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 onai/github-actions, stacked on #95.Wiki.Tests.ps1failed 25 of 25 before the exporter existed and passes in both editions;Invoke-Tests.ps1passed 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 (missingRIPEMD160type).
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.
- Housekeeping: done (#92).
- Ship help: done (#93).
- Docs on GitHub (was: Read the Docs), PR #94: Read the Docs and MkDocs
configuration removed,
Docs/index.mdrenamed toDocs/README.md, the wiki's version history and install steps moved intoDocs(with reconstructed notes for 4.2.5 and 4.2.6), contributor guide updated. Keep the wiki on: the GitHub Actions PR generates it fromDocs, which also keeps the release-note links towiki/Version-Historyworking.Sup3rlativ3may be asked to delete the Read the Docs project. - Manifest and version, PR #95, stacked on #94 (merge #94 first with a
merge commit).
Maintainer decisions:
PowerShellVersion5.1,DotNetFrameworkVersion4.5.2,RootModule; version 5.0.0;[Alias('PassThur')]onRemove-Item2 -PassThru, listed under Deprecated;NTFSSecurity,Security2, andPrivilegeControlcarry 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, tag5.0.0(novprefix), build in Release, and cleanC:\Program Files\WindowsPowerShell\Modules\NTFSSecuritybeforePublish-Module; releases so far were Debug builds published with the whole output folder (.pdb,.xml,System.Management.Automation.dll), and the removedNTFSSecurity-Help.xmlwould ship again. 4b. GitHub Actions for CI and the wiki (Decision 11), PR-ready onai/github-actions, stacked on #95 (merge #94 and #95 first with merge commits). AppVeyor reports a failure on this PR because it removesappveyor.yml; that's expected. After the merge: delete the AppVeyor projectraandree/ntfssecurityand revoke AppVeyor's GitHub access, check the first wiki publication, and consider Restrict editing to collaborators only for the wiki. - Code defects, listed below:
review: on, one PR per group, regression test first. Pester 5 tests importNTFSSecurity\bin\Release, run in a$env:TEMPsandbox 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 andCHANGELOG.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-NTFSInheritancereads an unsetNullable<bool>when-AccessInheritanceEnabledis omitted; omitted should mean unchanged. - (2)
Get-ChildItem2casts a file-PathtoDirectoryInfo(InvalidCastException). - (3)
Get-FileHash2returns at a folder in-Pathand skips the rest. - (4)
Get-NTFSAuditre-emits the previous item's entries after a failed path, and returns nothing without the Security privilege instead of an error. - (5)
Add-NTFSAudit:-Accountand-AccessRightsshare position 2; use 2 and 3 likeRemove-NTFSAudit. - (6)
-PassThrureturns access entries inAdd-NTFSAuditSD sets andRemove-NTFSAuditPath sets. - (7)
FileSystemAuditRule2.GetFileSystemAuditRulestakesInheritanceEnabledfromAreAccessRulesProtected. - (8)
Get-NTFSInheritance -SecurityDescriptorreportsAuditInheritanceEnabled = $truewithout a SACL (Path set:$null). - (9)
Get-NTFSOwner: the access-denied retry repeats the failing call, and the catch-all turnsPipelineStoppedExceptionintoReadSecurityError. - (10)
Copy-Item2fails on a folder with files (DirectoryNotFoundException). - (11)
Disable-Privilegeshits a nullprivilegesfield whenEnablePrivileges = $false. - (12) The six inheritance cmdlets enable privileges unconditionally in
BeginProcessingand leave them enabled. - (13) Format view
Children2: theInheritscolumn usesIsInheritanceBlocked, so it always showsTrueforGet-ChildItem2.
B: Ignored parameters and parameter sets
- (14) SD sets of
Add-/Remove-NTFSAccessandAdd-/Remove-NTFSAuditcannot resolve without-AppliesToor the flag parameters. - (15)
Get-NTFSEffectiveAccess:-ExcludeNoneAccessEntrieshas no effect, there is no output without-Path, and the SD set returns nothing. - (16)
Get-NTFSOrphanedAccess,Get-NTFSOrphanedAudit, andGet-NTFSSimpleAccessignore-Accountand-SecurityDescriptor;Get-NTFSOrphanedAuditwrites collections;SimpleFileSystemAccessRulehas no format view. - (17)
removeSpecificinRemove-NTFSAccess/Auditis never bound;Remove-NTFSAuditleavesappliesTouninitialized.
C: Error handling
- (18)
Copy-Item2,Move-Item2,Remove-Item2: one failing path skips the rest of-Path(returninstead ofcontinue). - (19)
Remove-NTFSAccesscontinues after a failed read and writes a second, misleadingRemoveAceError. - (20) The inheritance cmdlets write
-PassThruoutput infinally, even after a failure. - (21)
New-NTFSHardLinksays 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 -PassThruwrites one collection;New-NTFSSymbolicLink -PassThrureturnsFileInfofor folder links. - (23) Typos: "Privliege" in the
Get-NTFSEffectiveAccesswarning; "are now enabled" in theDisable-Privilegesverbose message. - (24) Dead code in
RemoveItem2.csandOtherCmdlets.cs.
E: Maintainer decisions before changing behavior
Clear-NTFSAccess -DisableInheritancediscards inherited entries: keep that, or copy them?Set-NTFSInheritancedefaults are the opposite of the dedicated inheritance cmdlets: align?- The audit inheritance switches are named
*AccessRules: add*AuditRulesaliases? Get-FileHash2fails in PowerShell 7 (RIPEMD160): drop the algorithm there, load it lazily, or deprecate the cmdlet?