用变量打开串口

时间:2018-10-29 10:13:49

标签: powershell powershell-v2.0

我想在Powershell脚本中打开COM端口:

function openComPort($number, $baud) {
    $port = New-Object System.IO.Ports.SerialPort("COM$number", $baud, "None", 8, "One")
    $port.Open()
    return $port
}
$myOpenedPort = openComPort(1, 9600)

此操作失败

New-Object : Exception calling ".ctor" with "5" argument(s): "Positive number required.
Parameter name: BaudRate"
At line:9 char:20
+     $port = New-Object <<<<  System.IO.Ports.SerialPort("COM$number", $baud, "None", 8, "One")
    + CategoryInfo          : InvalidOperation: (:) [New-Object], MethodInvocationException
    + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand

You cannot call a method on a null-valued expression.
At line:11 char:12
+     $port.Open <<<< ()
    + CategoryInfo          : InvalidOperation: (Open:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

我在做什么错了?

1 个答案:

答案 0 :(得分:2)

您在调用函数时出错,Powershell(与其他语言不同)在调用函数时不需要括号,有关更多信息,请参见about_functions

像这样使用它们将方括号内的所有内容分组为一个项目,该项目将被发送到第一个参数$number,而$baud为空-这会导致您的错误。

正确的语法是:

openComPort 1 9600

编辑:将参数放入param()块中也是一种好习惯(这是使用advanced functions的一步。

并还要设置参数类型以确保您收到正确的输入类型。在这种情况下,它们都是int-因为您只想要一个正整数。

这会将您的功能更新为:

function openComPort {
    Param(
        [int]$number,
        [int]$baud
    )

    $port = New-Object System.IO.Ports.SerialPort("COM$number", $baud, 'None', 8, 'One')
    $port.Open()
    return $port
}
$myOpenedPort = openComPort -number 1 -baud 9600