Releases: PowerShell/PSScriptAnalyzer
v1.23.0
What's Changed
- Adding OneBranch pipeline YAML config file for OSS_Microsoft_PSSA-Official by @adityapatwardhan in #1981
- Update format and grammar of AvoidUsingAllowUnencryptedAuthentication by @sdwheeler in #1974
- Move to OneBranch Signing and SBOM generation by @TravisEz13 in #1982
- Sync rule docs changes by @sdwheeler in #1985
- Sync docs changes from MicrosoftDocs/PowerShell-Docs-Modules#213 by @sdwheeler in #1987
- Update CHANGELOG for 1.22.0 release by @sdwheeler in #1990
- Update Code of Conduct by @andyleejordan in #2002
- Update default type definition of
RuleInfo
by @liamjpeters in #2011 - PSUseConsistentWhitespace: Handle redirect operators which are not in stream order by @liamjpeters in #2001
- Setup GitHub Actions CI by @andyleejordan in #2018
- Setup new OneBranch pipeline by @andyleejordan in #2027
- Bump SMA version by @andyleejordan in #2028
- Package updates by @andyleejordan in #2030
- v1.23.0: Update version for new release by @andyleejordan in #2032
- Migrate release pipeline to DeployBox by @andyleejordan in #2033
New Contributors
- @adityapatwardhan made their first contribution in #1981
Full Changelog: 1.22.0...v1.23.0
PSScriptAnalyzer v1.22.0
Minimum required version when using PowerShell 7 is now 7.2.11
.
New Rule
- Add AvoidUsingAllowUnencryptedAuthentication by @MJVL in #1857
- Add the AvoidExclaimOperator rule to warn about the use of the ! negation operator. Fixes #1826 by @liamjpeters in #1922
Enhancements
- Enable suppression of PSAvoidAssignmentToAutomaticVariable for specific variable or parameter by @fflaten in #1896
- Upgrade to use .NET 6 since PowerShell 7.0 is now out out of support by @bergmeister in #1873
- Convert UseSingularNouns to configurable rule and add Windows to allowlist by @MJVL in #1858
- Add ErrorView to SpecialVars.cs by @ewisniew0 in #1865
- Allow suppression of PSUseSingularNouns for specific function by @fflaten in #1903
- Adding ToString() methods to [CorrectionExtent] and [DiagnosticRecord] by @StartAutomating in #1946
- Add PSNativeCommandUseErrorActionPreference preference variable by @aelij in #1954
- AvoidUsingPositionalParameter: Check if command has parameters to avoid having az in default CommandAllowList by @bergmeister in #1850
- PSReviewUnusedParameter: Add CommandsToTraverse option by @FriedrichWeinmann in #1921
Fixes
Build & Test, Documentation and Maintenance
- UseApprovedVerbs.md: Backport minor change of PR 104 in PowerShell-Docs-Modules by @bergmeister in #1849
- Improve Pester bootstrap logic for CI by @bergmeister in #1853
- Bump .NET SDK from 3.1.419 to 3.1.424 by @bergmeister in #1852
- AvoidLongLines: Make internal function DiagnosticSeverity private by @bergmeister in #1851
- SupportsShouldProcess.md: Fix Typo - MicrosoftDocs backport of PR 121 there by @sdwheeler in #1869
- Minor test fix for UseCorrectCasing rule by @kilasuit in #1885
- Make Invoke-Formatter test case assertion fail in case of incorrect casing by @alexandear in #1888
- Fix
AvoidUsingDoubleQuotesForConstantString
information in overview README by @michaeltlombardi in #1883 - Update dependabot reviewers to remove Rob by @fflaten in #1897
- Fix typo in AvoidUsingPlainTextForPassword error message: 'to' being repeated two times by @ALiwoto in #1902
- CI: Use new Ubuntu 22.04 image and remove deprecated Ubuntu 18.04 by @bergmeister in #1847
- Change double quotes to single where possible by @sdwheeler in #1911
- Backport MicrosoftDocs PR 143 by @sdwheeler in #1910
- Fix typos in rules documentation by @sdwheeler in #1913
- add demand for compliance job by @TravisEz13 in #1920
- FabricBot: Onboarding to GitOps.ResourceManagement because of FabricBot decommissioning by @microsoft-github-policy-service in #1925
- Sync changes from Docs repository by @sdwheeler in #1929
- Developer documentation fix and message fix of PossibleIncorrectUsageOfRedirectionOperatorDescription by @JoelTipke in #1928
- Documentation corrections for AvoidUsingPositionalParameters by @ImportTaste in #1917
- Update minimum PowerShell Core version to 7.2.11 as 7.0 is now EOL by @bergmeister in #1872
- Remove dead code and simplify by @bergmeister in #1856
- PSReservedParams - link about_CommonParameters by @petervandivier in #1908
- Generate strongly typed resources as part of build by @bergmeister in #1855
- Bump Newtonsoft.Json to 13.0.3 by @dependabot in #1866
- Use latest .NET 6.0 SDK patch version and update devcontainer to use .NET 6 as well by @bergmeister in #1955
- Bump Microsoft.Management.Infrastructure from 1.0.0 to 3.0.0 for PowerShell 7 only by @dependabot in #1947
- Bump version from 1.21.0 to 1.22.0 by @bergmeister in #1965
- Remove Appveyor badge from main README by @bergmeister in #1962
- Do not hard code common parameters in module help test any more by @bergmeister in #1963
New Contributors
- @fflaten made their first contribution in #1897
- @ALiwoto made their first contribution in #1902
- @microsoft-github-policy-service made their first contribution in #1925
- @JoelTipke made their first contribution in #1928
- @ImportTaste made their first contribution in #1917
- @liamjpeters made their first contribution in #1922
- @petervandivier made their first contribution in #1908
- @ewisniew0 made their first contribution in #1865
- @StartAutomating made their first contribution in #1946
- @aelij made their first contribution in #1954
- @FriedrichWeinmann made their first contribution in #1921
Full Changelog: 1.21.0...1.22.0
PSScriptAnalyzer v1.21.0
1.21.0 - 2022-09-14
New Rule
- Add AvoidMultipleTypeAttributes rule (#1705) (thanks @hankyi95)
- Add the AvoidSemicolonsAsLineTerminators rule to warn about lines ending with a semicolon. Fix (#824) (#1806) (thanks @tempora-mutantur)
- Add AvoidUsingBrokenHashAlgorithms (#1787) (thanks @MJVL)
Enhancements
- Also return suggestion to use PSCredential for AvoidUsingPlainTextForPassword rule (#1782) (by @bergmeister)
- Invoke-Formatter: Accept input from pipeline (#1763) (by @bergmeister)
- PSAvoidUsingPositionalParameters: Do not warn on AZ CLI (#1846) (by @bergmeister)
- PSAvoidUsingPositionalParameters: Do not warn on AZ CLI (#1846) (by @bergmeister)
Fixes
- Fix PSUseConsistentIndentation.PipelineIndentation.None to not remove code when the previous line ended with a pipe (#1746) (by @bergmeister)
- Skip OpenBrace check when preceded by Dot token (#1750) (by @bergmeister)
- Fix NRE (NullReferenceException) when custom rules omit optional properties in diagnostics (#1715) (by @rjmholt)
Build, Documentation and Maintenance
- Tweak documentation for AvoidUsingBrokenHashAlgorithms (#1829) (thanks @michaeltlombardi)
- Set MaxDepth in JsonSerializerSettings for more secure handling of exceptional conditions in Newtonsoft.Json (#1824) (by @bergmeister)
- Use latest Newtonsoft.Json version for Windows PowerShell builds and not exclude it any more in Dependabot (#1825) (by @bergmeister)
- Correct pipeline acceptance docs for Invoke-Formatter.md (#1833) (by @bergmeister)
- Sync remaining docs changes from Microsoft docs (#1835) (by @bergmeister)
- Reformat note block (#1837) (by @sdwheeler)
- Update AvoidMultipleTypeAttributes.md with example that has runtime error (#1831) (by @bergmeister)
- Fix minimum PowerShell version to be 7.0.11 instead of 7.1.7 (#1830) (by @bergmeister)
- Add
.github/fabricbot.json
(#1812) - Sync changes from docs repo (#1814) (by @sdwheeler)
- Fix name of PowerShell 5.1 test stage in CI (#1820) (by @bergmeister)
- CI: Retry test tasks in cas1e of failure to reduce sporadic failures (#1770)
- Upgrade from net452 to net462 for Windows PowerShell (#1789)
- Move issue template config into folder (#1804) (thanks @michaeltlombardi)
- Bump version from 1.20.0 to 1.21.0 (#1796) (by @bergmeister)
- Bump .NET SDK and SMA patch version (#1795) (by @bergmeister)
- Be sure not to clobber existing files when installing dotnet. (#1788) (by @JamesWTruher)
- Add link to issues chooser for reporting docs issues (#1794) (by @sdwheeler)
- Update README and delete docs that were migrated (#1790) (by @sdwheeler)
- Fix errors in ShouldProcess rule document (#1766) (thanks @masaru-iritani)
- Replicate changes from docs repo (#1781) (by @sdwheeler)
- Update Windows CI images as windows-2016 has been deprecated (#1784) (by @bergmeister)
- Use latest mac image rather than a specific version. (#1777) (by @JamesWTruher)
- Add docs migration notice & fix formatting (#1779) (by @sdwheeler)
- use compliant build environment for release build. (#1776) (by @JamesWTruher)
- Enable SBOM creation for script analyzer (#1762) (by @JamesWTruher)
- Fix links to work on GitHub (#1738) (by @andschwa)
- Update AvoidUsingWMICmdlet.md (#1737) (thanks @C0smin)
- Fix broken doc link in README (#1735) (thanks @AndrewRathbun)
- Add metadata to docs (#1731) (by @sdwheeler)
- Remove Ubuntu 16.04 from test matrix (#1733) (by @rjmholt)
- Use PowerShell1ES pool for official build (#1719) (by @JamesWTruher)
- Update cmdlet docs for 1.20.0 (#1726) (by @sdwheeler)
- Fixes #1720 - move rule docs and update tests (#1724) (by @sdwheeler)
- Update rule docs (#1711) (by @sdwheeler)
PSScriptAnalyzer v1.20.0
1.20.0 - 2021-08-20
Fixes
- Replace unhelpful warning around
process
aliasingGet-Process
with warning about misused syntax (#1638) (by @bergmeister) - Fix
FunctionInfo
fallback AST attribute analysis for UseShouldProcessCorrectly (#1659) (thanks @hubuk) - Do not increase indentation after a left parenthesis if the previous token is a newline and the next token is not a newline (#1469) (by @bergmeister)
- UseConsistentWhitespace - CheckOpenBrace setting: Do not warn when being preceded by open parenthesis (#1633) (by @bergmeister)
New Rule
- Make UseSingularNouns rule work in PowerShell 7 (#1627) (by @bergmeister)
- UseConsistentWhitespace: Create option to ignore assignment operator inside hashtable (#1566) (thanks @daviesj)
Miscellaneous
- Implement -IncludeSuppressions parameter (#1701) (by @rjmholt)
- Combine multiple suppressions applied to the same diagnostic (#1699) (by @rjmholt)
- Use dependabot to keep dependencies up to date (#1664) (by @rjmholt)
- Add reviewers and explicit dependency exclusions to dependabot (#1676) (by @rjmholt)
- Remove explicit registries in dependabot (#1671) (by @rjmholt)
Documentation
- Link to PSScriptAnalyzer rule documentation from the README (#1642) (thanks @bbodenmiller)
- Add HelpInfoUri to module manifest (#1651) (by @sdwheeler)
- Add documentation around CustomRulePath in Settings file to README.md (#1636) (thanks @johlju)
- Use allowlist and blocklist terminology, supply alternate configuration key for PSAvoidUsingCmdletAliases (#1604) (by @bergmeister)
- Fix suppression example errors in README (#1593) (by @rjmholt)
- Fix AvoidLongLines documentation example (#1554) (thanks @floh96)
- Remove broken waffle.io links from readme.md (#1558) (thanks @clcaldwell)
- Fix typo in AvoidUsingCmdletAliases documentation (#1590) (thanks @rubengonzalez-dev)
Testing
- Fix compatibility rule tests (#1697) (by @rjmholt)
- Fix missing space in AvoidPositionalParameter test asset (#1573) (by @JamesWTruher)
Development/Build Improvements
- Fix build module tests (#1654) (thanks @clcaldwell)
- Move to new signing process for release build and prep for 1.20.0 (#1625) (by @JamesWTruher)
- Handle cases where the signature generator fails (#1661) (by @JamesWTruher)
- Update .NET SDK to 3.1.408 (#1630) (by @bergmeister)
- Simplify devcontainer setup and resolve git line ending conflicts (#1637) (by @bergmeister)
- Speedup CI by bootstrapping PowerShell module installations in background and in parallel, whilst the .NET SDK is being installed (#1634) (by @bergmeister)
- Upgrade release Dockerfile from Ubuntu 16.04 to 20.04 (#1631) (by @bergmeister)
- Remove old powershell-core NuGet feed, which sometimes causes build failures (#1632) (by @bergmeister)
- Remove reference to myget.org as a package resource (#1640) (by @JamesWTruher)
- Add Ubuntu 20.04 to build matrix (#1628) (by @bergmeister)
- Remove conditional compilation for PSv6/netstandard2.0 for Engine and Rules projects (#1600) (by @bergmeister)
- Upgrade Microsoft.CSharp, Microsoft.Win32.Registry and System.Reflection.TypeExtensions from 4.5.0 to 4.7.0 (#1599) (by @bergmeister)
- Use PowerShell preview extension for Github Codespaces (#1596) (by @bergmeister)
- Update SMA reference for netcoreapp3.1 to from 7.0.0 to 7.0.3 (#1597) (by @bergmeister)
- 🧹 Make usage of Microsoft.Management.Infrastructure consistent and reference it only once in CrossCompatibility project (#1601) (by @bergmeister)
- Update launch.json (#1603) (by @bergmeister)
- Make CI fail if tests fail and fix failing tests by making them Pester v5 compatible (#1553) (coauthored by @bergmeister)
PSScriptAnalyzer v1.19.1
Fixes
UseCorrectCasing
: Do not use CommandInfoCache when CommandInfoParameters property throws due to runspace affinity problem of PowerShell engine (#1523) (by @bergmeister)ReviewUnusedParameter
: Do not trigger when MyInvocation.BoundParameters or PSCmdlet.MyInvocation.BoundParameters is used (#1520) (Thanks @jegannathanmaniganadan!)PipelineIndentationStyle.None
: Fix bug that caused incorrect formatting in hashtables (#1497) (by @bergmeister)UseUsingScopeModifierInNewRunspaces
: Fix ArgumentException when the same variable name is used in 2 different sessions. (#1493) (by @bergmeister)UseConsistentWhitespace
- Check previous token only if it starts on the same line (#1491) (by @bergmeister)
- Fix CheckParameter bug when using interpolated string (#1498) (by @bergmeister)
New Rule
- New rule (disabled by default): AvoidUsingDoubleQuotesForConstantString (#1470) (by @bergmeister)
Miscellaneous
- Set Assembly version attribute (#1549) (by @JamesWTruher)
Documentation
Testing
- Pester v5 (#1444) (by @bergmeister)
Development improvements
- Include PDB files in Debug build (#1535) (by @bergmeister)
- Add more useful launch configurations (#1499) (by @bergmeister)
- Make .Net Core version in Docker image of .devcontainer match the one in global.json (#1494) (by @bergmeister)
PSScriptAnalyzer v1.19.0
New Rules
- UseUsingScopeModifierInNewRunspaces (#1419) (thanks @Jawz84!)
- ReviewUnusedParameter (#1382) (thanks @mattmcnabb!)
- AvoidOverwritingBuiltInCmdlets (#1348) (thanks @thomasrayner!)
- UseProcessBlockForPipelineCommand (#1373) (thanks @mattmcnabb!)
- AvoidLongLines (#1329) (thanks @thomasrayner!)
Rule Enhancements
- Add more automatic variables to PSAvoidAssignmentToAutomaticVariables that are not read-only but should still not be assigned to in most cases (#1394) (by @bergmeister)
Compatibility Rules
- Make CompatibilityCollector able to parse a single version String #1446 (by @bergmeister)
- Update compatibility profiles for PowerShell 7 (#1429) (by @rjmholt)
- Ps7 syntax (#1426) (by @rjmholt)
- Fix ps3 syntax check (#1395) (by @rjmholt)
- Add PS 7 to UseCompatibleSyntax (#1331) (by @rjmholt)
- Fix UseCompatibleSyntax configuration doc (e37daeb) (by @rjmholt)
- Update UseCompatibleTypes docs with more info (42f5e58) (by @rjmholt)
- UseCompatibleCommands doc improvements (7874b55) (by @rjmholt)
- Update AzF profile to be useful (#1341) (by @rjmholt)
Formatter
- UseCorrectCasing
- Correct casing of parameters as well in PSUseCorrectCasing formatter rule (#1391) (by @bergmeister)
- Fix temporarily introduced bug (PR #1391) for UseCorrectCasing (#1408) (by @bergmeister)
- UseConsistentIndentation
- When non-default options are used, cater for the case of a comment between pipe and newline (#1463)
- Add PipelineIndentationStyle.None option for scenarios where indentation is custom, inconsistent or the user does not like any of the 3 pipeline indentation styles (#1399) (by @bergmeister)
- Fix complex case when PipelineIndentation is not set to default (NoIndentation) (#1359) (by @bergmeister)
- UseConsistentWhitespace
- Split CheckPipe feature of trimming redundant whitespace out into option CheckPipeForRedundantWhiteSpace (#1413) (by @bergmeister)
- Set default of CheckParameter configuration setting to false to ensure that setting won't be enabled by default if an old version of the VS-Code extension uses a new version of - PSScriptAnalyzer (1.19) (#1411) (by @bergmeister)
- Remove redundant whitespace between parameters with new option (disabled by default) in UseConsistentWhitespace (#1392) (by @bergmeister)
- Ignore empty hashtable for CheckInnerBrace configuration (#1349) (by @bergmeister)
Performance
The Formatter can now be multiple times faster depending on the use case and especially scaling problems were addressed that showed when analyzing large scripts with thousands of lines (a 3000 line test script was used in the below performance figures). Optimisations were to
- Eliminate initialization overhead, which can lead to a reduced time of up to 50%
- Optimize operations in rules to make them scale better, another improvement of around 50%
- The formatter used to re-parse the script in between every rule run but this is skipped now if the previous rule did not emit a
DiagnosticRecord
as it means the script text hasn't changed and doesn't need updating. Therefore formatting will be faster on scripts that need no to little changes.
A small improvement was made to a script analysis rule as well but the gain is offset by the addition of the new rules in this release.
The PRs for those improvements are:
- Eliminate Regex overhead in AvoidTrailingWhitespace -> Speedup of 5% (PowerShell 5.1) or 2.5 % (PowerShell 7.1-preview.2) (#1465) (by @bergmeister)
- Formatter: Recycle parsed AST and tokens in between rule invocations when no correction was applied to improve performance (#1462) (by @bergmeister)
- Improve performance of UseConsistentIndentation even more > another 10% speedup for formatter (#1461) (by @bergmeister)
- Improve performance of UseConsistentIndentation -> 35% speedup for formatter (#1458) (by @bergmeister)
- Lazy initialisation of LinkedList in TokenOperations constructor -> 7% performance gain for formatter (#1453) (by @bergmeister)
- Invoke-Formatter: Skip VariableAnalysis, which is not needed to yield a 50% performance improvement (#1451) (by @bergmeister)
Fixes
- Fix edge case of PSUseConsistentIndentation for non-default value (IncreaseIndentationForFirstPipeline/IncreaseIndentationAfterEveryPipeline) (#1423) (by @bergmeister)
- Fix rule suppression ID in compat rules (#1432) (by @rjmholt)
- Changes to build analyzer for PS7 and PS6 and ship in separate directories and bump version to 1.19.0 (#1425) (by @JamesWTruher)
- Use AST to determine SupportsShouldProcess when an error is thrown (#1397) (by @rjmholt)
- Fix false positive of AvoidAlias rule for implicit aliasing of Get- commands for the CommandType ExternalScript (#1386) (by @bergmeister)
Build/Tests/Maintenance
- Changelog for 1.19.0 (#1448) (by @bergmeister)
- Use separate test.yaml files files since param passing of pwsh still doesn't seem to fully work correctly #1466 (by @bergmeister)
- New build scripts for release pipeline (#1442) (by @JamesWTruher)
- Make sure that tests always get uploaded, due to too much YAML indentation, condition was not applied (#1455) (by @bergmeister)
- Cleanup csproj files: Remove code duplication for Configuration and entries in Rules project, since it depends on Engine project (#1450) (by @bergmeister)
- Build: Use logging command as a temporary workaround due to billing bug preventing upload of pipeline artefacts (#1464) (by @bergmeister)
- Use bracket syntax for passing yaml parameter (#1449) (by @bergmeister)
- Update Newtonsoft.Json from 12.0.2 to 12.0.3 in Compatibility project as well (#1447) (by @bergmeister)
- Replace usage of $MyInvocation.MyCommand.Path with $PSScriptRoot and cleanup tests as a preparation for Pester v5 (#1438) (by @bergmeister)
- Compatibility tests: Use correct genericVerCases test case and remove invalid test case (#1440) (by @bergmeister)
- Add out folder to .gitignore (#1443) (by @bergmeister)
- Pin major version of Pester to 4 and upgrade Pester version for WMF4 build (#1433) (by @bergmeister)
- ms-vscode.csharp to ms-dotnettools.csharp (#1424) (thanks @devlead!)
- Upgrade .net sdk to latest path (#1421) (by @bergmeister)
- Fix #1417 modulehelp false positives (#1418) (thanks @Jawz84!)
- Increase macOs CI coverage to include both 10.14 and 10.15 as 10.15 has recently been added to Azure DevOps hosted agents (#1412) (by @bergmeister)
- Fix vmImage entries in build to match description (#1409) (by @bergmeister)
- Update .Net Core SDK from 3.1.100 to latest patch 3.1.101 (#1405) (by @bergmeister)
- Multi-stage pipelines (to split build->test) (#1404) (by @bergmeister)
- Use vmImage in yaml and merge build definitions into 1 by using jobs. Disable all AppVeyor images except for WMF4. Disable flaky UseCompatibleCommand tests on Ubuntu in CI (#1403) (by @bergmeister)
- Azure pipelines migration (#1267) (by @bergmeister)
- Add DevContainer support (#1286) (by @bergmeister)
- Increase maximum runspace pool size in flaky test (#1358) (by @bergmeister)
- Use latest version of PlatyPS in AppVeyor (#1390) (by @bergmeister)
- .Net core sdk 3.1 (#1388) (by @bergmeister)
- Use Where-Object instead of alias in buildmodule.tests.ps1 (#1360) (thanks @kvprasoon!)
- Remove legacy methods (#1387) (by @bergmeister)
- Upgrade .Net Core SDK version to a newer version that is also available in Visual Studio Online environment (#1377) (by @bergmeister)
- Update Newtonsoft.Json from 12.0.1 to 12.02 (latest version), which increases the minimum PS Core version from 6.2.0 to 6.2.1 (#1357) (by @bergmeister)
- Harden dotnet --version handling (#1367) (by @JamesWTruher)
- Fix configuration for PS v5 and v6 builds to be Debug/Release as it used to be to allow for actual debug builds (#1356) (by @bergmeister)
- Disable bad tests on Linux for now (#1365) (by @rjmholt)
- Fix Ubuntu build and runspace test (#1340) (by @bergmeister)
Documentation
- Update Readme with minimum PowerShell Core version being 6.2 (#1457) (by @bergmeister)
- Change term to satisfy policheck requirements #1445 (by @JamesWTruher)
- Update adopters file with entry for Microsoft internal teams (#1398) (thanks @pperrier27!)
- Add ADOPTERS.md (#1380) (by @SteveL-MSFT)
- Update SuppressMessageAttribute docs link and use single quotes for examples (#1389) (by @bergmeister)
- Update ShouldProcess.md (#1383) (thanks @baardhermansen!)
- Fix typo in example (#1379) (thanks @Farwaykorse!)
- Update Hyperlink for Approved Verbs (#1374) (thanks @MysticRyuujin!)
PSScriptAnalyzer v1.18.3
This release adds one more important fix, which prevents a leak of runspaces when repeatedly invoking the PSScriptAnalyzer cmdlets. Furthermore it ups the minimum version of PowerShell Core to 6.2.0
due to 6.1
reaching its end of life this month.
- Change CommandInfoCache to implement IDisposable and clean up the runspace pool (#1335) (by @JamesWTruher)
- Update Newtonsoft json to 12.0.1 due to PowerShell 6.1 going out of support (#1336) (by @bergmeister)
PSScriptAnalyzer v1.18.2
This release mainly brings fixes and enhancements that are especially useful when being consumed by PowerShellEditorServices.
The benefit to the user will be some enhancements and fixes in the formatter, especially around multiline commands. In addition to that, error messages emitted when using invalid syntax in the setting file are now much more meaningful and actionable.
Fixes
-
Compatibility Analysis
-
Formatter
- Fix PSCloseBrace rule to not wrongly flag closing brace of one-line hashtable, which lead to incorrect formatting (#1309) (by @bergmeister)
- PipelineIndentationStyle (when not being set to NoIndentation)
- PipelineIndentationStyle: Fix edge case where pipeline was incorrectly detected to span multiple lines due to backticks in the command leading up to the pipeline (#1312) (by @bergmeister)
- Fix edge case when PipelineIndentationStyle is not set to NoIndentation (pipeline operator spanning only one line but PipelineAst spanning multiple lines) (#1261) (by @bergmeister)
- Allow formatter to optionally correct aliases (#1277) (by @bergmeister)
-
Engine
Enhancements
- Formatter
- Fix Indentation of multiline command with backticks after comment line (#1318) (by @bergmeister)
- Code Analysis:
- Enhance UseDeclaredVarsMoreThanAssignments to detect also take into account the usage of Get-Variable with an array of variables and usage of named - parameter -Name (#1310) (by @bergmeister)
- Settings files
- Actionable errors from incorrect settings files (#1263) (thanks @travis-c-lagrone!)
- Update engine resource string 'WrongKeyHashTable' to include all valid settings hashtable keys (#1273) (thanks @travis-c-lagrone!)
- Add icon and add reference in readme and manifest (#1291) (by @bergmeister, thanks @adilio for creating the logo!)
Documentation
- Update readme with changes to default branch being master now (#1265) (by @bergmeister)
- UseApprovedVerbs.md: Improving Documentation (#1294) (Thanks @Banner-Keith!)
- Update documentation for parameter "Settings" of command "Invoke-ScriptAnalyzer" to include the key "RecurseCustomRulesPath" - (#1272) (thanks @travis-c-lagrone!)
Build
- Don't sign the compatability collector catalog so that PSScriptAnalyzer can ship with a catalog file again (#1328) (by @JamesWTruher)
- Fix Ubuntu Appveyor build (#1320) (by @bergmeister, thanks @JamesWTruher for the initial investigation)
PSScriptAnalyzer v1.18.1
Please see the CHANGELOG for information about the changes in the release. You can download this version from PowerShellGallery.
Fixes
-
Formatter
- UseCorrectCasing
- Do not use alias name as key for command info cache to fix the problem where UseCorrectCasing corrects aliases (#1216) (by @bergmeister)
- Fix wildcard lookups for command lookup and do not append .exe for applications on Windows (#1210) (by @bergmeister)
- Do not correct applications or script paths at all (#1255) (by @bergmeister)
- Prevent PSCloseBrace crash if hashtable definition start on first token and there is a PSCloseBrace violation (#1235) (by @bergmeister)
- PipelineIndentationStyle
- Fix formatting regression in 1.18.0 whereby single-line pipeline reduces indentation level incorrectly (#1191) (by @bergmeister)
- Make IncreaseIndentationForFirstPipeline the true default option for PipelineIndentationStyle option (#1218) (by @bergmeister)
- UseCorrectCasing
-
Compatibility Rules
- Fix UseCompatibleSyntax class error message (#1215) (by @rjmholt)
- Convert compatibility module to binary module, fix compatibility with Azure environments (#1212) (by @rjmholt)
- Prevent .NET members with names differing only by case from crashing the compatibility profiler (#1195) (by @rjmholt)
- Fix compatibility profile query API so that aliases referring to other modules appear (#1194) (by @rjmholt)
-
DSC
- Instead of using the first cimClass and then having no superClass, use the first cimClass that has a non-null superClass (#1200) (by @bergmeister, thanks to @ykuijs! for the great collaboration)
- Make
-SaveDscDependency
work on Linux (#1246) (by @bergmeister)
-
Enable suppression of custom rules when used together with
-IncludeDefaultRules
to allow all possible scenarios from 1.17.1 and 1.18.0. This removes also the check if the rule name in the suppression attribute can be found because this check is technically not possible in all scenarios (#1245) (by @bergmeister) -
Fix NullReferenceException for class type (#1182) (by @bergmeister)
Performance
2 improvements were made that make cold runs of ScriptAnalyzer twice as fast compared to 1.18.0
- Speedup cold runs by using a runspace pool (#1178) (by @bergmeister)
- Fix logic errors in AvoidAlias rule to halve the amount of necessary calls to
Get-Command
, making the rule twice (#1251) (by @JamesWTruher)
General Improvements
- Add ImplementingType to RuleInfo object for better settings file validation and settings template file creation (#1250) (by @JamesWTruher)
- Fix typo in AvoidDefaultValueForMandatoryParameterError resource string (#1233) (Thanks @tnieto88!)
- Change module root find function in CompatibilityRule (#1196) (by @rjmholt)
Documentation
- Update PossibleIncorrectComparisonWithNull documentation with better example (#1244, #1226 and #1220) (by @bergmeister and thanks to @PrzemyslawKlys and @lesterw1!)
- Compatibility rules documentation fixes (#1229, #1204, #1225 and #1221) (by @rjmholt, @bergmeister and thanks @skycommand!)
- Update README.md on supported PowerShell Core version and update Docker examples (#1188) (Thanks @PrzemyslawKlys!)
- Update UseConsistentWhitespace documentation to show all options (#1185) (by @bergmeister)
Build
- Make it possible to build ScriptAnalyzer with PowerShell7 (#1256) (by @bergmeister)
- Update signing file for versioned location of module (#1253) (by @JamesWTruher)
- Bump version to 1.18.1 (#1248) (by @bergmeister)
- Change build script to install into a versioned directory (#1247) (by @JamesWTruher)
- Remove code for deprecated rules that is not used any more (#1232) (by @bergmeister)
- Speedup CI builds by skipping the first time initialization of the bootstrapped dotnet CLI (#1211) (by @bergmeister)
- Add suppression of warning for MS policy (#1205) (by @JamesWTruher)
- Change logic for copying profiles into the 'install' directory (#1197) (by @JamesWTruher)
PSScriptAnalyzer v1.18.0
Please see the CHANGELOG for information about the changes in the release. You can download this version from PowerShellGallery.
Breaking Changes
- Minimum required version of
PowerShell Core
was raised from6.0.2
to6.1.0
due to6.0
having reached the end of its support life-cycle. (#1165) - Updated used version of
Newtonsoft.Json
to11.0.2
. (#1165) (by @bergmeister) - Command data files of PowerShell
6.0
were removed. Updated files for PowerShell6.1
were added. This means that users that have customized theUseCompatibleCmdlets
rule, need to either adapt the version string as per rule documentation or can alternatively copy in the old command data files into theSettings
installation folder (#1075) (by @bergmeister) - The minimum required runtime of the full .Net Framework was raised from
4.5.1
to4.5.2
as4.5.1
is not supported any more. If the OS is patched then Windows update will have ensured that the newer runtime patch is available. (#1108) (by @bergmeister) - Emit parsing errors as diagnostic records (#1130) (by @JamesWTruher)
Formatter Rules
- Add
UseCorrectCasing
formatting rule for cmdlet/function name (#1117) (by @bergmeister) - Fix
PSUseConsistentIndentationRule
to handle pipes correctly when there is a multi-line statement after a pipe and addPipelineIndentation
customisation option for it (#1102) (by @bergmeister) - Add
CheckInnerBrace
andCheckPipe
options toPSUseConsistentWhitespace
(#1092) (by @bergmeister)
Script Analysis Rules
- Add command data file for PowerShell
2.0
(#1091) (by @bergmeister) - Add command data files of PowerShell
6.1.0
(#1075) (by @bergmeister) - New PowerShell compatibility rules:
UseCompatibleCommands
,UseCompatibleSyntax
andUseCompatibleTypes
(#1156, #1133, #1176 and #1179) (by @rjmholt and @JamesWTruher) - Make
PossibleIncorrectComparisonWithNull
rule return aSuggestCorrection
for auto-fixes in VS-Code or via the -Fix switch (#1115) (by @bergmeister) - Make UseCompatibleCmdlets not throw if default reference desktop-5.1.14393.206-windows is specified in the list of platforms and use core-6.1.0-windows as an alternative default reference (#1043 and #1075) (by @bergmeister)
Custom Rules
- Translate
RuleSuppressionID
for custom rules as well (#1144) (by @bergmeister) - Allow for suppression of custom rules (#1145) (by @bergmeister)
DSC
- Add support for Hashtable syntax of
Import-DscRessource
for-SaveDscDependency
switch (#1138) (by @bergmeister) - Take module version into account for
-SaveDscDependency
switch (#1094) (by @bergmeister)
Performance
Multi-threading efficiency was highly improved leading to a speedup whilst keeping the CPU usage roughly the same. One can expect PSScriptAnalyzer
(PSSA) 1.18.0 to be more than twice as fast in most situations (including 'cold' runs) compared to its predecessor 1.17.0.
- Increase lock granularity for CommandInfo cache #1166 (by @bergmeister and @rjmholt)
- Restore caching in Helper.GetCommandInfo (#1074) (Thanks @SeeminglyScience!)
Fixes and General Improvements
- Fix bug when culture was set to Turkish (#1095) (by @bergmeister)
- Fix settings file array parsing when no commas are present (#1161) (by @rjmholt)
- Ensure correct disposal with using statement (#1164) (by @bergmeister)
- Fix bug that caused Invoke-ScriptAnalyzer to not run any rule after an execution of Invoke-Formatter in the same session (but Invoke-ScriptAnalyzer would've recovered when being called again) (#1121) (by @bergmeister)
- Fix parsing of empty hashtable when string is provided as settings object (#1073) (by @bergmeister)
- Fix AlignAssignment rule to calculate alignment position correctly and avoid crash (#1070) (by @bergmeister)
- Don't crash on CIM classes with no superclass (#1046) (Thanks @edyoung!)
- Trigger AvoidPositionalParameters rule for function defined and called inside a script. (#963 and #1175) (Thanks @kalgiz! and @bergmeister)
- Add OutputType attributes to cmdlets to enhance tab completion (#1020) (by @bergmeister)
- Allow paths to be pipelined to Invoke-ScriptAnalyzer (#1040) (Thanks @edyoung!)
- PSGallery will no longer use PSAvoidUsingConvertToSecureStringWithPlainText and PSAvoidUsingUserNameAndPasswordParams rules (#1037) (Thanks @edyoung!)
Build
- Update platyps to 0.13 (#1172) (by @bergmeister)
- Raise minimum required PS version of PS 6 to
6.1.0
due to 6.0 running out of support now and update Newtonsoft.Json to11.0.2
(#1165) (by @bergmeister) - Unify reference to
Microsoft.Management.Infrastructure
and updateSystem.Reflection.TypeExtensions
NuGet package (#1105) (by @bergmeister) - Update .Net Core SDK from 2.2.103 to
2.2.104
(latest patch) (#1158) (by @bergmeister) - Make it easier to install the dotnet CLI tools (#1139) (by @JamesWTruher)
- Simplify build scripts even more and upgrade platyPS in Appveyor #1088 (by @bergmeister)
- Upgrade .Net SDK to 2.2.102 to fix new test failures on AppVeyor's Ubuntu image due an image update (#1128) (by @bergmeister)
- Mark setting files as content for easier out-of-the-box debugging (#1104) (by @bergmeister)
- Upgrade from net451 to net452 since net451 is not supported any more and net452 is an in-place upgrade anyway (#1108) (by @bergmeister)
- Install dotnet sdk if missing on Unix as well to fix failing Ubuntu build due to image update and Pester/PowerShell bug (#1107) (by @bergmeister)
- Removes update of pwsh since appveyor images are updated (#1084) (Thanks @wilmardo!)
- Update, simplify, and consolidate build scripts (#1082) (by @JamesWTruher)
- Bump .Net Core SDK version to 2.1.401 (#1086) (Thanks @wilmardo!)
- Use RTM version of
Microsoft.Management.Infrastructure
(#1059) (by @bergmeister) - Upgrade
Microsoft.PowerShell.5.ReferenceAssemblies
from 1.0.0 to1.1.0
and remove redundant/transitive references (#1050) (by @bergmeister) - Remove RuntimeFrameworkVersion as this is given by the running version of PS anyway and .Net would upgrade automatically anyway if possible (#1052) (by @bergmeister)
- Upgrade Nuget packages (
System.Reflection.TypeExtensions
andMicrosoft.CSharp
) and make them more consistent (#1051) (by @bergmeister) - give explicit error on unsupported versions of pscore and document it (#1049) (by @bergmeister)
- Remove old and redundant test settings file core-6.0.0-alpha-windows.json (#1044) (by @bergmeister)
- Use
TLS 1.2
for bootstrapping dotnet in CI (#1047) (by @bergmeister) - Remove redundant/outdated build scripts and cleanup (#1011) (by @bergmeister)
- Upload only out folder as artifact, which is the actual PSSA artifact (#1009) (by @bergmeister)
Documentation
- Fix the "How" section #1127 (Thanks @alexandair!)
- Make the correct example use the declared variable (#1111) (Thanks @f0nt4!)
- Correcting CommunityRules to
CommunityAnalyzerRules
(#1119) (Thanks @kvprasoon!) - Add summary comment to some rules with short description (#1087) (Thanks @pedrocodacy!)
- Update PR template to be more similar to the one of PowerShell but still distinguish where necessary (#1077)
- Update documentation of
PSUseConsistentWhiteSpace
: enhance example and correct argument type. #1069 (Thanks @TheIncorrigible1!) - Update AvoidNullOrEmptyHelpMessageAttribute.md fix typo (#1068) (Thanks @TheIncorrigible1!)