为什么收到警告“变量'lastUpdate'已分配但从未使用过”。在此PowerShell中

时间:2019-07-15 04:28:39

标签: powershell visual-studio-code scope

在这段代码中,我收到了PSScriptAnalyzer发出的“ UseDeclaredVarsMoreThanAssignments”警告

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
     base.OnActivityResult(requestCode, resultCode, data);
     AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs(requestCode, resultCode, data);
}

触发警告的变量在此行中为$lastUpdate = $false; $shouldUpdate = $false; if (Test-Path $logfile) { (Get-Content $logfile) | Where-Object { $_ -match "([^-]*)->\s*UpdateCheck" } | ForEach-Object { $lastUpdate = $Matches[1] } if ($lastUpdate) { $shouldUpdate = (Get-Date $Matches[1]) -lt ((Get-Date).AddDays(-7)) } else { $shouldUpdate = $true; } }

$lastUpdate

尽管在下一行中使用了它。

这是我的代码有问题吗-我猜这与范围和$lastUpdate = $Matches[1] 循环有关-还是VSCode中的PSScriptAnalyzer有问题?

1 个答案:

答案 0 :(得分:0)

如评论中所述,该错误在#1164处发布

作为解决方法,您可以考虑使用NSAnimationContext.runAnimationGroup( { current in current.allowsImplicitAnimation = false current.duration = 0 outlineView.scrollRowToVisible(selectedRows.first!) }, completionHandler: nil) 语句而不是ForEach cmdlet(请参阅:Difference between ForEach and ForEach-Object in powershell):

ForEach-Object

就您而言,您甚至可以将语句简化为:

ForEach ($Item in ((Get-Content $logfile) | Where-Object {$_ -match "([^-]*)->\s*UpdateCheck"})) {
    $lastUpdate = $Matches[1]
}

在此示例中,$lastUpdate = (Get-Content $logfile) | Where-Object {$_ -match "([^-]*)->\s*UpdateCheck"} 表示匹配项集合,如果包含一个或多个项目,则强制转换为$lastUpdate,如果不包含任何匹配项,则强制转换为$True。 / p>