Powershell foreach l oop с оператором if оценивает только первый оператор - PullRequest
0 голосов
/ 17 января 2020

Итак, у меня есть фрагмент моего кода ниже. В основном это цикл от 1 до пользовательского ввода. Каждый l oop генерирует случайное число от 1 до 4 (включительно), а затем на основе этого числа печатает указанный документ c word на принтер по умолчанию.

Если я просто запускаю код без все операторы if / elseif, печатающие только значение $ run, работают нормально.

Однако, если я добавлю операторы if / elseif, он напечатает только номер файла 1.docx.

Есть идеи, почему значение $ run кажется равным 1, когда я использую оператор if / elseif?

Код -

1..$count | foreach { $ran = random -Minimum 1 -Maximum 5
    if ($ran = 1) {
    Start-Process -FilePath "file1" -Verb Print
    Wait-Process "WINWORD"
    }
Elseif ($ran = 2){

    Start-Process -FilePath "file2" -Verb Print
    Wait-Process "WINWORD"
    }
elseif ($ran = 3){

    Start-Process -FilePath "file3" -Verb Print
    Wait-Process "WINWORD"
    }
elseif ($ran = 4){

    Start-Process -FilePath "file4" -Verb Print
    Wait-Process "WINWORD"
    }
else {

    Write-Output "Something went wrong!"
    pause
    }
    }

1 Ответ

0 голосов
/ 17 января 2020

Оператор switch намного красивее и проще в использовании, чем тонна операторов IF, которые вы использовали. Вот синтаксис для switch /

$x = Get-Random -Minimum 1 -Maximum 7
    switch ($x)
    {
        1 {"x was 1"}
        {$_ -in 2,3} {"x was 2 or 3"}
        4 {"x was 4"}
        Default {"x was something else"}
    }

Вы очень просто указываете сравнение, просто сопоставляя значение переменной. Вы также можете использовать скрипт-блок для более сложной логики c. Наконец, Default обрабатывает все остальное, что явно не разрешено другими операторами.

А вот как начать переписывать код с помощью оператора switch.

1..$count | foreach { 
    $ran = random -Minimum 1 -Maximum 5
    switch ($ran){
        1{
        Start-Process -FilePath "file1" -Verb Print
        Wait-Process "WINWORD"
    }
        2{
        Start-Process -FilePath "file2" -Verb Print
        Wait-Process "WINWORD"
    }
    #finish the rest here ? ?
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...