为Foreach语句输出true值

时间:2015-08-03 14:57:50

标签: powershell hyper-v

我正在尝试输出检查条件是否匹配的值,而是输出返回值是否为真。

3 tests complete
Test duration: 873 ms
The following leaks were detected:lr

npm ERR! Test failed.  See above for more details.

但是我得到的输出在所有情况下都是正确的,其中VM名称仅存在于comp1中。

$result = "VM name"

$name= get-content C:\monitor\Serverlist\Serverlist2.txt
    foreach($nam1 in $name)

    { 
    #Write-output $nam1
    $l=Get-Vm -computername $nam1 |out-string


           foreach ($l2 in $l)
            {
             if ( $l2 = $result ) 
            {
             Write-Output $input "is in" $nam1

             }

             else

             {
           ""
             }
            }
           }

if语句是否应该返回条件?我也尝试在第一个foreach循环之外循环if语句但是这给了我最后一个comp" comp3"的结果。甚至匹配的结果都在comp1中。 我想错的任何想法?

1 个答案:

答案 0 :(得分:2)

=符号不用于条件测试,它用于设置值:

        if ( $l2 = $result ) 
        {
         Write-Output $input "is in" $nam1
        }

应该是...... (请注意我使用-eq来测试相等性)

        if ( $l2 -eq $result ) 
        {
         Write-Output $input "is in" $nam1
        }

但即使这样也行不通。您在stringVirtualMachine对象之间的条件测试无法正常工作。这就是你想要的......

        if ( $l2.Name -eq $result ) 
        {
         Write-Output $input "is in" $nam1
        }

在上面的代码段中,我使用您的变量对VirtualMachine.Name(类型string)进行了条件测试。