用变量打开串口

Open Serial Port with variable

我想在我的 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

我做错了什么?

您调用的函数有误,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