Ai/docs alignment (#91)
* chore: initialize the memory bank
Add the canonical .memory-bank base with evidence-based project context:
purpose and scope, workflows, stack and validation commands, architecture
map, decisions, and the open work found while documenting the cmdlets.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* docs: align documentation with the cmdlet source
- Fill all 36 platyPS cmdlet pages from the C# source: synopsis,
description, parameters, defaults, examples, inputs, outputs, and
notes, including documented limitations of the current code
- Check every example against live parameter metadata and run them in a
sandbox; fix examples that did not work (CSV restore, account filter,
recursive inheritance, -AccessRights typos)
- Rewrite the home, concepts, examples, README, and contributor pages;
add a grouped cmdlet overview, module settings, privileges, long paths,
and the platyPS workflow
- Document Remove-Item2 -PassThru as renamed after 4.2.6 (#64)
- Fix mkdocs.yml navigation, edit_uri, and copyright markup; add
build.os and a pinned MkDocs version for Read the Docs
- Point online help links to the pages on GitHub; add CHANGELOG.md
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* ci: build the module and check the docs against the build
The documentation check ran Update-MarkdownHelp against the NTFSSecurity
release from the PowerShell Gallery (4.2.6), so it failed for every
unreleased parameter change. PR #91 failed because 4.2.6 still has
Remove-Item2 -PassThur while the source and the docs have -PassThru.
- Build NTFSSecurity.csproj in Release on the Visual Studio 2022 image,
using the .NET Framework 4.5.2 reference assemblies package instead of
an installed targeting pack
- Check Docs/Cmdlets against the module built from source
- Pin platyPS 0.14.2 and MarkdownLinkCheck 0.2.0, and enable TLS 1.2 so
the NuGet provider bootstrap works
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* chore: record the green PR 91 build in the memory bank
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
# Changelog
|
|
|
|
|
|
|
|
|
|
All notable changes to this project are documented in this file.
|
|
|
|
|
|
|
|
|
|
The format is based on
|
|
|
|
|
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Releases up to
|
|
|
|
|
4.2.6 are described in the [version history](Docs/Version-History.md).
|
Ai/docs alignment (#91)
* chore: initialize the memory bank
Add the canonical .memory-bank base with evidence-based project context:
purpose and scope, workflows, stack and validation commands, architecture
map, decisions, and the open work found while documenting the cmdlets.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* docs: align documentation with the cmdlet source
- Fill all 36 platyPS cmdlet pages from the C# source: synopsis,
description, parameters, defaults, examples, inputs, outputs, and
notes, including documented limitations of the current code
- Check every example against live parameter metadata and run them in a
sandbox; fix examples that did not work (CSV restore, account filter,
recursive inheritance, -AccessRights typos)
- Rewrite the home, concepts, examples, README, and contributor pages;
add a grouped cmdlet overview, module settings, privileges, long paths,
and the platyPS workflow
- Document Remove-Item2 -PassThru as renamed after 4.2.6 (#64)
- Fix mkdocs.yml navigation, edit_uri, and copyright markup; add
build.os and a pinned MkDocs version for Read the Docs
- Point online help links to the pages on GitHub; add CHANGELOG.md
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* ci: build the module and check the docs against the build
The documentation check ran Update-MarkdownHelp against the NTFSSecurity
release from the PowerShell Gallery (4.2.6), so it failed for every
unreleased parameter change. PR #91 failed because 4.2.6 still has
Remove-Item2 -PassThur while the source and the docs have -PassThru.
- Build NTFSSecurity.csproj in Release on the Visual Studio 2022 image,
using the .NET Framework 4.5.2 reference assemblies package instead of
an installed targeting pack
- Check Docs/Cmdlets against the module built from source
- Pin platyPS 0.14.2 and MarkdownLinkCheck 0.2.0, and enable TLS 1.2 so
the NuGet provider bootstrap works
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* chore: record the green PR 91 build in the memory bank
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
|
|
|
|
|
## [Unreleased]
|
|
|
|
|
|
docs: generate the wiki pages from Docs
- .github/scripts/Export-WikiContent.ps1 converts Docs, except the
contributor guide, into flat wiki pages: Docs/README.md becomes Home,
cmdlet pages lose their platyPS metadata, links point to wiki pages or
to the files on GitHub, and links in code stay unchanged. It writes a
sidebar from the cmdlet groups of Docs/README.md, a footer, and the
former page How-to-install, and keeps the page name Version-History
that the release notes link to.
- Tests/Wiki.Tests.ps1 checks the conversion rules with a sample of Docs
and every link and anchor of the wiki generated from the real Docs.
- README, CHANGELOG, and the version history mention the wiki again.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
### Added
|
|
|
|
|
|
|
|
|
|
- Publish the documentation in the
|
|
|
|
|
[wiki](https://github.com/raandree/NTFSSecurity/wiki), generated from the
|
|
|
|
|
`Docs` folder after every change, with a sidebar that lists all cmdlets
|
ci: publish releases from CI on a version tag, starting with 5.0.0-rc1
Pushing a tag such as 5.0.0 or 5.0.0-rc1 on master now publishes the
package that the build job built and tested to the PowerShell Gallery
and creates the GitHub release with NTFSSecurity.zip.
- New-ModulePackage.ps1 copies only the FileList files of the Release
build, so no debug symbols, XML documentation, or copy of
System.Management.Automation.dll ship. It builds the nupkg with
Compress-PSResource and adds the command tags (PSIncludes_Cmdlet,
PSCmdlet_*, PSCommand_*) that PSResourceGet leaves out and that the
Gallery uses to list cmdlets and that Find-Command searches. Every CI
run builds and uploads the packages.
- Get-ReleaseInfo.ps1 returns the version and release notes: a dated
CHANGELOG section for a release, the [Unreleased] section for a
prerelease.
- The release job checks that the tag matches the manifest version and
points to a commit on master, reads the API key from the environment
powershell-gallery, and skips steps already done, so a rerun is safe.
- The manifest gets the prerelease label rc1 and a release notes link;
the 5.0.0 changelog entries move back to [Unreleased] until the final
release.
- Tests/Release.Tests.ps1 covers both scripts and the packages; the
changelog check moves there from Manifest.Tests.ps1.
- Docs/Contributing/05-Releasing.md describes the one-time setup and the
release steps; Docs/README.md explains -AllowPrerelease.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
- Link the release notes in the PowerShell Gallery to this changelog
|
feat!: prepare version 5.0.0 with a valid module manifest
- Require Windows PowerShell 5.1 or PowerShell 7 (PowerShellVersion
5.1, which CompatiblePSEditions needs) and .NET Framework 4.5.2, and
use RootModule instead of the deprecated ModuleToProcess. Before,
Test-ModuleManifest, and with it Publish-Module, failed.
- Export exactly the 36 cmdlets: remove Show-NTFSSimpleAccess, which no
longer exists, and the duplicate inheritance cmdlets.
- Keep -PassThur, the name in 4.2.6 and earlier, as an alias of
Remove-Item2 -PassThru, deprecated in the changelog.
- Set version 5.0.0 in the manifest, in NTFSSecurity, Security2, and
PrivilegeControl, and in a new 5.0.0 section of CHANGELOG.md.
- Tests/Manifest.Tests.ps1 and Tests/Remove-Item2.Tests.ps1 guard the
manifest, the versions, and the alias.
BREAKING CHANGE: the module requires Windows PowerShell 5.1 or
PowerShell 7; the manifest no longer claims PowerShell 2.0.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
|
Ai/docs alignment (#91)
* chore: initialize the memory bank
Add the canonical .memory-bank base with evidence-based project context:
purpose and scope, workflows, stack and validation commands, architecture
map, decisions, and the open work found while documenting the cmdlets.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* docs: align documentation with the cmdlet source
- Fill all 36 platyPS cmdlet pages from the C# source: synopsis,
description, parameters, defaults, examples, inputs, outputs, and
notes, including documented limitations of the current code
- Check every example against live parameter metadata and run them in a
sandbox; fix examples that did not work (CSV restore, account filter,
recursive inheritance, -AccessRights typos)
- Rewrite the home, concepts, examples, README, and contributor pages;
add a grouped cmdlet overview, module settings, privileges, long paths,
and the platyPS workflow
- Document Remove-Item2 -PassThru as renamed after 4.2.6 (#64)
- Fix mkdocs.yml navigation, edit_uri, and copyright markup; add
build.os and a pinned MkDocs version for Read the Docs
- Point online help links to the pages on GitHub; add CHANGELOG.md
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* ci: build the module and check the docs against the build
The documentation check ran Update-MarkdownHelp against the NTFSSecurity
release from the PowerShell Gallery (4.2.6), so it failed for every
unreleased parameter change. PR #91 failed because 4.2.6 still has
Remove-Item2 -PassThur while the source and the docs have -PassThru.
- Build NTFSSecurity.csproj in Release on the Visual Studio 2022 image,
using the .NET Framework 4.5.2 reference assemblies package instead of
an installed targeting pack
- Check Docs/Cmdlets against the module built from source
- Pin platyPS 0.14.2 and MarkdownLinkCheck 0.2.0, and enable TLS 1.2 so
the NuGet provider bootstrap works
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* chore: record the green PR 91 build in the memory bank
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
### Changed
|
|
|
|
|
|
feat!: prepare version 5.0.0 with a valid module manifest
- Require Windows PowerShell 5.1 or PowerShell 7 (PowerShellVersion
5.1, which CompatiblePSEditions needs) and .NET Framework 4.5.2, and
use RootModule instead of the deprecated ModuleToProcess. Before,
Test-ModuleManifest, and with it Publish-Module, failed.
- Export exactly the 36 cmdlets: remove Show-NTFSSimpleAccess, which no
longer exists, and the duplicate inheritance cmdlets.
- Keep -PassThur, the name in 4.2.6 and earlier, as an alias of
Remove-Item2 -PassThru, deprecated in the changelog.
- Set version 5.0.0 in the manifest, in NTFSSecurity, Security2, and
PrivilegeControl, and in a new 5.0.0 section of CHANGELOG.md.
- Tests/Manifest.Tests.ps1 and Tests/Remove-Item2.Tests.ps1 guard the
manifest, the versions, and the alias.
BREAKING CHANGE: the module requires Windows PowerShell 5.1 or
PowerShell 7; the manifest no longer claims PowerShell 2.0.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
- **Breaking:** require Windows PowerShell 5.1 or PowerShell 7, and declare
|
|
|
|
|
support for both editions in the module manifest
|
|
|
|
|
([#61](https://github.com/raandree/NTFSSecurity/issues/61)); the manifest
|
|
|
|
|
declared PowerShell 2.0 and .NET Framework 3.5, although the module needs
|
|
|
|
|
.NET Framework 4.5.2
|
|
|
|
|
- Rename the `-PassThur` parameter of `Remove-Item2` to `-PassThru`;
|
|
|
|
|
`-PassThur` still works as an alias
|
|
|
|
|
([#64](https://github.com/raandree/NTFSSecurity/pull/64))
|
ci: publish releases from CI on a version tag, starting with 5.0.0-rc1
Pushing a tag such as 5.0.0 or 5.0.0-rc1 on master now publishes the
package that the build job built and tested to the PowerShell Gallery
and creates the GitHub release with NTFSSecurity.zip.
- New-ModulePackage.ps1 copies only the FileList files of the Release
build, so no debug symbols, XML documentation, or copy of
System.Management.Automation.dll ship. It builds the nupkg with
Compress-PSResource and adds the command tags (PSIncludes_Cmdlet,
PSCmdlet_*, PSCommand_*) that PSResourceGet leaves out and that the
Gallery uses to list cmdlets and that Find-Command searches. Every CI
run builds and uploads the packages.
- Get-ReleaseInfo.ps1 returns the version and release notes: a dated
CHANGELOG section for a release, the [Unreleased] section for a
prerelease.
- The release job checks that the tag matches the manifest version and
points to a commit on master, reads the API key from the environment
powershell-gallery, and skips steps already done, so a rerun is safe.
- The manifest gets the prerelease label rc1 and a release notes link;
the 5.0.0 changelog entries move back to [Unreleased] until the final
release.
- Tests/Release.Tests.ps1 covers both scripts and the packages; the
changelog check moves there from Manifest.Tests.ps1.
- Docs/Contributing/05-Releasing.md describes the one-time setup and the
release steps; Docs/README.md explains -AllowPrerelease.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
- Publish the module as a Release build that contains only the module
|
|
|
|
|
files; 4.2.6 was a Debug build with debug symbols and a copy of
|
|
|
|
|
`System.Management.Automation.dll`
|
Ai/docs alignment (#91)
* chore: initialize the memory bank
Add the canonical .memory-bank base with evidence-based project context:
purpose and scope, workflows, stack and validation commands, architecture
map, decisions, and the open work found while documenting the cmdlets.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* docs: align documentation with the cmdlet source
- Fill all 36 platyPS cmdlet pages from the C# source: synopsis,
description, parameters, defaults, examples, inputs, outputs, and
notes, including documented limitations of the current code
- Check every example against live parameter metadata and run them in a
sandbox; fix examples that did not work (CSV restore, account filter,
recursive inheritance, -AccessRights typos)
- Rewrite the home, concepts, examples, README, and contributor pages;
add a grouped cmdlet overview, module settings, privileges, long paths,
and the platyPS workflow
- Document Remove-Item2 -PassThru as renamed after 4.2.6 (#64)
- Fix mkdocs.yml navigation, edit_uri, and copyright markup; add
build.os and a pinned MkDocs version for Read the Docs
- Point online help links to the pages on GitHub; add CHANGELOG.md
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* ci: build the module and check the docs against the build
The documentation check ran Update-MarkdownHelp against the NTFSSecurity
release from the PowerShell Gallery (4.2.6), so it failed for every
unreleased parameter change. PR #91 failed because 4.2.6 still has
Remove-Item2 -PassThur while the source and the docs have -PassThru.
- Build NTFSSecurity.csproj in Release on the Visual Studio 2022 image,
using the .NET Framework 4.5.2 reference assemblies package instead of
an installed targeting pack
- Check Docs/Cmdlets against the module built from source
- Pin platyPS 0.14.2 and MarkdownLinkCheck 0.2.0, and enable TLS 1.2 so
the NuGet provider bootstrap works
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* chore: record the green PR 91 build in the memory bank
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
- Document every cmdlet with synopsis, description, parameters, examples,
|
|
|
|
|
inputs, outputs, and notes, checked against the source code
|
|
|
|
|
- Rewrite the home, concepts, examples, and contributor pages to match the
|
|
|
|
|
current cmdlets, including module settings, privileges, and long paths
|
|
|
|
|
- Move the version history and the installation instructions from the wiki
|
ci: publish releases from CI on a version tag, starting with 5.0.0-rc1
Pushing a tag such as 5.0.0 or 5.0.0-rc1 on master now publishes the
package that the build job built and tested to the PowerShell Gallery
and creates the GitHub release with NTFSSecurity.zip.
- New-ModulePackage.ps1 copies only the FileList files of the Release
build, so no debug symbols, XML documentation, or copy of
System.Management.Automation.dll ship. It builds the nupkg with
Compress-PSResource and adds the command tags (PSIncludes_Cmdlet,
PSCmdlet_*, PSCommand_*) that PSResourceGet leaves out and that the
Gallery uses to list cmdlets and that Find-Command searches. Every CI
run builds and uploads the packages.
- Get-ReleaseInfo.ps1 returns the version and release notes: a dated
CHANGELOG section for a release, the [Unreleased] section for a
prerelease.
- The release job checks that the tag matches the manifest version and
points to a commit on master, reads the API key from the environment
powershell-gallery, and skips steps already done, so a rerun is safe.
- The manifest gets the prerelease label rc1 and a release notes link;
the 5.0.0 changelog entries move back to [Unreleased] until the final
release.
- Tests/Release.Tests.ps1 covers both scripts and the packages; the
changelog check moves there from Manifest.Tests.ps1.
- Docs/Contributing/05-Releasing.md describes the one-time setup and the
release steps; Docs/README.md explains -AllowPrerelease.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
into the documentation, and complete the version history with the release
|
|
|
|
|
dates from the PowerShell Gallery, the missing notes for 4.2.2, 4.2.5, and
|
|
|
|
|
4.2.6, and detailed notes for 4.2.4
|
|
|
|
|
- Describe the module as a PowerShell module in the manifest, which the
|
|
|
|
|
PowerShell Gallery shows; it said Windows PowerShell, although the module
|
|
|
|
|
supports PowerShell 7 as well
|
|
|
|
|
- Rename `-RemoveInheritedAccessRules` of `Disable-NTFSAuditInheritance` to
|
|
|
|
|
`-RemoveInheritedAuditRules` and `-RemoveExplicitAccessRules` of
|
|
|
|
|
`Enable-NTFSAuditInheritance` to `-RemoveExplicitAuditRules`, because they
|
|
|
|
|
act on audit entries; the old names still work as aliases
|
|
|
|
|
- **Breaking:** `Set-NTFSInheritance` keeps entries like the dedicated
|
|
|
|
|
cmdlets: `-AccessInheritanceEnabled $false` now copies the inherited access
|
|
|
|
|
entries into the DACL instead of removing them, and
|
|
|
|
|
`-AuditInheritanceEnabled $true` now keeps the explicit audit entries. A
|
|
|
|
|
script that used `-AccessInheritanceEnabled $false` to drop the inherited
|
|
|
|
|
access entries now leaves them in place, which grants broader access than
|
|
|
|
|
before. To remove the entries, use
|
|
|
|
|
`Disable-NTFSAccessInheritance -RemoveInheritedAccessRules` or
|
|
|
|
|
`Enable-NTFSAuditInheritance -RemoveExplicitAuditRules`
|
|
|
|
|
- **Breaking:** `Get-ChildItem2 -Attributes` returns the items that have any
|
|
|
|
|
of the listed attributes, like `Get-ChildItem`; it returned only the items
|
|
|
|
|
that had all of them. A call that lists several attributes now returns
|
|
|
|
|
more items, including hidden and system items when those are in the
|
|
|
|
|
list, so review calls whose result is deleted or whose permissions are
|
|
|
|
|
changed. To get the old result, filter with `Where-Object`, as the cmdlet
|
|
|
|
|
page shows. An empty value, such as `0`, is now an error; it returned
|
|
|
|
|
every item, also the hidden ones
|
|
|
|
|
([#5](https://github.com/raandree/NTFSSecurity/issues/5))
|
|
|
|
|
- **Breaking:** remove the alias `Size` of `LengthOnDisk` from the files of
|
|
|
|
|
`Get-ChildItem`, which made the import fail in Windows PowerShell when
|
|
|
|
|
another module had added a `Size` member; use `LengthOnDisk`
|
|
|
|
|
([#82](https://github.com/raandree/NTFSSecurity/issues/82))
|
fix: write only the sections of the security descriptor that a cmdlet changes
The access and audit cmdlets wrote the owner of an item back with the
entries they changed. For a DACL without the auto-inherit flag, Windows
returns the owner and the group even when only the DACL is read, and the
cmdlets wrote every section that the descriptor held. Without the Restore
privilege, or on a file server that refuses the owner, the write failed
with error 1307 (#34).
- Add-NTFSAccess, Clear-NTFSAccess, Add-NTFSAudit, and Clear-NTFSAudit
read only the DACL or the SACL. FileSystemSecurity2.Write(),
Remove-NTFSAccess, and Remove-NTFSAudit write only the sections they
read, which also fixes the access inheritance cmdlets.
- Read together with the SACL, the inherited entries of such a DACL lose
their inherited flag when the parent folder has no SACL, and the
cmdlets stored them as explicit copies. Get-NTFSSecurityDescriptor now
reads the DACL in a separate call.
- Set-NTFSSecurityDescriptor writes only the sections that changed since
they were read; an unchanged descriptor writes nothing (maintainer
decision of 2026-10-06).
- Clear-NTFSAudit writes nothing for an item without a SACL, and reports
an error without the Security privilege (maintainer decision).
The regression tests failed before and pass after the fix in Windows
PowerShell 5.1 and PowerShell 7, elevated and as a basic user.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
- Write only the sections of a security descriptor that changed since it
|
|
|
|
|
was read in `Set-NTFSSecurityDescriptor`, such as the DACL after
|
|
|
|
|
`Add-NTFSAccess -SecurityDescriptor`; a descriptor without changes writes
|
|
|
|
|
nothing, and `-Verbose` names the sections that the cmdlet writes. The
|
|
|
|
|
cmdlet wrote every section that `Get-NTFSSecurityDescriptor` had read,
|
|
|
|
|
also an unchanged owner, which failed with error 1307 where the account
|
|
|
|
|
may not assign that owner
|
fix: write only the sections of the security descriptor that a cmdlet changes
The access and audit cmdlets wrote the owner of an item back with the
entries they changed. For a DACL without the auto-inherit flag, Windows
returns the owner and the group even when only the DACL is read, and the
cmdlets wrote every section that the descriptor held. Without the Restore
privilege, or on a file server that refuses the owner, the write failed
with error 1307 (#34).
- Add-NTFSAccess, Clear-NTFSAccess, Add-NTFSAudit, and Clear-NTFSAudit
read only the DACL or the SACL. FileSystemSecurity2.Write(),
Remove-NTFSAccess, and Remove-NTFSAudit write only the sections they
read, which also fixes the access inheritance cmdlets.
- Read together with the SACL, the inherited entries of such a DACL lose
their inherited flag when the parent folder has no SACL, and the
cmdlets stored them as explicit copies. Get-NTFSSecurityDescriptor now
reads the DACL in a separate call.
- Set-NTFSSecurityDescriptor writes only the sections that changed since
they were read; an unchanged descriptor writes nothing (maintainer
decision of 2026-10-06).
- Clear-NTFSAudit writes nothing for an item without a SACL, and reports
an error without the Security privilege (maintainer decision).
The regression tests failed before and pass after the fix in Windows
PowerShell 5.1 and PowerShell 7, elevated and as a basic user.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
([#34](https://github.com/raandree/NTFSSecurity/issues/34))
|
Ai/docs alignment (#91)
* chore: initialize the memory bank
Add the canonical .memory-bank base with evidence-based project context:
purpose and scope, workflows, stack and validation commands, architecture
map, decisions, and the open work found while documenting the cmdlets.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* docs: align documentation with the cmdlet source
- Fill all 36 platyPS cmdlet pages from the C# source: synopsis,
description, parameters, defaults, examples, inputs, outputs, and
notes, including documented limitations of the current code
- Check every example against live parameter metadata and run them in a
sandbox; fix examples that did not work (CSV restore, account filter,
recursive inheritance, -AccessRights typos)
- Rewrite the home, concepts, examples, README, and contributor pages;
add a grouped cmdlet overview, module settings, privileges, long paths,
and the platyPS workflow
- Document Remove-Item2 -PassThru as renamed after 4.2.6 (#64)
- Fix mkdocs.yml navigation, edit_uri, and copyright markup; add
build.os and a pinned MkDocs version for Read the Docs
- Point online help links to the pages on GitHub; add CHANGELOG.md
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* ci: build the module and check the docs against the build
The documentation check ran Update-MarkdownHelp against the NTFSSecurity
release from the PowerShell Gallery (4.2.6), so it failed for every
unreleased parameter change. PR #91 failed because 4.2.6 still has
Remove-Item2 -PassThur while the source and the docs have -PassThru.
- Build NTFSSecurity.csproj in Release on the Visual Studio 2022 image,
using the .NET Framework 4.5.2 reference assemblies package instead of
an installed targeting pack
- Check Docs/Cmdlets against the module built from source
- Pin platyPS 0.14.2 and MarkdownLinkCheck 0.2.0, and enable TLS 1.2 so
the NuGet provider bootstrap works
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* chore: record the green PR 91 build in the memory bank
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
|
feat!: prepare version 5.0.0 with a valid module manifest
- Require Windows PowerShell 5.1 or PowerShell 7 (PowerShellVersion
5.1, which CompatiblePSEditions needs) and .NET Framework 4.5.2, and
use RootModule instead of the deprecated ModuleToProcess. Before,
Test-ModuleManifest, and with it Publish-Module, failed.
- Export exactly the 36 cmdlets: remove Show-NTFSSimpleAccess, which no
longer exists, and the duplicate inheritance cmdlets.
- Keep -PassThur, the name in 4.2.6 and earlier, as an alias of
Remove-Item2 -PassThru, deprecated in the changelog.
- Set version 5.0.0 in the manifest, in NTFSSecurity, Security2, and
PrivilegeControl, and in a new 5.0.0 section of CHANGELOG.md.
- Tests/Manifest.Tests.ps1 and Tests/Remove-Item2.Tests.ps1 guard the
manifest, the versions, and the alias.
BREAKING CHANGE: the module requires Windows PowerShell 5.1 or
PowerShell 7; the manifest no longer claims PowerShell 2.0.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
### Deprecated
|
|
|
|
|
|
|
|
|
|
- Deprecate NTFSSecurity as a whole: the project will be archived soon.
|
|
|
|
|
Move to
|
|
|
|
|
[WindowsAccessControl](https://github.com/raandree/WindowsAccessControl),
|
fix: write only the sections of the security descriptor that a cmdlet changes
The access and audit cmdlets wrote the owner of an item back with the
entries they changed. For a DACL without the auto-inherit flag, Windows
returns the owner and the group even when only the DACL is read, and the
cmdlets wrote every section that the descriptor held. Without the Restore
privilege, or on a file server that refuses the owner, the write failed
with error 1307 (#34).
- Add-NTFSAccess, Clear-NTFSAccess, Add-NTFSAudit, and Clear-NTFSAudit
read only the DACL or the SACL. FileSystemSecurity2.Write(),
Remove-NTFSAccess, and Remove-NTFSAudit write only the sections they
read, which also fixes the access inheritance cmdlets.
- Read together with the SACL, the inherited entries of such a DACL lose
their inherited flag when the parent folder has no SACL, and the
cmdlets stored them as explicit copies. Get-NTFSSecurityDescriptor now
reads the DACL in a separate call.
- Set-NTFSSecurityDescriptor writes only the sections that changed since
they were read; an unchanged descriptor writes nothing (maintainer
decision of 2026-10-06).
- Clear-NTFSAudit writes nothing for an item without a SACL, and reports
an error without the Security privilege (maintainer decision).
The regression tests failed before and pass after the fix in Windows
PowerShell 5.1 and PowerShell 7, elevated and as a basic user.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
which is also on the PowerShell Gallery. The description of NTFSSecurity
|
|
|
|
|
in the PowerShell Gallery says so as well
|
feat!: prepare version 5.0.0 with a valid module manifest
- Require Windows PowerShell 5.1 or PowerShell 7 (PowerShellVersion
5.1, which CompatiblePSEditions needs) and .NET Framework 4.5.2, and
use RootModule instead of the deprecated ModuleToProcess. Before,
Test-ModuleManifest, and with it Publish-Module, failed.
- Export exactly the 36 cmdlets: remove Show-NTFSSimpleAccess, which no
longer exists, and the duplicate inheritance cmdlets.
- Keep -PassThur, the name in 4.2.6 and earlier, as an alias of
Remove-Item2 -PassThru, deprecated in the changelog.
- Set version 5.0.0 in the manifest, in NTFSSecurity, Security2, and
PrivilegeControl, and in a new 5.0.0 section of CHANGELOG.md.
- Tests/Manifest.Tests.ps1 and Tests/Remove-Item2.Tests.ps1 guard the
manifest, the versions, and the alias.
BREAKING CHANGE: the module requires Windows PowerShell 5.1 or
PowerShell 7; the manifest no longer claims PowerShell 2.0.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
- Deprecate the `-PassThur` alias of `Remove-Item2`; use `-PassThru`
|
|
|
|
|
- Deprecate the `MACTripleDES` value of `Get-FileHash2 -Algorithm`: it uses
|
|
|
|
|
a random key, so its result differs on every call; the cmdlet now warns
|
|
|
|
|
when you use it
|
feat!: prepare version 5.0.0 with a valid module manifest
- Require Windows PowerShell 5.1 or PowerShell 7 (PowerShellVersion
5.1, which CompatiblePSEditions needs) and .NET Framework 4.5.2, and
use RootModule instead of the deprecated ModuleToProcess. Before,
Test-ModuleManifest, and with it Publish-Module, failed.
- Export exactly the 36 cmdlets: remove Show-NTFSSimpleAccess, which no
longer exists, and the duplicate inheritance cmdlets.
- Keep -PassThur, the name in 4.2.6 and earlier, as an alias of
Remove-Item2 -PassThru, deprecated in the changelog.
- Set version 5.0.0 in the manifest, in NTFSSecurity, Security2, and
PrivilegeControl, and in a new 5.0.0 section of CHANGELOG.md.
- Tests/Manifest.Tests.ps1 and Tests/Remove-Item2.Tests.ps1 guard the
manifest, the versions, and the alias.
BREAKING CHANGE: the module requires Windows PowerShell 5.1 or
PowerShell 7; the manifest no longer claims PowerShell 2.0.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
|
Ai/docs alignment (#91)
* chore: initialize the memory bank
Add the canonical .memory-bank base with evidence-based project context:
purpose and scope, workflows, stack and validation commands, architecture
map, decisions, and the open work found while documenting the cmdlets.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* docs: align documentation with the cmdlet source
- Fill all 36 platyPS cmdlet pages from the C# source: synopsis,
description, parameters, defaults, examples, inputs, outputs, and
notes, including documented limitations of the current code
- Check every example against live parameter metadata and run them in a
sandbox; fix examples that did not work (CSV restore, account filter,
recursive inheritance, -AccessRights typos)
- Rewrite the home, concepts, examples, README, and contributor pages;
add a grouped cmdlet overview, module settings, privileges, long paths,
and the platyPS workflow
- Document Remove-Item2 -PassThru as renamed after 4.2.6 (#64)
- Fix mkdocs.yml navigation, edit_uri, and copyright markup; add
build.os and a pinned MkDocs version for Read the Docs
- Point online help links to the pages on GitHub; add CHANGELOG.md
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* ci: build the module and check the docs against the build
The documentation check ran Update-MarkdownHelp against the NTFSSecurity
release from the PowerShell Gallery (4.2.6), so it failed for every
unreleased parameter change. PR #91 failed because 4.2.6 still has
Remove-Item2 -PassThur while the source and the docs have -PassThru.
- Build NTFSSecurity.csproj in Release on the Visual Studio 2022 image,
using the .NET Framework 4.5.2 reference assemblies package instead of
an installed targeting pack
- Check Docs/Cmdlets against the module built from source
- Pin platyPS 0.14.2 and MarkdownLinkCheck 0.2.0, and enable TLS 1.2 so
the NuGet provider bootstrap works
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* chore: record the green PR 91 build in the memory bank
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
### Fixed
|
|
|
|
|
|
fix(help): ship the generated help file so Get-Help works (#93)
* fix(help): ship the generated help file so Get-Help works
Get-Help showed only the syntax of the cmdlets: the module shipped a
pre-4.x MAML file for the old command names under the wrong name
(NTFSSecurity-Help.xml), while PowerShell looks for
en-US\NTFSSecurity.dll-Help.xml.
- Generate en-US\NTFSSecurity.dll-Help.xml from Docs/Cmdlets with
New-ExternalHelp and commit it. The csproj copies it to the output,
so every build ships it, including the local Debug builds that
releases are published from.
- List all runtime files, including the help file, in FileList.
- Remove the stale NTFSSecurity-Help.xml and the unused help editor
project NTFSSecurity\Help\NTFSSecurity.Help.pshproj.
- Add Tests\Help.Tests.ps1 (Pester 5): Get-Help shows the synopsis,
parameters, examples, and online link of every page, and
Get-Help -Online resolves to the GitHub page.
- Reword six sentences in five cmdlet pages so that each link ends its
sentence: platyPS drops the space after a link in the help text.
- CI regenerates the help file and fails when it differs from the
committed file, then runs the Pester tests.
- Document the regeneration step and the link rule in the contributor
guide.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* ci: report each Pester test once on AppVeyor
AppVeyor build 54834154 passed all 218 Pester tests but listed 870 on
its Tests tab: the NUnit import files a Pester 5 test under every block
that contains it (Pester, test file, Describe, and Context).
Report the results through the build worker API instead
(POST api/tests/batch): one entry per test with its outcome, duration,
and error message. Outside AppVeyor, and when no test ran, the step
sends nothing.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
- Fix `Get-Help`, which showed only the syntax: ship the help file
|
|
|
|
|
`en-US\NTFSSecurity.dll-Help.xml` generated from the cmdlet documentation,
|
|
|
|
|
including the links that `Get-Help -Online` opens, instead of the outdated
|
|
|
|
|
`NTFSSecurity-Help.xml`
|
Ai/docs alignment (#91)
* chore: initialize the memory bank
Add the canonical .memory-bank base with evidence-based project context:
purpose and scope, workflows, stack and validation commands, architecture
map, decisions, and the open work found while documenting the cmdlets.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* docs: align documentation with the cmdlet source
- Fill all 36 platyPS cmdlet pages from the C# source: synopsis,
description, parameters, defaults, examples, inputs, outputs, and
notes, including documented limitations of the current code
- Check every example against live parameter metadata and run them in a
sandbox; fix examples that did not work (CSV restore, account filter,
recursive inheritance, -AccessRights typos)
- Rewrite the home, concepts, examples, README, and contributor pages;
add a grouped cmdlet overview, module settings, privileges, long paths,
and the platyPS workflow
- Document Remove-Item2 -PassThru as renamed after 4.2.6 (#64)
- Fix mkdocs.yml navigation, edit_uri, and copyright markup; add
build.os and a pinned MkDocs version for Read the Docs
- Point online help links to the pages on GitHub; add CHANGELOG.md
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* ci: build the module and check the docs against the build
The documentation check ran Update-MarkdownHelp against the NTFSSecurity
release from the PowerShell Gallery (4.2.6), so it failed for every
unreleased parameter change. PR #91 failed because 4.2.6 still has
Remove-Item2 -PassThur while the source and the docs have -PassThru.
- Build NTFSSecurity.csproj in Release on the Visual Studio 2022 image,
using the .NET Framework 4.5.2 reference assemblies package instead of
an installed targeting pack
- Check Docs/Cmdlets against the module built from source
- Pin platyPS 0.14.2 and MarkdownLinkCheck 0.2.0, and enable TLS 1.2 so
the NuGet provider bootstrap works
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* chore: record the green PR 91 build in the memory bank
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
- Fix documentation examples that did not work, such as restoring
|
|
|
|
|
permissions from a CSV file and filtering entries by account
|
feat!: prepare version 5.0.0 with a valid module manifest
- Require Windows PowerShell 5.1 or PowerShell 7 (PowerShellVersion
5.1, which CompatiblePSEditions needs) and .NET Framework 4.5.2, and
use RootModule instead of the deprecated ModuleToProcess. Before,
Test-ModuleManifest, and with it Publish-Module, failed.
- Export exactly the 36 cmdlets: remove Show-NTFSSimpleAccess, which no
longer exists, and the duplicate inheritance cmdlets.
- Keep -PassThur, the name in 4.2.6 and earlier, as an alias of
Remove-Item2 -PassThru, deprecated in the changelog.
- Set version 5.0.0 in the manifest, in NTFSSecurity, Security2, and
PrivilegeControl, and in a new 5.0.0 section of CHANGELOG.md.
- Tests/Manifest.Tests.ps1 and Tests/Remove-Item2.Tests.ps1 guard the
manifest, the versions, and the alias.
BREAKING CHANGE: the module requires Windows PowerShell 5.1 or
PowerShell 7; the manifest no longer claims PowerShell 2.0.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
- Remove `Show-NTFSSimpleAccess`, which no longer exists, and duplicate
|
|
|
|
|
entries from the cmdlets that the module manifest exports and the
|
|
|
|
|
PowerShell Gallery lists
|
|
|
|
|
- Fix `Set-NTFSInheritance`, which failed with "Nullable object must have a
|
|
|
|
|
value" when `-AccessInheritanceEnabled` or `-AuditInheritanceEnabled` was
|
|
|
|
|
omitted; an omitted parameter now leaves its section unchanged
|
|
|
|
|
- Fix `Get-ChildItem2`, which stopped with an `InvalidCastException` when
|
|
|
|
|
`-Path` pointed to a file; it now returns the file, like `Get-ChildItem`
|
|
|
|
|
- Fix `Get-FileHash2`, which stopped at a folder in `-Path` and didn't hash
|
|
|
|
|
the files that followed it; folders are now skipped
|
|
|
|
|
- Fix `Get-NTFSAudit`, which returned nothing without the Security privilege
|
|
|
|
|
instead of an error, and which returned the entries of the previous item
|
|
|
|
|
again after a path whose security descriptor it couldn't read; it also no
|
|
|
|
|
longer takes ownership of an item whose audit entries it can't read, which
|
|
|
|
|
didn't help and could leave the owner changed
|
|
|
|
|
- Fix `Get-NTFSAccess`, which returned the entries of the previous item again
|
|
|
|
|
after a path whose ACL it couldn't read
|
|
|
|
|
- Fix `Add-NTFSAudit`, whose `-Account` and `-AccessRights` parameters were
|
|
|
|
|
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
|
|
|
|
|
- Fix the `InheritanceEnabled` property of audit entries, which reported the
|
|
|
|
|
inheritance of the access entries; it now reports whether the audit
|
|
|
|
|
entries are inherited
|
|
|
|
|
- Fix `Get-NTFSInheritance -SecurityDescriptor`, which reported
|
|
|
|
|
`AuditInheritanceEnabled` as `$true` for a security descriptor that was
|
|
|
|
|
read without its audit section; it now reports `$null`, like `-Path`
|
|
|
|
|
- Fix `Get-NTFSOwner`, which wrote a "The pipeline has been stopped" error
|
|
|
|
|
for every path when a command such as `Select-Object -First 1` stopped the
|
|
|
|
|
pipeline, and which repeated a failed read instead of reporting the
|
|
|
|
|
denied access
|
|
|
|
|
- Fix `Copy-Item2`, which failed with a `DirectoryNotFoundException` when it
|
|
|
|
|
copied a folder that contained files
|
|
|
|
|
- Fix `Disable-Privileges`, which couldn't disable the privileges when the
|
|
|
|
|
module setting `EnablePrivileges` was `$false`
|
|
|
|
|
- Fix the inheritance cmdlets, which enabled the Backup, Restore, Take
|
|
|
|
|
Ownership, and Security privileges even when the module setting
|
|
|
|
|
`EnablePrivileges` was `$false`, and left them enabled
|
|
|
|
|
- Fix the `Inherits` column of the `Get-ChildItem2` output, which showed
|
|
|
|
|
`True` for every item, also for items whose inheritance is disabled
|
fix: resolve the security descriptor sets without -AppliesTo
Defect 14. Add-NTFSAccess, Remove-NTFSAccess, Add-NTFSAudit, and
Remove-NTFSAudit have the sets PathSimple, PathComplex, SDSimple, and
SDComplex; the default PathComplex needs -Path. A command with
-SecurityDescriptor and without -AppliesTo, -InheritanceFlags, or
-PropagationFlags matched both SD sets and failed with "Parameter set
cannot be resolved". -AppliesTo is now mandatory in the Simple sets, so
such a command resolves to the Complex set and its default flags
(ContainerInherit, ObjectInherit / None, which is what AppliesTo
ThisFolderSubfoldersAndFiles means), as a command with -Path already did.
With -AppliesTo nothing changes.
The pages say "Required: True" for -AppliesTo and drop its never
reachable defaults; platyPS takes that metadata from the shipped help
file, so the help file was regenerated before the build.
Tests/Access.Tests.ps1: 6 tests on in-memory security descriptors.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
- Fix `Add-NTFSAccess`, `Remove-NTFSAccess`, `Add-NTFSAudit`, and
|
|
|
|
|
`Remove-NTFSAudit`, which failed with "Parameter set cannot be resolved"
|
|
|
|
|
for `-SecurityDescriptor` without `-AppliesTo`, `-InheritanceFlags`, or
|
|
|
|
|
`-PropagationFlags`; `-AppliesTo` is now mandatory in the `Simple`
|
|
|
|
|
parameter sets, so such a command uses the flag parameters and their
|
|
|
|
|
defaults, as for a path
|
|
|
|
|
- Fix `Get-NTFSEffectiveAccess`: `-ExcludeNoneAccessEntries` now leaves out
|
|
|
|
|
items without access, the cmdlet uses the current location when `-Path`
|
|
|
|
|
is omitted, and `-SecurityDescriptor` returns the effective access of the
|
|
|
|
|
security descriptor; before, all three returned nothing or ignored the
|
|
|
|
|
parameter
|
|
|
|
|
- Fix `Get-NTFSOrphanedAccess`, `Get-NTFSOrphanedAudit`, and
|
|
|
|
|
`Get-NTFSSimpleAccess`, which ignored `-Account` and `-SecurityDescriptor`;
|
|
|
|
|
`Get-NTFSOrphanedAudit` now writes one object per entry instead of one
|
|
|
|
|
collection per item, `Get-NTFSOrphanedAccess` no longer repeats the entries
|
|
|
|
|
of the previous item after a failed read, and the output of
|
|
|
|
|
`Get-NTFSSimpleAccess` has a table view
|
|
|
|
|
- Restore the `-RemoveSpecific` switch of `Remove-NTFSAccess`, which version
|
|
|
|
|
4.1 introduced but later versions lacked, and add it to `Remove-NTFSAudit`:
|
|
|
|
|
with it, the cmdlets remove only an entry that matches exactly
|
|
|
|
|
- Fix `Copy-Item2`, `Move-Item2`, and `Remove-Item2`, which skipped the
|
|
|
|
|
remaining paths of `-Path` after a path that didn't exist or, for copy and
|
|
|
|
|
move, a file that already existed at the destination
|
|
|
|
|
- Fix `Remove-NTFSAccess` and `Remove-NTFSAudit`, which went on with a path
|
|
|
|
|
that didn't exist, wrote a second, misleading `RemoveAceError`, and with
|
|
|
|
|
`-PassThru` stopped with a `NullReferenceException`
|
|
|
|
|
- Fix `-PassThru` of `Enable-NTFSAccessInheritance`,
|
|
|
|
|
`Disable-NTFSAccessInheritance`, `Enable-NTFSAuditInheritance`,
|
|
|
|
|
`Disable-NTFSAuditInheritance`, and `Set-NTFSInheritance`, which returned
|
|
|
|
|
the unchanged state of an item also when the change failed, so that the
|
|
|
|
|
inheritance looked disabled
|
|
|
|
|
([#74](https://github.com/raandree/NTFSSecurity/issues/74))
|
|
|
|
|
- Fix the error of `New-NTFSHardLink` for a missing `-Target`, which said
|
|
|
|
|
that the target path existed
|
|
|
|
|
- Fix `Get-FileHash2`, which wrote a result for a file that it couldn't
|
|
|
|
|
read, with the hash of the previous file
|
|
|
|
|
- Fix `-PassThru` of `Add-NTFSAccess`, `Add-NTFSAudit`, `Remove-NTFSAccess`,
|
|
|
|
|
and `Remove-NTFSAudit`, which returned the unchanged entries of an item
|
|
|
|
|
also when the change failed
|
|
|
|
|
- Fix the cmdlets that take ownership of an item to repeat an operation that
|
|
|
|
|
was denied: when the second attempt failed as well, the account that ran
|
|
|
|
|
the cmdlet stayed the owner of the item; now the previous owner is restored
|
|
|
|
|
- Fix `-PassThru` of `Enable-Privileges` and `Disable-Privileges`, which
|
|
|
|
|
wrote the privileges as one collection instead of one object per
|
|
|
|
|
privilege, and of `New-NTFSSymbolicLink`, which returned a file object for
|
|
|
|
|
a link to a folder
|
|
|
|
|
- Declare the output types of `Test-Path2`, `Get-FileHash2`,
|
|
|
|
|
`Add-NTFSAudit`, `Remove-NTFSAudit`, `Copy-Item2`, `Move-Item2`,
|
|
|
|
|
`Remove-Item2`, and the inheritance cmdlets correctly, so that
|
|
|
|
|
`Get-Command` and tab completion report the objects they write
|
|
|
|
|
- Fix the verbose messages of `Copy-Item2` and `Move-Item2`, which named the
|
|
|
|
|
source path as the destination, and of `Disable-Privileges`, which said
|
|
|
|
|
that the privileges were enabled, and the spelling of the privilege in
|
|
|
|
|
the warning of `Get-NTFSEffectiveAccess`
|
|
|
|
|
- Fix `-PassThru` of `Copy-Item2`, `Move-Item2`, and `Remove-Item2`, which
|
|
|
|
|
wrote the item also when `-WhatIf` or a declined confirmation skipped the
|
|
|
|
|
operation
|
|
|
|
|
- Fix `Get-FileHash2` in PowerShell 7, where it failed for every algorithm;
|
|
|
|
|
`RIPEMD160` and `MACTripleDES`, which .NET lacks there, now stop the
|
|
|
|
|
cmdlet with an error that names the algorithm and points to Windows
|
|
|
|
|
PowerShell 5.1
|
|
|
|
|
- Fix a `FormatException` in the cmdlets for a path with braces, such as
|
|
|
|
|
`C:\Data\{Archive}`: their messages formatted the path a second time
|
|
|
|
|
([#3](https://github.com/raandree/NTFSSecurity/issues/3))
|
|
|
|
|
- Fix a `NullReferenceException` in every cmdlet when a variable named
|
|
|
|
|
`PWD` in the scope of the caller, such as a loop variable, hid the
|
|
|
|
|
automatic variable; the cmdlets now read the current location from the
|
|
|
|
|
session, and only for a relative path
|
|
|
|
|
([#86](https://github.com/raandree/NTFSSecurity/issues/86))
|
|
|
|
|
- Fix file and folder objects passed by position, such as
|
|
|
|
|
`Get-NTFSOwner $folder`, which Windows PowerShell bound as the name of the
|
|
|
|
|
item, so the cmdlets looked for it in the current location
|
|
|
|
|
([#88](https://github.com/raandree/NTFSSecurity/issues/88))
|
|
|
|
|
- Fix `Remove-NTFSAccess` for an entry with a generic right such as
|
|
|
|
|
`GenericAll`, which Windows keeps in the inherit-only entries of folders;
|
|
|
|
|
it failed with "The value '269484032' is not valid"
|
|
|
|
|
([#17](https://github.com/raandree/NTFSSecurity/issues/17))
|
fix: change the audit inheritance of items without audit entries
Enable-NTFSAuditInheritance, Disable-NTFSAuditInheritance, and
Set-NTFSInheritance -AuditInheritanceEnabled failed with "(5) Access is
denied" for a file or folder without a SACL, also elevated with the
Security privilege. The cmdlets read only the audit section and changed
the flag that disables or enables audit inheritance. AlphaFS writes that
flag only together with a SACL, so it wrote no section at all, which
Windows denies; the retry as owner repeated the same write. An empty SACL
is now added first, but only to a descriptor that was read with its SACL.
The elevated CI runs of #100 to #106 showed this through the test of an
omitted -AccessInheritanceEnabled. From #104 on, the test that keeps the
inherited entries of a security descriptor failed as well: elevated,
Get-NTFSSecurityDescriptor reads the SACL, and Windows then returns a DACL
that isn't in the auto-inherit format, such as that of a file in the temp
folder of the user, without its inherited flags. The test now reads the
access section only and checks that the descriptor has inherited entries.
Tests: five cases for items without audit entries, red with "Access is
denied" before the fix; the test that keeps the explicit audit entries now
checks the errors and the inheritance state of both calls; a test checks
that a descriptor read without its audit entries gets no SACL, which would
replace the audit entries of the item when it is written.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
- Fix `Enable-NTFSAuditInheritance`, `Disable-NTFSAuditInheritance`, and
|
|
|
|
|
`Set-NTFSInheritance -AuditInheritanceEnabled`, which failed with "Access
|
|
|
|
|
is denied" for a file or folder without audit entries, also in an elevated
|
|
|
|
|
session with the Security privilege
|
fix: write only the sections of the security descriptor that a cmdlet changes
The access and audit cmdlets wrote the owner of an item back with the
entries they changed. For a DACL without the auto-inherit flag, Windows
returns the owner and the group even when only the DACL is read, and the
cmdlets wrote every section that the descriptor held. Without the Restore
privilege, or on a file server that refuses the owner, the write failed
with error 1307 (#34).
- Add-NTFSAccess, Clear-NTFSAccess, Add-NTFSAudit, and Clear-NTFSAudit
read only the DACL or the SACL. FileSystemSecurity2.Write(),
Remove-NTFSAccess, and Remove-NTFSAudit write only the sections they
read, which also fixes the access inheritance cmdlets.
- Read together with the SACL, the inherited entries of such a DACL lose
their inherited flag when the parent folder has no SACL, and the
cmdlets stored them as explicit copies. Get-NTFSSecurityDescriptor now
reads the DACL in a separate call.
- Set-NTFSSecurityDescriptor writes only the sections that changed since
they were read; an unchanged descriptor writes nothing (maintainer
decision of 2026-10-06).
- Clear-NTFSAudit writes nothing for an item without a SACL, and reports
an error without the Security privilege (maintainer decision).
The regression tests failed before and pass after the fix in Windows
PowerShell 5.1 and PowerShell 7, elevated and as a basic user.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
- Fix `Add-NTFSAccess`, `Remove-NTFSAccess`, `Clear-NTFSAccess`,
|
|
|
|
|
`Add-NTFSAudit`, `Clear-NTFSAudit`, `Enable-NTFSAccessInheritance`,
|
|
|
|
|
`Disable-NTFSAccessInheritance`, and `Set-NTFSInheritance`, which wrote the
|
|
|
|
|
owner of an item back with the entries they changed; where the account may
|
|
|
|
|
not assign that owner, such as on some file servers, they failed with
|
|
|
|
|
"(1307) This security ID may not be assigned as the owner of this object".
|
|
|
|
|
They now write only the DACL or the SACL
|
|
|
|
|
([#34](https://github.com/raandree/NTFSSecurity/issues/34))
|
|
|
|
|
- Fix `Add-NTFSAccess`, `Add-NTFSAudit`, and `Clear-NTFSAudit`, which in an
|
|
|
|
|
elevated session could store the inherited access entries of an item as
|
|
|
|
|
explicit entries, and `Get-NTFSSecurityDescriptor`, which could return
|
|
|
|
|
them without their inherited flag, so that `Set-NTFSSecurityDescriptor`
|
|
|
|
|
stored them as explicit entries as well
|
|
|
|
|
- Fix `Clear-NTFSAudit`, which finished without an error but changed nothing
|
|
|
|
|
in a session without the Security privilege; it now writes an error, like
|
|
|
|
|
the other audit cmdlets
|
|
|
|
|
- Fix the cmdlets for the root of a drive, such as `C:\`, or of a volume,
|
|
|
|
|
such as `\\?\Volume{GUID}\`, which read and changed the security
|
|
|
|
|
descriptor of the drive, a device object, instead of that of its root
|
|
|
|
|
folder, so that `Get-NTFSAccess` showed other entries than Explorer
|
|
|
|
|
([#41](https://github.com/raandree/NTFSSecurity/issues/41))
|
fix: drive roots, audit descriptors, -WhatIf conflicts, and small items
- #41: for the root of a drive, the cmdlets read and changed the security
descriptor of the drive, a device object. FileSystemSecurity2 now routes
drive roots through the path-based AlphaFS methods, which keep the
trailing backslash; the removal and inheritance helpers use it too.
- #109: Add-, Remove-, and Clear-NTFSAudit report a security descriptor
without the audit entries like Get-NTFSAudit, through one helper, and
Get-NTFSEffectiveAccess names the cause that Windows reported instead
of a missing Security privilege.
- #108: Copy-Item2 and Move-Item2 check the destination only for an
operation that runs; with -WhatIf, a verbose message names the conflict.
- #111: Disable-Privileges skips the privileges that the token doesn't
hold, the privilege messages are spelled right, and Get-FileHash2
declares the type name of its objects; 05-Releasing.md documents the
release metadata tests.
- rc3 review leftovers: Remove-NTFSAudit writes nothing for an item
without a SACL, the owner retry of Set-NTFSSecurityDescriptor restores
the previous owner in a finally block and keeps an owner that the
descriptor sets, and FileSystemSecurity2.Write with another item writes
only the sections that were read.
Each fix has a test that failed first, in Windows PowerShell 5.1 and
PowerShell 7; writing a drive root was checked once on a temporary VHD.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
- Fix `Add-NTFSAudit`, `Remove-NTFSAudit`, and `Clear-NTFSAudit` with a
|
|
|
|
|
security descriptor that was read without the audit entries; they now
|
|
|
|
|
write an error like `Get-NTFSAudit` instead of changing the missing entries
|
|
|
|
|
without one ([#109](https://github.com/raandree/NTFSSecurity/issues/109))
|
|
|
|
|
- Fix `Get-NTFSEffectiveAccess`, which blamed a missing Security privilege
|
|
|
|
|
for every failure while the privilege wasn't enabled; the error now names
|
|
|
|
|
the cause that Windows reported
|
|
|
|
|
([#109](https://github.com/raandree/NTFSSecurity/issues/109))
|
|
|
|
|
- Fix `Copy-Item2` and `Move-Item2`, which wrote an error with `-WhatIf` when
|
|
|
|
|
the destination file existed, so that `-WhatIf -ErrorAction Stop` stopped
|
|
|
|
|
the preview; they now name the existing file in a verbose message
|
|
|
|
|
([#108](https://github.com/raandree/NTFSSecurity/issues/108))
|
|
|
|
|
- Fix `Remove-NTFSAudit`, which failed with "(5) Access is denied" for a file
|
|
|
|
|
or folder without audit entries
|
|
|
|
|
- Fix `Set-NTFSSecurityDescriptor`, which set the previous owner back after it
|
|
|
|
|
had taken ownership to write a descriptor that sets a new owner, so that
|
|
|
|
|
the new owner was lost or the write failed with error 1307
|
|
|
|
|
- Fix the `Write` method of a `Security2.FileSystemSecurity2` object for
|
|
|
|
|
another item, which wrote every section of the descriptor, also an owner
|
|
|
|
|
that Windows returns with the DACL; it now writes the sections that the
|
|
|
|
|
descriptor was read with
|
|
|
|
|
([#34](https://github.com/raandree/NTFSSecurity/issues/34))
|
|
|
|
|
- Fix `Disable-Privileges`, which warned that it couldn't disable the
|
|
|
|
|
privileges that the access token doesn't hold, and the declared output type
|
|
|
|
|
of `Get-FileHash2`, which named the AlphaFS `FileInfo` instead of the type
|
|
|
|
|
name of its objects
|
|
|
|
|
([#111](https://github.com/raandree/NTFSSecurity/issues/111))
|
|
|
|
|
- Fix `Get-NTFSEffectiveAccess`, which returned no access when the computer
|
|
|
|
|
of `-ServerName` couldn't be reached, although it warned that it had
|
|
|
|
|
calculated the result on this computer; it now returns that result
|
fix: return false from Test-Path2 for a path with invalid characters
In Windows PowerShell, .NET rejects a path with a character that Windows
doesn't allow in names, such as | or <, and Test-Path2 stopped with the
terminating error "Illegal characters in path". Such an item can't
exist, so the cmdlet now writes false, as in PowerShell 7 and like
Test-Path. Add tests for every -PathType, long paths, relative paths,
and the pipeline, and for Get-DiskSpace, which had no tests.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
3 weeks ago
|
|
|
- Fix `Test-Path2`, which stopped with the terminating error "Illegal
|
|
|
|
|
characters in path" in Windows PowerShell for a path with a character
|
|
|
|
|
that Windows doesn't allow in names, such as `|`; it now returns `$false`
|
|
|
|
|
for such a path, as in PowerShell 7, and writes the reason as a debug
|
|
|
|
|
message
|
|
|
|
|
- Fix the cmdlets that enable the Backup, Restore, Take Ownership, and
|
|
|
|
|
Security privileges, which left them enabled in the session when a later
|
|
|
|
|
command, such as `Select-Object -First`, or a terminating error stopped
|
|
|
|
|
the pipeline early; they now disable them also then
|
fix: disable the privileges by their current state when a cmdlet ends
A cmdlet that enables the Backup, Restore, Take Ownership, and Security
privileges decided which ones to disable on the states that it had read
when it enabled them, and stopped at the first one that failed. When
another command in the pipeline, such as Disable-Privileges, had disabled
one of them, the cmdlet stopped with "Priviledge already disabled" and
left the privileges after that one enabled. After an early stop, which
Dispose handles since this branch, it left them enabled without any
message, because PowerShell ignores exceptions thrown in Dispose; and
Disable-Privileges threw that exception in Dispose on every call while
the privileges were disabled. 4.2.6 already decided on the old states.
DisablePrivilege now reads the current state, and the cleanup tries every
privilege: in EndProcessing, a privilege that it can't disable gives a
warning; in Dispose, it is ignored.
The early-stop tests now pin EnablePrivileges and check that the cmdlet
had enabled the privileges, so that they can't pass without testing
anything.
Found by the security review of fcb370e..00c3646 (findings 1 to 3).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
3 weeks ago
|
|
|
- Fix the cmdlets that enable the privileges, which stopped with the error
|
|
|
|
|
"Priviledge already disabled" and left the other privileges enabled when
|
|
|
|
|
another command in the pipeline, such as `Disable-Privileges`, had
|
|
|
|
|
disabled one of them; a privilege that they can't disable now gives a
|
|
|
|
|
warning, and they still disable the others
|
fix: report ReadData and the parent of a relative path in Get-NTFSSimpleAccess
Two deviations from the cmdlet page, found by new tests from its
contract:
- An entry that grants only ReadData became None: the reduction tested
the combined Read mask, and nothing mapped ReadData alone. .NET adds
Synchronize to every allow entry, which hid it; other tools write such
entries.
- With -IncludeRootFolder, on by default, a relative path with a single
folder name had no parent folder in the result, because the parent was
taken from the path before it was resolved.
The tests also cover the rights reduction, the comparison of folders
with their parent, the pipeline, the current location, -ExcludeExplicit,
files, and missing paths, elevated and as a basic user in both editions.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
3 weeks ago
|
|
|
- Fix `Get-NTFSSimpleAccess`, which showed no rights for an entry that
|
|
|
|
|
grants only `ReadData`, and which left out the parent folder of a
|
|
|
|
|
relative path with a single folder name, although `-IncludeRootFolder` is
|
|
|
|
|
on by default
|
Ai/docs alignment (#91)
* chore: initialize the memory bank
Add the canonical .memory-bank base with evidence-based project context:
purpose and scope, workflows, stack and validation commands, architecture
map, decisions, and the open work found while documenting the cmdlets.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* docs: align documentation with the cmdlet source
- Fill all 36 platyPS cmdlet pages from the C# source: synopsis,
description, parameters, defaults, examples, inputs, outputs, and
notes, including documented limitations of the current code
- Check every example against live parameter metadata and run them in a
sandbox; fix examples that did not work (CSV restore, account filter,
recursive inheritance, -AccessRights typos)
- Rewrite the home, concepts, examples, README, and contributor pages;
add a grouped cmdlet overview, module settings, privileges, long paths,
and the platyPS workflow
- Document Remove-Item2 -PassThru as renamed after 4.2.6 (#64)
- Fix mkdocs.yml navigation, edit_uri, and copyright markup; add
build.os and a pinned MkDocs version for Read the Docs
- Point online help links to the pages on GitHub; add CHANGELOG.md
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* ci: build the module and check the docs against the build
The documentation check ran Update-MarkdownHelp against the NTFSSecurity
release from the PowerShell Gallery (4.2.6), so it failed for every
unreleased parameter change. PR #91 failed because 4.2.6 still has
Remove-Item2 -PassThur while the source and the docs have -PassThru.
- Build NTFSSecurity.csproj in Release on the Visual Studio 2022 image,
using the .NET Framework 4.5.2 reference assemblies package instead of
an installed targeting pack
- Check Docs/Cmdlets against the module built from source
- Pin platyPS 0.14.2 and MarkdownLinkCheck 0.2.0, and enable TLS 1.2 so
the NuGet provider bootstrap works
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
* chore: record the green PR 91 build in the memory bank
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
|
ci: publish releases from CI on a version tag, starting with 5.0.0-rc1
Pushing a tag such as 5.0.0 or 5.0.0-rc1 on master now publishes the
package that the build job built and tested to the PowerShell Gallery
and creates the GitHub release with NTFSSecurity.zip.
- New-ModulePackage.ps1 copies only the FileList files of the Release
build, so no debug symbols, XML documentation, or copy of
System.Management.Automation.dll ship. It builds the nupkg with
Compress-PSResource and adds the command tags (PSIncludes_Cmdlet,
PSCmdlet_*, PSCommand_*) that PSResourceGet leaves out and that the
Gallery uses to list cmdlets and that Find-Command searches. Every CI
run builds and uploads the packages.
- Get-ReleaseInfo.ps1 returns the version and release notes: a dated
CHANGELOG section for a release, the [Unreleased] section for a
prerelease.
- The release job checks that the tag matches the manifest version and
points to a commit on master, reads the API key from the environment
powershell-gallery, and skips steps already done, so a rerun is safe.
- The manifest gets the prerelease label rc1 and a release notes link;
the 5.0.0 changelog entries move back to [Unreleased] until the final
release.
- Tests/Release.Tests.ps1 covers both scripts and the packages; the
changelog check moves there from Manifest.Tests.ps1.
- Docs/Contributing/05-Releasing.md describes the one-time setup and the
release steps; Docs/README.md explains -AllowPrerelease.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: AI Assistant <ai@example.com>
4 weeks ago
|
|
|
[Unreleased]: https://github.com/raandree/NTFSSecurity/compare/4.2.6...HEAD
|