如果声明条件满足但未运行

时间:2018-05-10 17:58:07

标签: powershell

在这个脚本的Main函数中,我有两个if语句,每个语句都有两个在运行之前应该满足的条件。在第一个if语句中,满足两个条件但代码未运行。下面是代码和输出。任何见解都很有价值!

$port= new-object system.io.ports.serialport com4
$port.open()
$gpi= 0
$toggle1 = 0
$toggle2 = 0

function read-com{
$port.write("gpio read 0`r")
$dump = $port.readline()
$script:gpi = $port.readline()
}
function low-com{
C:\Users\ccrcmh1djg\Videos\Reel\default.m4v
}
function high-com{
C:\Users\ccrcmh1djg\Videos\Reel\on-air.m4v
}
function main{
do{
        read-com
        sleep -m 500
        'read-com'
        $toggle1 
        $gpi
        if(($gpi -eq 0) -and ($toggle1 -eq 0)){
            $toggle1 = 1
            $toggle2 = 0
            low-com
           'low-com conditions met'
         }else{write-host 'low-com condition not met'}
         $toggle1
         $gpi
         if(($gpi -eq 1) -and ($toggle2 -eq 0)){
             $toggle1 = 0
             $toggle2 = 1
             high-com
             'high-com conditions met'
         }Else{Write-Host 'high-com condition not met'}
         'loop'

}while ($port.IsOpen)

}
main

输出:

read-com
0
0
low-com condition not met
0
0
high-com condition not met
loop

谢谢!

2 个答案:

答案 0 :(得分:0)

$ gpi可能已被$ com脚中的行更改:gpi = $ port.readline()in low-com function。

答案 1 :(得分:0)

在这种情况下,$ port.ReadLine()可能只需要根据评论中的@Adam进行清理。您可以使用另一个SO用户编写的以下函数来显示控制台中不可见的任何其他字符。

https://stackoverflow.com/a/45356836/4868262

加载该函数,然后写:

$gpi = $port.readline()
$gpi | Debug-String

一旦发现问题某些字符,请尝试使用-replace ''删除它。