【发布时间】:2015-05-26 20:25:58
【问题描述】:
当我有一个函数,它使用多个Write-Output 命令并返回单个数字时,如何在函数调用者代码中获取数字值?
据我所知,行
[int] $var = Get-MyNumber(...)
告诉我错误
无法将“System.Object[]”类型的“System.Object[]”值转换为“System.Int32”类型。
可能是因为 PowerShell 将一组对象(包含 Write-Output 消息)返回给调用者代码,其中对 [int] 类型变量的分配失败。明白了。
现在,我如何告诉 PowerShell 我只对函数返回的值中的一个值感兴趣,该值的类型为 [int]。
顺便说一句,我不想通过索引返回数组来选择输出,因为我可以通过添加另一个 Write-Output 行来弄乱返回数组中的索引。 (由于代码维护,这迟早会发生)。
代码
function f1() {
Write-Output "Lala"
return 5
}
[int] $x = f1
Write-Output $x
导致同样的错误。
【问题讨论】:
-
你能把
Get-MyNumber的代码贴出来吗? -
如果不想返回多个值,为什么还要多次使用
Write-Output?如果您尝试向用户显示信息,请使用Write-Host(或者更好的是,使用Write-Verbose)。 -
使用Write-Output 没有问题。甚至比 Write-Host 更喜欢它也不是问题(goo.gl/gHEle9 等等......)。这就是 PowerShell 的工作原理,我似乎无法理解它。
-
您在 PowerShell 中必须小心,不要“意外”将某些内容写入输出流,但明确使用 Write-Output 并非偶然。正如@briantist 所说,除了 write-ouptut(如 write-verbose 和 write-debug)之外,还有其他 write-host 选项
-
@MatthewLowe 实际上,一旦您决定返回一个值,即您将使用
Write-Output。否则你不会真正使用它。所以问题是你还用它做什么?我只能考虑编写输出供用户查看,例如状态消息,而Write-Output是该工作的错误工具。
标签: powershell scripting