Foreach 语句的输出真值

Output true value for Foreach statement

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

$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

             {
           ""
             }
            }
           }

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

VM name is in comp1
VM name is in comp2
VM name is in comp3

If 语句是否应 return 条件是否匹配?我还尝试在第一个 foreach 循环之外循环 if 语句,但这给了我最后一个 comp "comp3" 的结果,即使匹配结果在 comp1 中。 知道我哪里出错了吗?

=符号不是条件测试,是设置值:

        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)进行条件测试。