Неправильная точка выхода Powershell из условия - PullRequest
1 голос
/ 08 мая 2020

У меня есть эта часть моего кода:

# Check how the kstart servers accessible
ping -n 1 sg-start-6001
$sgkstartcheck = $?

If($sgkstartcheck -ne 'True'){
$sgkstart = "10.104.170.250"
}
else {
$sgkstart = "sg-start-6001"
}

ping -n 1 am-start-4001.
$amkstartcheck = $?

If($amkstartcheck -ne 'True'){
$amkstart = "10.201.180.250"
}
else {
$amkstart = "am-start-4001"
}

ping -n 1 sh-start-8001
$shkstartcheck = $?

If($shkstartcheck -ne 'True'){
$shkstart = "10.113.170.250"
}
else {
$shkstart = "sh-start-8001"
}

ping -n 1 as-start-3001
$askstartcheck = $?

If($askstartcheck -ne 'True'){
$askstart = "10.46.160.250"
}
else {
$askstart = "as-start-3001"
}

ping -n 1 bk-start-1001
$bkkstartcheck = $?

If($bkkstartcheck -ne 'True'){
$bkkstart = "10.120.195.251"
}
else {
$bkkstart = "bk-start-1001"
}

$installfile = "windows/winlogbeat-6.2.4-windows-x86_64.zip"
$filebeatforwininstallfile = "windows/filebeat-6.2.4-windows-x86_64.zip"
$filename = "C:\winlogbeat-6.2.4-windows-x86_64.zip"
$filebeatfilename = "C:\filebeat-6.2.4-windows-x86_64.zip"
$webClient = New-Object System.Net.WebClient
$webClient.Proxy = [System.Net.GlobalProxySelection]::GetEmptyWebProxy()

if($site -eq 'HKG1') {$webClient.DownloadFile("http://hk-rep-2001/$installfile",$filename)}
elseif($site -eq 'AMS4') {$webClient.DownloadFile("http://$amkstart/$installfile",$filename)}
elseif($site -eq 'SIN1' -or 'SIN3') {$webClient.DownloadFile("http://$sgkstart/$installfile",$filename)}
elseif($site -eq 'SHA1' -or 'SHA2') {$webClient.DownloadFile("http://$shkstart/$installfile",$filename)}
elseif($site -eq 'ASH1') {$webClient.DownloadFile("http://$askstart/$installfile",$filename)}
elseif($site -eq 'BKK1') {$webClient.DownloadFile("http://$bkkstart/$installfile",$filename)}

Сайт - ASH1.

Почему скрипт пытается загрузить со значением SIN?

Сайт - ASH1, почему он идет в SIN elseif?

Вроде потому что в пинг-тесте грех первый и это правда, но было установлено пару 10000 vms с этим скриптом, и он только что пришел: /

1 Ответ

0 голосов
/ 08 мая 2020

$site -eq 'SIN1' -or 'SIN3'

должно быть:

$site -eq 'SIN1' -or $site -eq 'SIN3'

или, идиоматически в PowerShell:

$site -in 'SIN1', 'SIN3'

... -or 'SIN3' обрабатывает RHS как логическое значение, а любая непустая строка считается $true в логическом контексте, поэтому общее условие всегда истина.


В качестве отступления: Лучше избегать сравнения логических значений со строками ; вместо $askstartcheck -ne 'True' используйте $askstartcheck -ne $true или, желательно, -not $askstartcheck

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...