【发布时间】:2019-12-12 16:22:12
【问题描述】:
脚本的目的是捕捉到 Elasticsearch 的错误登录,并提供机会重新尝试输入密码。这个想法是通过在$result = Invoke-RestMethod $uri -Credential $credential 步骤之后添加i++ 来计算循环迭代,但事实证明-ErrorAction SilentlyContinue 进程在它位于try{} 部分的情况下被忽略,所以我将循环计数移动到finally {$i++} 部分,但缺点是最后一个Attempt 5 没有通过条件while ($i -lt 6) 因为它是5+1 在finally {$i++} 部分。
$elasticsearch_pass = Read-Host "Enter ELASTICSEARCH password"
$uri = "https://${elasticsearch_ip}:9200"
$user = "static_user"
$i = 1
while ($i -lt 6) {
try {
Write-Host -ForegroundColor Cyan `n ("Trying to connect to elasticsearch. Attempt $i")
$secpasswd = ConvertTo-SecureString $elasticsearch_pass -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($user, $secpasswd)
$result = Invoke-RestMethod $uri -Credential $credential
if ($result.tagline -eq 'You Know, for Search') {
Write-Host -ForegroundColor Green `n ("Connection to elasticsearch {0} established..." -f $elasticsearch_ip)
break
}
}
catch {
Write-Host -ForegroundColor Red $_
if ("$_" -eq "Unauthorized") {
$elasticsearch_pass = Read-Host `n "Wrong elasticsearch password! Pls enter correct one"
}
}
finally {$i++}
}
设置静态循环迭代计数和执行最后一次尝试的最佳方法是什么?
【问题讨论】:
-
For 循环对我来说似乎是一个合理的替代方案。
标签: powershell loops iteration