powershell lint 说变量已分配但从未使用过。不,我正在使用

Sho*_*row 5 powershell

目标

我想知道为什么我会收到此消息?

The variable 'existModuleName' is assigned but never used.PSScriptAnalyzer(PSUseDeclaredVarsMoreThanAssignments)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果可能的话,我想重写代码,以便不显示该消息。

我想知道,这是错误还是语法错误?

代码

function Get-SayHeyYou {
    param(
    )
    [bool]$existModuleName = $false
    (1..3) | ForEach-Object {
        if ($_ -eq 2) {
            $existModuleName = $true
        }
    }
    if ($existModuleName) {
        Write-Host "hey you!"
    }
}

Get-SayHeyYou
Run Code Online (Sandbox Code Playgroud)

我的想法

第一次分配后$false。当$_是时2$true被赋值if,并用在最后if

更重要的是,当我运行这段代码时,它会说“嘿你!” 正如预期的那样。我认为变量的范围没有任何问题。

尝试过

我尝试添加Write-Host $existModuleName.

function Get-SayHeyYou {
    param(
    )
    [bool]$existModuleName = $false
    (1..3) | ForEach-Object {
        if ($_ -eq 2) {
            $existModuleName = $true
        }
    }
    if ($existModuleName) {
        Write-Host "hey you!"
        Write-Host $existModuleName
    }
}

Get-SayHeyYou
Run Code Online (Sandbox Code Playgroud)

我补充道Write-Host $ existModuleName。似乎没有什么特别的变化。

该代码的输出如下。

hey you!
True
Run Code Online (Sandbox Code Playgroud)

环境

  • Powershell 7.1.5

  • Windows 10 专业版 21H1

  • VS代码

    • 版本:1.61.2(系统设置)
    • 提交:6cba118ac49a1b88332f312a8f67186f7f3c1643
    • 日期:2021-10-19T14:57:20.575Z
    • 电子:13.5.1
    • 铬:91.0.4472.164
    • Node.js:14.16.0
    • V8:9.1.269.39-电子.0
    • 操作系统:Windows_NT x64 10.0.19043

bri*_*ist 8

这是PSScriptAnalyzer 中众所周知的误报。你没有做错任何事。

\n

您可以使用特殊属性内联禁用它,如下所示:

\n
function Get-SayHeyYou {\n    [Diagnostics.CodeAnalysis.SuppressMessageAttribute(\'PSUseDeclaredVarsMoreThanAssignments\', \'existModuleName\',\n        Justification = \'variable is used in another scope\')]\n    param()\n    [bool]$existModuleName = $false\n    (1..3) | ForEach-Object {\n        if ($_ -eq 2) {\n            $existModuleName = $true\n        }\n    }\n    if ($existModuleName) {\n        Write-Host "hey you!"\n    }\n}\n\nGet-SayHeyYou\n
Run Code Online (Sandbox Code Playgroud)\n

如果您不想修改代码,您也可以通过包含 PSScriptAnalyzer 设置的文件来完全禁用该规则,然后您可以指向 vscode 来查看它。另请参阅此评论和其他一些评论。

\n

这里还有一个示例存储库,展示了 vscode 和自定义规则设置的使用

\n

完全禁用该规则的缺点是,当您分配变量而不使用它时,您将错过合法时间。

\n

但这是目前我们必须应对的权衡。

\n

\xe9\xa0\x91\xe5\xbc\xb5\xe3\x81\xa3\xe3\x81\xa6\xe3\x81\xad\xef\xbc\x81

\n

  • 示例中的“foreach”是“foreach”语句,它与“ForEach-Object”(命令)不同。该语句不会启动新的作用域,因此 PSSA 可以正确分析它。 (2认同)