diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
new file mode 100644
index 000000000..983234361
--- /dev/null
+++ b/.github/CODEOWNERS
@@ -0,0 +1,6 @@
+# Default owners
+* @andyleejordan @bergmeister
+
+# Version bumps and documentation updates
+Directory.Build.props @sdwheeler @michaeltlombardi
+/docs/ @sdwheeler @michaeltlombardi
diff --git a/.gitignore b/.gitignore
index 92c1621bd..fdf91a4bf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,226 +1,5 @@
-## Ignore Visual Studio temporary files, build results, and
-## files generated by popular Visual Studio add-ons.
-
-# User-specific files
-*.suo
-*.user
-*.userosscache
-*.sln.docstates
-
-# User-specific files (MonoDevelop/Xamarin Studio)
-*.userprefs
-
-# Build results
-[Dd]ebug/
-[Dd]ebugPublic/
-[Rr]elease/
-[Rr]eleases/
-x64/
-x86/
-build/
-bld/
-[Bb]in/
-[Oo]bj/
-
-# Visual Studo 2015 cache/options directory
-.vs/
-
-# VSCode configuration directory
-.vscode/
-
-# MSTest test Results
-[Tt]est[Rr]esult*/
-[Bb]uild[Ll]og.*
-
-# NUNIT
-*.VisualState.xml
-TestResult.xml
-
-# Build Results of an ATL Project
-[Dd]ebugPS/
-[Rr]eleasePS/
-dlldata.c
-
-# .Net Core CLI
-project.lock.json
-artifacts/
-
-*_i.c
-*_p.c
-*_i.h
-*.ilk
-*.meta
-*.obj
-*.pch
-*.pdb
-*.pgc
-*.pgd
-*.rsp
-*.sbr
-*.tlb
-*.tli
-*.tlh
-*.tmp
-*.tmp_proj
-*.log
-*.vspscc
-*.vssscc
-.builds
-*.pidb
-*.svclog
-*.scc
-
-# Chutzpah Test files
-_Chutzpah*
-
-# Visual C++ cache files
-ipch/
-*.aps
-*.ncb
-*.opensdf
-*.sdf
-*.cachefile
-
-# Visual Studio profiler
-*.psess
-*.vsp
-*.vspx
-
-# TFS 2012 Local Workspace
-$tf/
-
-# Guidance Automation Toolkit
-*.gpState
-
-# ReSharper is a .NET coding add-in
-_ReSharper*/
-*.[Rr]e[Ss]harper
-*.DotSettings.user
-
-# JustCode is a .NET coding addin-in
-.JustCode
-
-# TeamCity is a build add-in
-_TeamCity*
-
-# DotCover is a Code Coverage Tool
-*.dotCover
-
-# NCrunch
-_NCrunch_*
-.*crunch*.local.xml
-
-# MightyMoose
-*.mm.*
-AutoTest.Net/
-
-# Web workbench (sass)
-.sass-cache/
-
-# Installshield output folder
-[Ee]xpress/
-
-# DocProject is a documentation generator add-in
-DocProject/buildhelp/
-DocProject/Help/*.HxT
-DocProject/Help/*.HxC
-DocProject/Help/*.hhc
-DocProject/Help/*.hhk
-DocProject/Help/*.hhp
-DocProject/Help/Html2
-DocProject/Help/html
-
-# Click-Once directory
-publish/
-
-# Publish Web Output
-*.[Pp]ublish.xml
-*.azurePubxml
-# TODO: Comment the next line if you want to checkin your web deploy settings
-# but database connection strings (with potential passwords) will be unencrypted
-*.pubxml
-*.publishproj
-
-# NuGet Packages
-*.nupkg
-# The packages folder can be ignored because of Package Restore
-**/packages/*
-# except build/, which is used as an MSBuild target.
-!**/packages/build/
-# Uncomment if necessary however generally it will be regenerated when needed
-#!**/packages/repositories.config
-
-# Windows Azure Build Output
-csx/
-*.build.csdef
-
-# Windows Store app package directory
-AppPackages/
-
-# Visual Studio cache files
-# files ending in .cache can be ignored
-*.[Cc]ache
-# but keep track of directories ending in .cache
-!*.[Cc]ache/
-
-# Others
-ClientBin/
-[Ss]tyle[Cc]op.*
-~$*
-*~
-*.dbmdl
-*.dbproj.schemaview
-*.pfx
-*.publishsettings
-node_modules/
-bower_components/
-
-# RIA/Silverlight projects
-Generated_Code/
-
-# Backup & report files from converting an old project file
-# to a newer Visual Studio version. Backup files are not needed,
-# because we have git ;-)
-_UpgradeReport_Files/
-Backup*/
-UpgradeLog*.XML
-UpgradeLog*.htm
-
-# SQL Server files
-*.mdf
-*.ldf
-
-# Business Intelligence projects
-*.rdl.data
-*.bim.layout
-*.bim_*.settings
-
-# Microsoft Fakes
-FakesAssemblies/
-
-# Node.js Tools for Visual Studio
-.ntvs_analysis.dat
-
-# Visual Studio 6 build log
-*.plg
-
-# Visual Studio 6 workspace options file
-*.opt
-
-##Our project binplace location
-PSScriptAnalyzer/
-
-# Vim swap files
-*.swp
-
-# Test result file
-TestResults.xml
-
-# PSCompatibilityCollector module
-PSCompatibilityCollector/out/
-
-# Folder of build module
-out
-
-# Explicitely Include test dir
-!/Tests/**
+bin/
+obj/
+/module/
+/out/
+testResults.xml
diff --git a/.pipelines/PSScriptAnalyzer-Official.yml b/.pipelines/PSScriptAnalyzer-Official.yml
index 212aeaede..15bccd7f0 100644
--- a/.pipelines/PSScriptAnalyzer-Official.yml
+++ b/.pipelines/PSScriptAnalyzer-Official.yml
@@ -63,8 +63,8 @@ extends:
ob_outputDirectory: $(Build.SourcesDirectory)/out
steps:
- pwsh: |
- [xml]$xml = Get-Content Engine/Engine.csproj
- $version = $xml.SelectSingleNode(".//VersionPrefix")."#text"
+ [xml]$xml = Get-Content ./Directory.Build.props
+ $version = $xml.Project.PropertyGroup.ModuleVersion
Write-Output "##vso[task.setvariable variable=version;isOutput=true]$version"
name: package
displayName: Get version from project properties
diff --git a/Directory.Build.props b/Directory.Build.props
new file mode 100644
index 000000000..e05d0ecbe
--- /dev/null
+++ b/Directory.Build.props
@@ -0,0 +1,7 @@
+
+
+
+ 1.22.0
+ true
+
+
diff --git a/Directory.Packages.props b/Directory.Packages.props
new file mode 100644
index 000000000..e43bd7dfd
--- /dev/null
+++ b/Directory.Packages.props
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Engine/Engine.csproj b/Engine/Engine.csproj
index ccee3baee..3025c9a08 100644
--- a/Engine/Engine.csproj
+++ b/Engine/Engine.csproj
@@ -1,10 +1,10 @@
- 1.22.0
+ $(ModuleVersion)
net6;net462
Microsoft.Windows.PowerShell.ScriptAnalyzer
- 1.22.0
+ $(ModuleVersion)
Engine
Microsoft.Windows.PowerShell.ScriptAnalyzer
9.0
@@ -45,7 +45,7 @@
-
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
-
+
diff --git a/Rules/Rules.csproj b/Rules/Rules.csproj
index a9497824d..8fef9e969 100644
--- a/Rules/Rules.csproj
+++ b/Rules/Rules.csproj
@@ -1,10 +1,10 @@
- 1.22.0
+ $(ModuleVersion)
net6;net462
Microsoft.Windows.PowerShell.ScriptAnalyzer.BuiltinRules
- 1.22.0
+ $(ModuleVersion)
Rules
Microsoft.Windows.PowerShell.ScriptAnalyzer
true
@@ -17,15 +17,14 @@
-
-
-
-
-
+
+
+
+
-
+
diff --git a/Utils/ReleaseMaker.psm1 b/Utils/ReleaseMaker.psm1
deleted file mode 100644
index ac59dbb32..000000000
--- a/Utils/ReleaseMaker.psm1
+++ /dev/null
@@ -1,198 +0,0 @@
-Function Get-SolutionPath
-{
- Split-Path $PSScriptRoot -Parent
-}
-
-Function Get-ChangeLogPath
-{
- Join-Path (Get-SolutionPath) 'CHANGELOG.MD'
-}
-
-Function Get-EngineProjectPath
-{
- Join-Path (Get-SolutionPath) 'Engine'
-}
-
-Function Get-ModuleManifestPath
-{
- Join-Path (Get-EngineProjectPath) 'PSScriptAnalyzer.psd1'
-}
-
-Function New-Release
-{
- [CmdletBinding()]
- param($newVer, $oldVer)
-
- $isVersionGiven = $true
- if ($null -eq $newVer -or $null -eq $oldVer)
- {
- Write-Warning "Parameters are null. Checking changelog for version..."
- $isVersionGiven = $false
- }
-
- $solutionRoot = Get-SolutionPath
- $enginePath = Get-EngineProjectPath
- $versions = Get-VersionsFromChangeLog
- if ($versions.Count -le 2)
- {
- throw "This edge condition for the number versions less that 2 is not implemented."
- }
-
- if ($isVersionGiven)
- {
- Function Test-IfNotPresentInChangelog
- {
- param($extractedVersion, $inputVersion)
- if ($extractedVersion -ne $inputVersion)
- {
- throw ("Version {0} does not exist in changelog. Please update changelog." -f $inputVersion)
- }
- }
-
- Test-IfNotPresentInChangelog $versions[0] $newVer
- Test-IfNotPresentInChangelog $versions[1] $oldVer
- }
- else
- {
- $newVer = $versions[0]
- $oldVer = $versions[1]
- $caption = "Version Check"
- $query = "Is version {0} the next release and version {1} the previous release ?" -f $newVer,$oldVer
- [bool] $yesToAll = $false
- [bool] $noToAll = $false
-
- if (!$PSCmdlet.ShouldContinue($query, $caption, $false, [ref] $yesToAll, [ref] $noToAll))
- {
- return "Aborting..."
- }
- }
-
- # update version
- Update-Version $newVer $oldVer $solutionRoot
-
- # copy release notes from changelog to module manifest
- Update-ReleaseNotesInModuleManifest $newVer $oldVer
-
- # build the module
- New-ReleaseBuild
-}
-
-function Get-VersionsFromChangeLog
-{
- $moduleManifestPath = Get-ModuleManifestPath
- $changelogPath = Get-ChangeLogPath
- $matches = [regex]::new("\[(\d+\.\d+\.\d+)\]").Matches((get-content $changelogPath -raw))
- $versions = $matches | ForEach-Object {$_.Groups[1].Value}
- $versions
-}
-
-function New-ReleaseBuild
-{
- $solutionPath = Get-SolutionPath
- Push-Location $solutionPath
- try
- {
- if ( test-path out ) { remove-item out/ -recurse -force }
- .\build.ps1 -All -Configuration Release
- .\PSCompatibilityCollector\build.ps1 -Clean -Configuration Release
- Copy-Item -Recurse .\PSCompatibilityCollector\out\* .\out\
- }
- finally
- {
- Pop-Location
- }
-}
-
-function Update-ReleaseNotesInModuleManifest
-{
- [CmdletBinding()]
- param($newVer, $oldVer)
-
- $moduleManifestPath = Get-ModuleManifestPath
- Write-Verbose ("Module manifest: {0}" -f $moduleManifestPath)
- $changelogPath = Get-ChangeLogPath
- Write-Verbose ("CHANGELOG: {0}" -f $changelogPath)
- $changelogRegexPattern = "##\s\[{0}\].*\n((?:.*\n)+)##\s\[{1}\].*" `
- -f [regex]::Escape($newVer),[regex]::Escape($oldVer)
- $changelogRegex = [regex]::new($changelogRegexPattern)
- $matches = $changelogRegex.Match((get-content $changelogPath -raw))
- $changelogWithHyperlinks = $matches.Groups[1].Value.Trim()
-
- Write-Verbose 'CHANGELOG:'
- Write-Verbose $changelogWithHyperlinks
-
- # Remove hyperlinks from changelog to make is suitable for publishing on powershellgallery.com
- Write-Verbose "Removing hyperlinks from changelog"
- $changelog = Remove-MarkdownHyperlink $changelogWithHyperlinks
- Write-Verbose "CHANGELOG without hyperlinks:"
- Write-Verbose $changelog
-
- $releaseNotesPattern = `
- "(?ReleaseNotes\s*=\s*@')(?(?:.*\n)*)(?'@)"
- $replacement = "`${releaseNotesBegin}" `
- + [environment]::NewLine `
- + $changelog `
- + [environment]::NewLine `
- + "`${releaseNotesEnd}"
- $r = [regex]::new($releaseNotesPattern)
- $updatedManifestContent = $r.Replace([System.IO.File]::ReadAllText($moduleManifestPath), $replacement)
- Set-ContentUtf8NoBom $moduleManifestPath $updatedManifestContent
-}
-
-function Remove-MarkdownHyperlink
-{
- param($markdownContent)
- $markdownContent -replace "\[(.*?)\]\(.*?\)",'$1'
-}
-
-function Combine-Path
-{
- if ($args.Count -lt 2)
- {
- throw "give more 1 argument"
- }
-
- $path = Join-Path $args[0] $args[1]
- for ($k = 2; $k -lt $args.Count; $k++)
- {
- $path = Join-Path $path $args[$k]
- }
-
- $path
-}
-
-function Update-Version
-{
- param(
- [string] $newVer,
- [string] $oldVer,
- [string] $solutionPath
- )
-
- $ruleJson = Combine-Path $solutionPath 'Rules' 'Rules.csproj'
- $engineJson = Combine-Path $solutionPath 'Engine' 'Engine.csproj'
- $pssaManifest = Combine-Path $solutionPath 'Engine' 'PSScriptAnalyzer.psd1'
-
- Update-PatternInFile $ruleJson '"version": "{0}"' $oldVer $newVer
- Update-PatternInFile $ruleJson '"Engine": "{0}"' $oldVer $newVer
- Update-PatternInFile $engineJson '"version": "{0}"' $oldVer $newVer
- Update-PatternInFile $pssaManifest "ModuleVersion = '{0}'" $oldVer $newVer
-}
-
-function Update-PatternInFile
-{
- param ($path, $unformattedPattern, $oldVal, $newVal)
-
- $content = Get-Content $path
- $newcontent = $content -replace ($unformattedPattern -f $oldVal),($unformattedPattern -f $newVal)
- Set-ContentUtf8NoBom $path $newcontent
-}
-
-function Set-ContentUtf8NoBom {
- param($path, $content)
- $utfNoBom = [System.Text.UTF8Encoding]::new($false)
- [System.IO.File]::WriteAllLines($path, $content, $utfNoBom)
-}
-
-Export-ModuleMember -Function New-Release
-Export-ModuleMember -Function New-ReleaseBuild
diff --git a/build.psm1 b/build.psm1
index 6889f1b89..604c5d17e 100644
--- a/build.psm1
+++ b/build.psm1
@@ -7,8 +7,8 @@ $analyzerName = "PSScriptAnalyzer"
function Get-AnalyzerVersion
{
- [xml]$xml = Get-Content $([io.path]::Combine($projectRoot,"Engine","Engine.csproj"))
- $xml.SelectSingleNode(".//VersionPrefix")."#text"
+ [xml]$xml = Get-Content $([io.path]::Combine($projectRoot, "Directory.Build.props"))
+ $xml.Project.PropertyGroup.ModuleVersion
}
$analyzerVersion = Get-AnalyzerVersion
@@ -159,9 +159,15 @@ function Start-ScriptAnalyzerBuild
throw "Not in solution root"
}
+ # "Copy" the module file with the version placeholder replaced
+ $manifestContent = Get-Content -LiteralPath "$projectRoot\Engine\PSScriptAnalyzer.psd1" -Raw
+ $newManifestContent = $manifestContent -replace '{{ModuleVersion}}', $analyzerVersion
+ Set-Content -LiteralPath "$script:destinationDir\PSScriptAnalyzer.psd1" -Encoding utf8 -Value $newManifestContent
+
$itemsToCopyCommon = @(
- "$projectRoot\Engine\PSScriptAnalyzer.psd1", "$projectRoot\Engine\PSScriptAnalyzer.psm1",
- "$projectRoot\Engine\ScriptAnalyzer.format.ps1xml", "$projectRoot\Engine\ScriptAnalyzer.types.ps1xml"
+ "$projectRoot\Engine\PSScriptAnalyzer.psm1",
+ "$projectRoot\Engine\ScriptAnalyzer.format.ps1xml",
+ "$projectRoot\Engine\ScriptAnalyzer.types.ps1xml"
)
switch ($PSVersion)
diff --git a/docs/Cmdlets/Get-ScriptAnalyzerRule.md b/docs/Cmdlets/Get-ScriptAnalyzerRule.md
index 90366c5b0..a86d7d301 100644
--- a/docs/Cmdlets/Get-ScriptAnalyzerRule.md
+++ b/docs/Cmdlets/Get-ScriptAnalyzerRule.md
@@ -1,7 +1,6 @@
---
external help file: Microsoft.Windows.PowerShell.ScriptAnalyzer.dll-Help.xml
Module Name: PSScriptAnalyzer
-ms.custom: PSSA v1.22.0
ms.date: 10/07/2021
online version: https://learn.microsoft.com/powershell/module/psscriptanalyzer/get-scriptanalyzerrule?view=ps-modules&wt.mc_id=ps-gethelp
schema: 2.0.0
diff --git a/docs/Cmdlets/Invoke-Formatter.md b/docs/Cmdlets/Invoke-Formatter.md
index 88dd320ae..1ffb766ce 100644
--- a/docs/Cmdlets/Invoke-Formatter.md
+++ b/docs/Cmdlets/Invoke-Formatter.md
@@ -1,7 +1,6 @@
---
external help file: Microsoft.Windows.PowerShell.ScriptAnalyzer.dll-Help.xml
Module Name: PSScriptAnalyzer
-ms.custom: PSSA v1.22.0
ms.date: 10/07/2021
online version: https://learn.microsoft.com/powershell/module/psscriptanalyzer/invoke-formatter?view=ps-modules&wt.mc_id=ps-gethelp
schema: 2.0.0
diff --git a/docs/Cmdlets/Invoke-ScriptAnalyzer.md b/docs/Cmdlets/Invoke-ScriptAnalyzer.md
index 9d0195c86..4eb1bff5f 100644
--- a/docs/Cmdlets/Invoke-ScriptAnalyzer.md
+++ b/docs/Cmdlets/Invoke-ScriptAnalyzer.md
@@ -1,7 +1,6 @@
---
external help file: Microsoft.Windows.PowerShell.ScriptAnalyzer.dll-Help.xml
Module Name: PSScriptAnalyzer
-ms.custom: PSSA v1.22.0
ms.date: 10/07/2021
online version: https://learn.microsoft.com/powershell/module/psscriptanalyzer/invoke-scriptanalyzer?view=ps-modules&wt.mc_id=ps-gethelp
schema: 2.0.0
diff --git a/docs/Cmdlets/PSScriptAnalyzer.md b/docs/Cmdlets/PSScriptAnalyzer.md
index b7267e8b5..1434afdb8 100644
--- a/docs/Cmdlets/PSScriptAnalyzer.md
+++ b/docs/Cmdlets/PSScriptAnalyzer.md
@@ -4,7 +4,6 @@ Help Version: 1.22.0
Locale: en-US
Module Guid: d6245802-193d-4068-a631-8863a4342a18
Module Name: PSScriptAnalyzer
-ms.custom: PSSA v1.22.0
ms.date: 10/07/2021
---
diff --git a/docs/Rules/AlignAssignmentStatement.md b/docs/Rules/AlignAssignmentStatement.md
index e41bff7a1..c2709ac1a 100644
--- a/docs/Rules/AlignAssignmentStatement.md
+++ b/docs/Rules/AlignAssignmentStatement.md
@@ -1,6 +1,5 @@
---
description: Align assignment statement
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AlignAssignmentStatement
diff --git a/docs/Rules/AvoidAssignmentToAutomaticVariable.md b/docs/Rules/AvoidAssignmentToAutomaticVariable.md
index 572e9eb3a..f8203dc8e 100644
--- a/docs/Rules/AvoidAssignmentToAutomaticVariable.md
+++ b/docs/Rules/AvoidAssignmentToAutomaticVariable.md
@@ -1,6 +1,5 @@
---
description: Changing automatic variables might have undesired side effects
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidAssignmentToAutomaticVariable
diff --git a/docs/Rules/AvoidDefaultValueForMandatoryParameter.md b/docs/Rules/AvoidDefaultValueForMandatoryParameter.md
index ac5fdfc9c..19c9aa732 100644
--- a/docs/Rules/AvoidDefaultValueForMandatoryParameter.md
+++ b/docs/Rules/AvoidDefaultValueForMandatoryParameter.md
@@ -1,6 +1,5 @@
---
description: Avoid Default Value For Mandatory Parameter
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidDefaultValueForMandatoryParameter
diff --git a/docs/Rules/AvoidDefaultValueSwitchParameter.md b/docs/Rules/AvoidDefaultValueSwitchParameter.md
index 74e76bdc6..7cfbbc212 100644
--- a/docs/Rules/AvoidDefaultValueSwitchParameter.md
+++ b/docs/Rules/AvoidDefaultValueSwitchParameter.md
@@ -1,6 +1,5 @@
---
description: Switch Parameters Should Not Default To True
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidDefaultValueSwitchParameter
diff --git a/docs/Rules/AvoidExclaimOperator.md b/docs/Rules/AvoidExclaimOperator.md
index bafbc9d0e..11d078d6b 100644
--- a/docs/Rules/AvoidExclaimOperator.md
+++ b/docs/Rules/AvoidExclaimOperator.md
@@ -1,6 +1,5 @@
---
description: Avoid exclaim operator
-ms.custom: PSSA v1.22.0
ms.date: 03/26/2024
ms.topic: reference
title: AvoidExclaimOperator
diff --git a/docs/Rules/AvoidGlobalAliases.md b/docs/Rules/AvoidGlobalAliases.md
index 36c581ca6..5157ec6f1 100644
--- a/docs/Rules/AvoidGlobalAliases.md
+++ b/docs/Rules/AvoidGlobalAliases.md
@@ -1,6 +1,5 @@
---
description: Avoid global aliases.
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidGlobalAliases
diff --git a/docs/Rules/AvoidGlobalFunctions.md b/docs/Rules/AvoidGlobalFunctions.md
index ef267ef8b..f74b094cb 100644
--- a/docs/Rules/AvoidGlobalFunctions.md
+++ b/docs/Rules/AvoidGlobalFunctions.md
@@ -1,6 +1,5 @@
---
description: Avoid global functions and aliases
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidGlobalFunctions
diff --git a/docs/Rules/AvoidGlobalVars.md b/docs/Rules/AvoidGlobalVars.md
index 0edcd4753..7fa0f6d2f 100644
--- a/docs/Rules/AvoidGlobalVars.md
+++ b/docs/Rules/AvoidGlobalVars.md
@@ -1,6 +1,5 @@
---
description: No Global Variables
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidGlobalVars
diff --git a/docs/Rules/AvoidInvokingEmptyMembers.md b/docs/Rules/AvoidInvokingEmptyMembers.md
index d512601ad..6049e869b 100644
--- a/docs/Rules/AvoidInvokingEmptyMembers.md
+++ b/docs/Rules/AvoidInvokingEmptyMembers.md
@@ -1,6 +1,5 @@
---
description: Avoid Invoking Empty Members
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidInvokingEmptyMembers
diff --git a/docs/Rules/AvoidLongLines.md b/docs/Rules/AvoidLongLines.md
index 2dd94369a..cc2603c51 100644
--- a/docs/Rules/AvoidLongLines.md
+++ b/docs/Rules/AvoidLongLines.md
@@ -1,6 +1,5 @@
---
description: Avoid long lines
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidLongLines
diff --git a/docs/Rules/AvoidMultipleTypeAttributes.md b/docs/Rules/AvoidMultipleTypeAttributes.md
index f97d183c0..9ccd478c5 100644
--- a/docs/Rules/AvoidMultipleTypeAttributes.md
+++ b/docs/Rules/AvoidMultipleTypeAttributes.md
@@ -1,6 +1,5 @@
---
description: Avoid multiple type specifiers on parameters.
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidMultipleTypeAttributes
diff --git a/docs/Rules/AvoidNullOrEmptyHelpMessageAttribute.md b/docs/Rules/AvoidNullOrEmptyHelpMessageAttribute.md
index cee57e0e2..386c96050 100644
--- a/docs/Rules/AvoidNullOrEmptyHelpMessageAttribute.md
+++ b/docs/Rules/AvoidNullOrEmptyHelpMessageAttribute.md
@@ -1,6 +1,5 @@
---
description: Avoid using null or empty HelpMessage parameter attribute.
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidNullOrEmptyHelpMessageAttribute
diff --git a/docs/Rules/AvoidOverwritingBuiltInCmdlets.md b/docs/Rules/AvoidOverwritingBuiltInCmdlets.md
index cd7f9c3a6..1d94a618a 100644
--- a/docs/Rules/AvoidOverwritingBuiltInCmdlets.md
+++ b/docs/Rules/AvoidOverwritingBuiltInCmdlets.md
@@ -1,6 +1,5 @@
---
description: Avoid overwriting built in cmdlets
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidOverwritingBuiltInCmdlets
diff --git a/docs/Rules/AvoidSemicolonsAsLineTerminators.md b/docs/Rules/AvoidSemicolonsAsLineTerminators.md
index f6d0d69b7..4716238ce 100644
--- a/docs/Rules/AvoidSemicolonsAsLineTerminators.md
+++ b/docs/Rules/AvoidSemicolonsAsLineTerminators.md
@@ -1,6 +1,5 @@
---
description: Avoid semicolons as line terminators
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidSemicolonsAsLineTerminators
diff --git a/docs/Rules/AvoidShouldContinueWithoutForce.md b/docs/Rules/AvoidShouldContinueWithoutForce.md
index dba5e6857..189989a89 100644
--- a/docs/Rules/AvoidShouldContinueWithoutForce.md
+++ b/docs/Rules/AvoidShouldContinueWithoutForce.md
@@ -1,6 +1,5 @@
---
description: Avoid Using ShouldContinue Without Boolean Force Parameter
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidShouldContinueWithoutForce
diff --git a/docs/Rules/AvoidTrailingWhitespace.md b/docs/Rules/AvoidTrailingWhitespace.md
index 9740d429c..416948c3b 100644
--- a/docs/Rules/AvoidTrailingWhitespace.md
+++ b/docs/Rules/AvoidTrailingWhitespace.md
@@ -1,6 +1,5 @@
---
description: Avoid trailing whitespace
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidTrailingWhitespace
diff --git a/docs/Rules/AvoidUsingAllowUnencryptedAuthentication.md b/docs/Rules/AvoidUsingAllowUnencryptedAuthentication.md
index e8ba28167..20451e66f 100644
--- a/docs/Rules/AvoidUsingAllowUnencryptedAuthentication.md
+++ b/docs/Rules/AvoidUsingAllowUnencryptedAuthentication.md
@@ -1,6 +1,5 @@
---
description: Avoid sending credentials and secrets over unencrypted connections
-ms.custom: PSSA v1.22.0
ms.date: 02/28/2024
ms.topic: reference
title: AvoidUsingAllowUnencryptedAuthentication
diff --git a/docs/Rules/AvoidUsingBrokenHashAlgorithms.md b/docs/Rules/AvoidUsingBrokenHashAlgorithms.md
index a8fc60dc1..32bb464af 100644
--- a/docs/Rules/AvoidUsingBrokenHashAlgorithms.md
+++ b/docs/Rules/AvoidUsingBrokenHashAlgorithms.md
@@ -1,6 +1,5 @@
---
description: Avoid using broken hash algorithms
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidUsingBrokenHashAlgorithms
diff --git a/docs/Rules/AvoidUsingCmdletAliases.md b/docs/Rules/AvoidUsingCmdletAliases.md
index 25adb3767..48c914eec 100644
--- a/docs/Rules/AvoidUsingCmdletAliases.md
+++ b/docs/Rules/AvoidUsingCmdletAliases.md
@@ -1,6 +1,5 @@
---
description: Avoid Using Cmdlet Aliases or omitting the 'Get-' prefix.
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidUsingCmdletAliases
diff --git a/docs/Rules/AvoidUsingComputerNameHardcoded.md b/docs/Rules/AvoidUsingComputerNameHardcoded.md
index f15b69c06..83a60c950 100644
--- a/docs/Rules/AvoidUsingComputerNameHardcoded.md
+++ b/docs/Rules/AvoidUsingComputerNameHardcoded.md
@@ -1,6 +1,5 @@
---
description: Avoid Using ComputerName Hardcoded
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidUsingComputerNameHardcoded
diff --git a/docs/Rules/AvoidUsingConvertToSecureStringWithPlainText.md b/docs/Rules/AvoidUsingConvertToSecureStringWithPlainText.md
index fa6a0df0e..5a94d89a3 100644
--- a/docs/Rules/AvoidUsingConvertToSecureStringWithPlainText.md
+++ b/docs/Rules/AvoidUsingConvertToSecureStringWithPlainText.md
@@ -1,6 +1,5 @@
---
description: Avoid Using SecureString With Plain Text
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidUsingConvertToSecureStringWithPlainText
diff --git a/docs/Rules/AvoidUsingDeprecatedManifestFields.md b/docs/Rules/AvoidUsingDeprecatedManifestFields.md
index 32bc4d5b5..802304dfc 100644
--- a/docs/Rules/AvoidUsingDeprecatedManifestFields.md
+++ b/docs/Rules/AvoidUsingDeprecatedManifestFields.md
@@ -1,6 +1,5 @@
---
description: Avoid Using Deprecated Manifest Fields
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidUsingDeprecatedManifestFields
diff --git a/docs/Rules/AvoidUsingDoubleQuotesForConstantString.md b/docs/Rules/AvoidUsingDoubleQuotesForConstantString.md
index 002a72aca..19c83fad7 100644
--- a/docs/Rules/AvoidUsingDoubleQuotesForConstantString.md
+++ b/docs/Rules/AvoidUsingDoubleQuotesForConstantString.md
@@ -1,6 +1,5 @@
---
description: Avoid using double quotes if the string is constant.
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidUsingDoubleQuotesForConstantString
diff --git a/docs/Rules/AvoidUsingEmptyCatchBlock.md b/docs/Rules/AvoidUsingEmptyCatchBlock.md
index 8c944563f..198341758 100644
--- a/docs/Rules/AvoidUsingEmptyCatchBlock.md
+++ b/docs/Rules/AvoidUsingEmptyCatchBlock.md
@@ -1,6 +1,5 @@
---
description: Avoid Using Empty Catch Block
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidUsingEmptyCatchBlock
diff --git a/docs/Rules/AvoidUsingInvokeExpression.md b/docs/Rules/AvoidUsingInvokeExpression.md
index 570b51ac4..7779008ec 100644
--- a/docs/Rules/AvoidUsingInvokeExpression.md
+++ b/docs/Rules/AvoidUsingInvokeExpression.md
@@ -1,6 +1,5 @@
---
description: Avoid Using Invoke-Expression
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidUsingInvokeExpression
diff --git a/docs/Rules/AvoidUsingPlainTextForPassword.md b/docs/Rules/AvoidUsingPlainTextForPassword.md
index 3d2b9f6e0..c25123ec1 100644
--- a/docs/Rules/AvoidUsingPlainTextForPassword.md
+++ b/docs/Rules/AvoidUsingPlainTextForPassword.md
@@ -1,6 +1,5 @@
---
description: Avoid Using Plain Text For Password Parameter
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidUsingPlainTextForPassword
diff --git a/docs/Rules/AvoidUsingPositionalParameters.md b/docs/Rules/AvoidUsingPositionalParameters.md
index d968b9f6e..1a1b77d01 100644
--- a/docs/Rules/AvoidUsingPositionalParameters.md
+++ b/docs/Rules/AvoidUsingPositionalParameters.md
@@ -1,6 +1,5 @@
---
description: Avoid Using Positional Parameters
-ms.custom: PSSA v1.22.0
ms.date: 02/13/2024
ms.topic: reference
title: AvoidUsingPositionalParameters
diff --git a/docs/Rules/AvoidUsingUsernameAndPasswordParams.md b/docs/Rules/AvoidUsingUsernameAndPasswordParams.md
index b37bbfd42..32fbac3c7 100644
--- a/docs/Rules/AvoidUsingUsernameAndPasswordParams.md
+++ b/docs/Rules/AvoidUsingUsernameAndPasswordParams.md
@@ -1,6 +1,5 @@
---
description: Avoid Using Username and Password Parameters
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidUsingUsernameAndPasswordParams
diff --git a/docs/Rules/AvoidUsingWMICmdlet.md b/docs/Rules/AvoidUsingWMICmdlet.md
index 47888b361..96e716718 100644
--- a/docs/Rules/AvoidUsingWMICmdlet.md
+++ b/docs/Rules/AvoidUsingWMICmdlet.md
@@ -1,6 +1,5 @@
---
description: Avoid Using Get-WMIObject, Remove-WMIObject, Invoke-WmiMethod, Register-WmiEvent, Set-WmiInstance
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidUsingWMICmdlet
diff --git a/docs/Rules/AvoidUsingWriteHost.md b/docs/Rules/AvoidUsingWriteHost.md
index 930202d4f..561914168 100644
--- a/docs/Rules/AvoidUsingWriteHost.md
+++ b/docs/Rules/AvoidUsingWriteHost.md
@@ -1,6 +1,5 @@
---
description: Avoid Using Write-Host
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: AvoidUsingWriteHost
diff --git a/docs/Rules/DSCDscExamplesPresent.md b/docs/Rules/DSCDscExamplesPresent.md
index aaf84d185..b2b1cf608 100644
--- a/docs/Rules/DSCDscExamplesPresent.md
+++ b/docs/Rules/DSCDscExamplesPresent.md
@@ -1,6 +1,5 @@
---
description: DSC examples are present
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: DSCDscExamplesPresent
diff --git a/docs/Rules/DSCDscTestsPresent.md b/docs/Rules/DSCDscTestsPresent.md
index 22eca027f..f8fe31983 100644
--- a/docs/Rules/DSCDscTestsPresent.md
+++ b/docs/Rules/DSCDscTestsPresent.md
@@ -1,6 +1,5 @@
---
description: Dsc tests are present
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: DSCDscTestsPresent
diff --git a/docs/Rules/DSCReturnCorrectTypesForDSCFunctions.md b/docs/Rules/DSCReturnCorrectTypesForDSCFunctions.md
index 882a492ca..168185280 100644
--- a/docs/Rules/DSCReturnCorrectTypesForDSCFunctions.md
+++ b/docs/Rules/DSCReturnCorrectTypesForDSCFunctions.md
@@ -1,6 +1,5 @@
---
description: Return Correct Types For DSC Functions
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: DSCReturnCorrectTypesForDSCFunctions
diff --git a/docs/Rules/DSCStandardDSCFunctionsInResource.md b/docs/Rules/DSCStandardDSCFunctionsInResource.md
index 6280e412c..f455d7437 100644
--- a/docs/Rules/DSCStandardDSCFunctionsInResource.md
+++ b/docs/Rules/DSCStandardDSCFunctionsInResource.md
@@ -1,6 +1,5 @@
---
description: Use Standard Get/Set/Test TargetResource functions in DSC Resource
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: DSCStandardDSCFunctionsInResource
diff --git a/docs/Rules/DSCUseIdenticalMandatoryParametersForDSC.md b/docs/Rules/DSCUseIdenticalMandatoryParametersForDSC.md
index 2c6f04709..dc8e9e918 100644
--- a/docs/Rules/DSCUseIdenticalMandatoryParametersForDSC.md
+++ b/docs/Rules/DSCUseIdenticalMandatoryParametersForDSC.md
@@ -1,6 +1,5 @@
---
description: Use identical mandatory parameters for DSC Get/Test/Set TargetResource functions
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: DSCUseIdenticalMandatoryParametersForDSC
diff --git a/docs/Rules/DSCUseIdenticalParametersForDSC.md b/docs/Rules/DSCUseIdenticalParametersForDSC.md
index 2497f41ad..8f8e98e55 100644
--- a/docs/Rules/DSCUseIdenticalParametersForDSC.md
+++ b/docs/Rules/DSCUseIdenticalParametersForDSC.md
@@ -1,6 +1,5 @@
---
description: Use Identical Parameters For DSC Test and Set Functions
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: DSCUseIdenticalParametersForDSC
diff --git a/docs/Rules/DSCUseVerboseMessageInDSCResource.md b/docs/Rules/DSCUseVerboseMessageInDSCResource.md
index 49ef63ed4..bb5abacef 100644
--- a/docs/Rules/DSCUseVerboseMessageInDSCResource.md
+++ b/docs/Rules/DSCUseVerboseMessageInDSCResource.md
@@ -1,6 +1,5 @@
---
description: Use verbose message in DSC resource
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: DSCUseVerboseMessageInDSCResource
diff --git a/docs/Rules/MisleadingBacktick.md b/docs/Rules/MisleadingBacktick.md
index 3194e706f..e140b8e9d 100644
--- a/docs/Rules/MisleadingBacktick.md
+++ b/docs/Rules/MisleadingBacktick.md
@@ -1,6 +1,5 @@
---
description: Misleading Backtick
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: MisleadingBacktick
diff --git a/docs/Rules/MissingModuleManifestField.md b/docs/Rules/MissingModuleManifestField.md
index efcf70af1..c19d53454 100644
--- a/docs/Rules/MissingModuleManifestField.md
+++ b/docs/Rules/MissingModuleManifestField.md
@@ -1,6 +1,5 @@
---
description: Module Manifest Fields
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: MissingModuleManifestField
diff --git a/docs/Rules/PlaceCloseBrace.md b/docs/Rules/PlaceCloseBrace.md
index d181eebd9..6e14acc74 100644
--- a/docs/Rules/PlaceCloseBrace.md
+++ b/docs/Rules/PlaceCloseBrace.md
@@ -1,6 +1,5 @@
---
description: Place close braces
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: PlaceCloseBrace
diff --git a/docs/Rules/PlaceOpenBrace.md b/docs/Rules/PlaceOpenBrace.md
index bc3e4b5e2..faa6d4c5d 100644
--- a/docs/Rules/PlaceOpenBrace.md
+++ b/docs/Rules/PlaceOpenBrace.md
@@ -1,6 +1,5 @@
---
description: Place open braces consistently
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: PlaceOpenBrace
diff --git a/docs/Rules/PossibleIncorrectComparisonWithNull.md b/docs/Rules/PossibleIncorrectComparisonWithNull.md
index d3c62321b..28c9c7075 100644
--- a/docs/Rules/PossibleIncorrectComparisonWithNull.md
+++ b/docs/Rules/PossibleIncorrectComparisonWithNull.md
@@ -1,6 +1,5 @@
---
description: Null Comparison
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: PossibleIncorrectComparisonWithNull
diff --git a/docs/Rules/PossibleIncorrectUsageOfAssignmentOperator.md b/docs/Rules/PossibleIncorrectUsageOfAssignmentOperator.md
index 8d046e302..bbaf437b8 100644
--- a/docs/Rules/PossibleIncorrectUsageOfAssignmentOperator.md
+++ b/docs/Rules/PossibleIncorrectUsageOfAssignmentOperator.md
@@ -1,6 +1,5 @@
---
description: Equal sign is not an assignment operator. Did you mean the equality operator \'-eq\'?
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: PossibleIncorrectUsageOfAssignmentOperator
diff --git a/docs/Rules/PossibleIncorrectUsageOfRedirectionOperator.md b/docs/Rules/PossibleIncorrectUsageOfRedirectionOperator.md
index cfd00c05b..871d1340f 100644
--- a/docs/Rules/PossibleIncorrectUsageOfRedirectionOperator.md
+++ b/docs/Rules/PossibleIncorrectUsageOfRedirectionOperator.md
@@ -1,6 +1,5 @@
---
description: \'>\' is not a comparison operator. Use \'-gt\' (greater than) or \'-ge\' (greater or equal).
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: PossibleIncorrectUsageOfRedirectionOperator
diff --git a/docs/Rules/ProvideCommentHelp.md b/docs/Rules/ProvideCommentHelp.md
index 51ef66df9..8c642419f 100644
--- a/docs/Rules/ProvideCommentHelp.md
+++ b/docs/Rules/ProvideCommentHelp.md
@@ -1,6 +1,5 @@
---
description: Basic Comment Help
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: ProvideCommentHelp
diff --git a/docs/Rules/README.md b/docs/Rules/README.md
index 4f0d24e68..06f27d2da 100644
--- a/docs/Rules/README.md
+++ b/docs/Rules/README.md
@@ -1,6 +1,5 @@
---
description: List of PSScriptAnalyzer rules
-ms.custom: PSSA v1.22.0
ms.date: 03/27/2024
ms.topic: reference
title: List of PSScriptAnalyzer rules
diff --git a/docs/Rules/ReservedCmdletChar.md b/docs/Rules/ReservedCmdletChar.md
index e4195d42b..55acfc707 100644
--- a/docs/Rules/ReservedCmdletChar.md
+++ b/docs/Rules/ReservedCmdletChar.md
@@ -1,6 +1,5 @@
---
description: Reserved Cmdlet Chars
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: ReservedCmdletChar
diff --git a/docs/Rules/ReservedParams.md b/docs/Rules/ReservedParams.md
index 6e5c36a18..0e433e0e4 100644
--- a/docs/Rules/ReservedParams.md
+++ b/docs/Rules/ReservedParams.md
@@ -1,6 +1,5 @@
---
description: Reserved Parameters
-ms.custom: PSSA v1.22.0
ms.date: 03/06/2024
ms.topic: reference
title: ReservedParams
diff --git a/docs/Rules/ReviewUnusedParameter.md b/docs/Rules/ReviewUnusedParameter.md
index 6a4447785..4732b8aba 100644
--- a/docs/Rules/ReviewUnusedParameter.md
+++ b/docs/Rules/ReviewUnusedParameter.md
@@ -1,6 +1,5 @@
---
description: ReviewUnusedParameter
-ms.custom: PSSA v1.22.0
ms.date: 03/26/2024
ms.topic: reference
title: ReviewUnusedParameter
diff --git a/docs/Rules/ShouldProcess.md b/docs/Rules/ShouldProcess.md
index 38da8320e..40dcedec4 100644
--- a/docs/Rules/ShouldProcess.md
+++ b/docs/Rules/ShouldProcess.md
@@ -1,6 +1,5 @@
---
description: Should Process
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: ShouldProcess
diff --git a/docs/Rules/UseApprovedVerbs.md b/docs/Rules/UseApprovedVerbs.md
index 858979574..c1bcaa0c7 100644
--- a/docs/Rules/UseApprovedVerbs.md
+++ b/docs/Rules/UseApprovedVerbs.md
@@ -1,6 +1,5 @@
---
description: Cmdlet Verbs
-ms.custom: PSSA v1.22.0
ms.date: 03/26/2024
ms.topic: reference
title: UseApprovedVerbs
@@ -45,4 +44,4 @@ function Update-Item
```
-[01]: /powershell/scripting/developer/cmdlet/approved-verbs-for-windows-powershell-commands
\ No newline at end of file
+[01]: /powershell/scripting/developer/cmdlet/approved-verbs-for-windows-powershell-commands
diff --git a/docs/Rules/UseBOMForUnicodeEncodedFile.md b/docs/Rules/UseBOMForUnicodeEncodedFile.md
index 2d174f99e..6fffaa7fe 100644
--- a/docs/Rules/UseBOMForUnicodeEncodedFile.md
+++ b/docs/Rules/UseBOMForUnicodeEncodedFile.md
@@ -1,6 +1,5 @@
---
description: Use BOM encoding for non-ASCII files
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: UseBOMForUnicodeEncodedFile
diff --git a/docs/Rules/UseCmdletCorrectly.md b/docs/Rules/UseCmdletCorrectly.md
index 39de79c5c..81ec42e4e 100644
--- a/docs/Rules/UseCmdletCorrectly.md
+++ b/docs/Rules/UseCmdletCorrectly.md
@@ -1,6 +1,5 @@
---
description: Use Cmdlet Correctly
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: UseCmdletCorrectly
diff --git a/docs/Rules/UseCompatibleCmdlets.md b/docs/Rules/UseCompatibleCmdlets.md
index a340a6869..1fc9520d4 100644
--- a/docs/Rules/UseCompatibleCmdlets.md
+++ b/docs/Rules/UseCompatibleCmdlets.md
@@ -1,6 +1,5 @@
---
description: Use compatible cmdlets
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: UseCompatibleCmdlets
diff --git a/docs/Rules/UseCompatibleCommands.md b/docs/Rules/UseCompatibleCommands.md
index dc8c06b97..00b768ba3 100644
--- a/docs/Rules/UseCompatibleCommands.md
+++ b/docs/Rules/UseCompatibleCommands.md
@@ -1,6 +1,5 @@
---
description: Use compatible commands
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: UseCompatibleCommands
diff --git a/docs/Rules/UseCompatibleSyntax.md b/docs/Rules/UseCompatibleSyntax.md
index ebea10c22..a2adbbbb6 100644
--- a/docs/Rules/UseCompatibleSyntax.md
+++ b/docs/Rules/UseCompatibleSyntax.md
@@ -1,6 +1,5 @@
---
description: Use compatible syntax
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: UseCompatibleSyntax
diff --git a/docs/Rules/UseCompatibleTypes.md b/docs/Rules/UseCompatibleTypes.md
index 72927d140..355f35bed 100644
--- a/docs/Rules/UseCompatibleTypes.md
+++ b/docs/Rules/UseCompatibleTypes.md
@@ -1,6 +1,5 @@
---
description: Use compatible types
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: UseCompatibleTypes
diff --git a/docs/Rules/UseConsistentIndentation.md b/docs/Rules/UseConsistentIndentation.md
index fa331a74f..f084d5ac4 100644
--- a/docs/Rules/UseConsistentIndentation.md
+++ b/docs/Rules/UseConsistentIndentation.md
@@ -1,6 +1,5 @@
---
description: Use consistent indentation
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: UseConsistentIndentation
diff --git a/docs/Rules/UseConsistentWhitespace.md b/docs/Rules/UseConsistentWhitespace.md
index 1841ed0f5..e36c42783 100644
--- a/docs/Rules/UseConsistentWhitespace.md
+++ b/docs/Rules/UseConsistentWhitespace.md
@@ -1,6 +1,5 @@
---
description: Use whitespaces
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: UseConsistentWhitespace
diff --git a/docs/Rules/UseCorrectCasing.md b/docs/Rules/UseCorrectCasing.md
index c39c08875..f64a7888d 100644
--- a/docs/Rules/UseCorrectCasing.md
+++ b/docs/Rules/UseCorrectCasing.md
@@ -1,6 +1,5 @@
---
description: Use exact casing of cmdlet/function/parameter name.
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: UseCorrectCasing
diff --git a/docs/Rules/UseDeclaredVarsMoreThanAssignments.md b/docs/Rules/UseDeclaredVarsMoreThanAssignments.md
index 0fb7796c2..e316dbf85 100644
--- a/docs/Rules/UseDeclaredVarsMoreThanAssignments.md
+++ b/docs/Rules/UseDeclaredVarsMoreThanAssignments.md
@@ -1,6 +1,5 @@
---
description: Extra Variables
-ms.custom: PSSA v1.22.0
ms.date: 03/06/2024
ms.topic: reference
title: UseDeclaredVarsMoreThanAssignments
diff --git a/docs/Rules/UseLiteralInitializerForHashtable.md b/docs/Rules/UseLiteralInitializerForHashtable.md
index bb180d832..16f9a2f9b 100644
--- a/docs/Rules/UseLiteralInitializerForHashtable.md
+++ b/docs/Rules/UseLiteralInitializerForHashtable.md
@@ -1,6 +1,5 @@
---
description: Create hashtables with literal initializers
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: UseLiteralInitializerForHashtable
diff --git a/docs/Rules/UseOutputTypeCorrectly.md b/docs/Rules/UseOutputTypeCorrectly.md
index 01895c17d..733425fdd 100644
--- a/docs/Rules/UseOutputTypeCorrectly.md
+++ b/docs/Rules/UseOutputTypeCorrectly.md
@@ -1,6 +1,5 @@
---
description: Use OutputType Correctly
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: UseOutputTypeCorrectly
diff --git a/docs/Rules/UsePSCredentialType.md b/docs/Rules/UsePSCredentialType.md
index c3c2dc7f1..c962762ed 100644
--- a/docs/Rules/UsePSCredentialType.md
+++ b/docs/Rules/UsePSCredentialType.md
@@ -1,6 +1,5 @@
---
description: Use PSCredential type.
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: UsePSCredentialType
diff --git a/docs/Rules/UseProcessBlockForPipelineCommand.md b/docs/Rules/UseProcessBlockForPipelineCommand.md
index d74da5a71..2e5630880 100644
--- a/docs/Rules/UseProcessBlockForPipelineCommand.md
+++ b/docs/Rules/UseProcessBlockForPipelineCommand.md
@@ -1,6 +1,5 @@
---
description: Use process block for command that accepts input from pipeline.
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: UseProcessBlockForPipelineCommand
diff --git a/docs/Rules/UseShouldProcessForStateChangingFunctions.md b/docs/Rules/UseShouldProcessForStateChangingFunctions.md
index 5c63d150d..f0e102da3 100644
--- a/docs/Rules/UseShouldProcessForStateChangingFunctions.md
+++ b/docs/Rules/UseShouldProcessForStateChangingFunctions.md
@@ -1,6 +1,5 @@
---
description: Use ShouldProcess For State Changing Functions
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: UseShouldProcessForStateChangingFunctions
diff --git a/docs/Rules/UseSingularNouns.md b/docs/Rules/UseSingularNouns.md
index b7bba39eb..3997c069a 100644
--- a/docs/Rules/UseSingularNouns.md
+++ b/docs/Rules/UseSingularNouns.md
@@ -1,6 +1,5 @@
---
description: Cmdlet Singular Noun
-ms.custom: PSSA v1.22.0
ms.date: 03/27/2024
ms.topic: reference
title: UseSingularNouns
diff --git a/docs/Rules/UseSupportsShouldProcess.md b/docs/Rules/UseSupportsShouldProcess.md
index 40767e060..04ca2bfe7 100644
--- a/docs/Rules/UseSupportsShouldProcess.md
+++ b/docs/Rules/UseSupportsShouldProcess.md
@@ -1,6 +1,5 @@
---
description: Use SupportsShouldProcess
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: UseSupportsShouldProcess
diff --git a/docs/Rules/UseToExportFieldsInManifest.md b/docs/Rules/UseToExportFieldsInManifest.md
index 5a4c87c73..5faaf9d1b 100644
--- a/docs/Rules/UseToExportFieldsInManifest.md
+++ b/docs/Rules/UseToExportFieldsInManifest.md
@@ -1,6 +1,5 @@
---
description: Use the *ToExport module manifest fields.
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: UseToExportFieldsInManifest
diff --git a/docs/Rules/UseUTF8EncodingForHelpFile.md b/docs/Rules/UseUTF8EncodingForHelpFile.md
index 8f7ab429c..31c525db6 100644
--- a/docs/Rules/UseUTF8EncodingForHelpFile.md
+++ b/docs/Rules/UseUTF8EncodingForHelpFile.md
@@ -1,6 +1,5 @@
---
description: Use UTF8 Encoding For Help File
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: UseUTF8EncodingForHelpFile
diff --git a/docs/Rules/UseUsingScopeModifierInNewRunspaces.md b/docs/Rules/UseUsingScopeModifierInNewRunspaces.md
index 86a76561c..bde0f667d 100644
--- a/docs/Rules/UseUsingScopeModifierInNewRunspaces.md
+++ b/docs/Rules/UseUsingScopeModifierInNewRunspaces.md
@@ -1,6 +1,5 @@
---
description: Use 'Using:' scope modifier in RunSpace ScriptBlocks
-ms.custom: PSSA v1.22.0
ms.date: 06/28/2023
ms.topic: reference
title: UseUsingScopeModifierInNewRunspaces
diff --git a/tools/updateVersion.ps1 b/tools/updateVersion.ps1
new file mode 100644
index 000000000..7e9d1a47d
--- /dev/null
+++ b/tools/updateVersion.ps1
@@ -0,0 +1,29 @@
+# Copyright (c) Microsoft Corporation.
+# Licensed under the MIT License.
+
+param(
+ [Parameter(Mandatory)]
+ [semver]$Version,
+
+ [Parameter(Mandatory)]
+ [string]$Changes
+)
+
+git diff --staged --quiet --exit-code
+if ($LASTEXITCODE -ne 0) {
+ throw "There are staged changes in the repository. Please commit or reset them before running this script."
+}
+
+$Path = "Directory.Build.props"
+$f = Get-Content -Path $Path
+$f = $f -replace '^(?\s+)(.+)(?)$', "`${prefix}${Version}`${suffix}"
+$f | Set-Content -Path $Path
+git add $Path
+
+$Path = "docs/Cmdlets/PSScriptAnalyzer.md"
+$f = Get-Content -Path $Path
+$f = $f -replace '^(?Help Version: )(.+)$', "`${prefix}${Version}"
+$f | Set-Content -Path $Path
+git add $Path
+
+git commit --edit --message "v${Version}: $Changes"