我想在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
我在做什么错了?
答案 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