PowerShell函数中的类型转换问题

Nav*_*een 11 powershell

我是PowerShell脚本的新手,正在尝试Function.这是我写的代码:

Function Add
{
   $sum = 0;
   for($i = 0; $i -le $args.length; ++$i)
   {
     [int] $num = $args[$i]
     $sum += $num
   }
   Write-Output "Sum is $sum"
}
Run Code Online (Sandbox Code Playgroud)

我试着打电话使用Add 1,2,3.但是,当我执行时,我收到以下错误:

无法将"System.Object []"类型的"System.Object []"值转换为"System.Int32"类型.

知道如何解决这个问题吗?

JPB*_*anc 21

Powershell中的Big TRAP","是数组运算符,只需在命令行中尝试:

PS> 1,2,3
Run Code Online (Sandbox Code Playgroud)

你会看到阵列

PS> (1,2,3).gettype()
IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array
Run Code Online (Sandbox Code Playgroud)

所以试着打电话:

PS> Add 1 2 3
Sum is 6
Run Code Online (Sandbox Code Playgroud)

并且不要忘记在Powershell中你正在玩.NET的顶级对象

所以你有两个朋友:

  1. gettype(),让你的对象的类型的方法
  2. Get-Membercmdlet将有助于您对性能和对象的方法

Get-member有许多参数可以提供帮助.


Emi*_*ggi 5

通常执行强制转换并在右侧分配类型:

$num = [int] $args[$i]

这可能是你的问题吗?


第二次观察:

正如 @JPBlanc 所观察到的,您将一个数组传递给函数,而不是三个参数。使用:

添加 1 2 3

你会得到它的。无论如何,在这种情况下你不需要铸造。可能在这个:

添加“1”“2”“3”

显然你可以继续像这样调用你的函数Add 1,2,3,但你需要将其更改如下:

函数添加{
   参数[0] | % {$sum=0}{$sum+=$_}{write-output "总和是 $sum"}
}