繁体   English   中英

PowerShell - 使脚本更精简的建议

[英]PowerShell - advice to get script slimmer

我有以下 PS 脚本,它在两个块中重复相同数量的注册表项。 所以我有两个问题:

  1. 我怎样才能避免重复那长长的 reg 键列表? 我已经尝试将它们添加到分配了 @" "@ 的变量中,但是当我使用该变量而不是 reg 键时,它不起作用

  2. $faultReport 在进入 Catch 块时没有添加,如何解决?

     $faultReport = @() if (Test-Connection $2FQDN -Quiet -count 2) { Try { Invoke-Command -ComputerName $1FQDN -ScriptBlock { Loads of registry keys } } Catch { $faultReport += $1FQDN} } elseif (Test-Connection $2FQDN -Quiet -count 2) { Try { Invoke-Command -ComputerName $2FQDN -ScriptBlock { Loads of registry keys } } Catch { $faultReport += $2FQDN } }

可以将脚本块分配给变量

$scriptBlock = { ... }

您的代码中也有错误:您在第一个if检查$2FQDN (而不是$1FQDN )的连接。

此外,您可以进一步简化代码:if-else 的两个主体是相同的。

我的建议:

$scriptBlock = {
    # Loads of registry keys...
}
$faultReport = @()
$computerName = $null
if (Test-Connection $1FQDN -Quiet -count 2) {
    $computerName = $1FQDN
}
elseif (Test-Connection $2FQDN -Quiet -count 2) {
    $computerName = $2FQDN
}
if ($computerName) {
    try {      
         Invoke-Command -ComputerName $computerName -ScriptBlock $scriptBlock
    }
    Catch {
        $faultReport += $computerName
    }
}

注意:始终使用正确的缩进。 我怎么强调都不够。 它使您自己的代码的阅读和故障排除变得更加容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM