当我试图创建一个函数时,我的powershell的行为非常奇怪。为了证明,这里有一个基本函数,我不知道,它计算二次公式:
1 function Get-Quadratic {
2
3 [CmdletBinding()]
4
5 param (
6 [Parameter(Position = 0, Mandatory = $true)]
7 [int32]$a
8 [Parameter(Position = 1, Mandatory = $true)]
9 [int32]$b
10 [Parameter(Position = 2, Mandatory = $true)]
11 [int32]$c
12 )
13
14 Write-Output $a + " " + $b + " " + $c
15 }
如果你尝试用. .quadratic.ps1
加载它,你会得到:
At C:Users(me)DesktopCurplaygroundquadratic.ps1:7 char:11
+ [int32]$a
+ ~
Missing ')' in function parameter list.
At C:Users(me)DesktopCurplaygroundquadratic.ps1:1 char:24
+ function Get-Quadratic {
+ ~
Missing closing '}' in statement block or type definition.
At C:Users(me)DesktopCurplaygroundquadratic.ps1:12 char:1
+ )
+ ~
Unexpected token ')' in expression or statement.
At C:Users(me)DesktopCurplaygroundquadratic.ps1:15 char:1
+ }
+ ~
Unexpected token '}' in expression or statement.
+ CategoryInfo : ParserError: (:) [], ParseException
+ FullyQualifiedErrorId : MissingEndParenthesisInFunctionParameterList
在尝试制作函数时,我一直在学习教程,但我的powershell似乎甚至不喜欢最基本的命令。如果有帮助的话,我的版本是
Major Minor Build Revision
----- ----- ----- --------
5 1 19041 1320
Abraham Zinala提供了关于代码的主要问题的关键指针:
-
param(...)
块内的各个参数声明必须以,
分隔。 -
虽然概念上的about_Functions确实说明了这一要求,但考虑到在其他上下文(
@(...)
、$(...)
和@{ ... }
(中,仅用换行符分隔元素就足够了,这可能不是显而易见的。事实上,有一个现有的功能请求,要求使用,
可选-请参阅GitHub问题#8957。
次要问题是Write-Output $a + " " + $b + " " + $c
无法按预期工作:
-
表达式(例如在您的情况下与
+
运算符串联的字符串(需要(...)
中的外壳,以便将其结果作为单个命令参数传递-请参阅此答案