powershell $ var имеет значение, но когда в операторе if - получает false - PullRequest
1 голос
/ 06 апреля 2020

Просто создаю маленькое меню для увеличения. Пользователь вставляет свой выбор, и скрипт автоматически открывает масштаб для указанного сеанса c. Проблема в if (($ hashTable. $ Selection) .Count -gt 1) , где $ selection действительно имеет значение 1 (если я нажал 1), но выражение всегда становится ложным - поэтому оно переходит к оператор else.

Цель состоит в том, чтобы иметь в таблице ha sh только номер сеанса или номер сеанса и пароль. После проверки, есть ли более одного значения для ключа, я выбрал свое действие.

$ selection содержит число, которое вводит пользователь - так почему $ hashTable. $ Selection пусто?

$hashTable = @{
    1 = '6108514938', 'f'
    2 = 'Val2'
    3 = 'Val3'
}

function Show-Menu
{
    param (
        [string]$Title = 'My Menu'
    )
    Clear-Host
    Write-Host "================ $Title ================"

    Write-Host "1: Press '1' for Algorithms."
    Write-Host "2: Press '2' for this option."
    Write-Host "3: Press '3' for this option."
    Write-Host "Q: Press 'Q' to quit."
}

do
 {
     Show-Menu –Title 'ZOOM Menu'
     $zoomBaseLink = 'zoommtg://zoom.us/join?confno='
     $selectedSession = $null
     
     $selection = Read-Host "Please select session"
     switch ($selection)
     {
         '1' { $selectedSession = ($hashTable.1) } 
         '2' { $selectedSession = ($hashTable.2) }
         '3' { 'You chose option #3' }
     }

     if($selection -ne 'q') {
         if (([string]::IsNullOrEmpty($selectedSession)))  { 
            Write-Host 'session is null or empty' 
         }
         else {
         Write-Host $selection
         Write-Host $selectedSession

         pause
         <#($hashTable.$selection) always gets false.#>
         if (($hashTable.$selection).Count -gt 1) { Write-Host 'here 1'; Write-Host $hashTable.$selection[1] }
         else{ Write-Host 'here 2'; Write-Host ($zoomBaseLink + $selectedSession) }
         }
         $selectedSession = $null
         }
         pause
 }
 until ($selection -eq 'q')

1 Ответ

2 голосов
/ 06 апреля 2020

Проблема в том, что вы не преобразовали переменную $selection в целое число.

[int]$selection = [convert]::ToInt32($selection, 10)

Если вы сделаете это первым, она будет работать (проверено):

if($selection -ne 'q') {
     if (([string]::IsNullOrEmpty($selectedSession)))  { 
        Write-Host 'session is null or empty' 
     }
     else {
           Write-Host $selection
           Write-Host $selectedSession

           pause
           [int]$selection = [convert]::ToInt32($selection, 10)
           <#($hashTable.$selection) always gets false.#>
           if (($hashTable.$selection).Count -gt 1) { Write-Host 'here 1'; Write-Host $hashTable.$selection[1] }
           else{ Write-Host 'here 2'; Write-Host ($zoomBaseLink + $selectedSession) }
     }
$selectedSession = $null
[string]$selection = $null
}
pause

Пожалуйста, дайте мне знать, если это сработало, и если это сработало, отметьте мой пост как ответ:)

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