带if语句的Powershell foreach循环只计算第一个语句

带if语句的Powershell foreach循环只计算第一个语句,powershell,if-statement,random,foreach,Powershell,If Statement,Random,Foreach,下面是我的代码片段。基本上,它从1循环到用户输入。每个循环生成一个从1到4(包括1到4)的随机数,然后根据该数字将特定word文档打印到默认打印机 如果我只是在没有所有If/elseif语句的情况下运行代码,只打印$ran的值,那么它工作得很好 但是,一旦我放入if/elseif语句,它只打印文件号1.docx 你知道为什么在我使用if/elseif语句时$ran的值似乎保持为1吗 代码- 1..$count | foreach { $ran = random -Minimum 1 -Maxim

下面是我的代码片段。基本上,它从1循环到用户输入。每个循环生成一个从1到4(包括1到4)的随机数,然后根据该数字将特定word文档打印到默认打印机

如果我只是在没有所有If/elseif语句的情况下运行代码,只打印$ran的值,那么它工作得很好

但是,一旦我放入if/elseif语句,它只打印文件号1.docx

你知道为什么在我使用if/elseif语句时$ran的值似乎保持为1吗

代码-

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
    }
    }

switch语句比您使用的大量IF语句更漂亮、更易于使用。下面是
开关的语法/

$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"}
    }
您可以非常简单地指定比较,只需匹配变量的值。对于更复杂的逻辑,也可以使用scriptblock。最后,
Default
处理其他语句未明确解析的任何内容

下面是如何开始用switch语句重写代码

1..$count | foreach{
$ran=随机-最小1-最大5
交换机($ran){
1{
启动进程-文件路径“file1”-动词打印
等待进程“WINWORD”
}
2{
启动进程-文件路径“file2”-动词打印
等待进程“WINWORD”
}

#在这里完成剩下的部分,
=
用于赋值,而不是比较。[grin]使用
-eq
代替。另外,看看
switch
语句。它非常擅长在一个更整洁的包中进行
if/elseif/else
级联。