当我有一个使用多个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
导致同样的错误。
答案 0 :(得分:2)
我从您的编辑中看到您正在使用Write-Output
来显示状态消息。
您应该使用Write-Host
,或者如果您使用的是advanced function,我建议您使用Write-Verbose
并在想要查看时使用-Verbose
调用该功能消息(见about_CommonParameters)。
更新的代码:
function f1() {
Write-Host "Lala"
return 5
}
[int] $x = f1
Write-Host $x
function f1 {
[CmdletBinding()]
param()
Write-Verbose "Lala"
return 5
}
$x = f1
# The "Lala" message will not be seen.
$x = f1 -Verbose
# The "Lala" message will be seen.
Write-Output
似乎在函数之外工作: Write-Output
将输入对象传递给调用者。如果代码直接在主机中执行,而不是在函数或cmdlet中执行,则调用者是主机,主机决定如何处理它。对于powershell.exe(或ISE),它会显示它。
Write-Host
总是写入主机;它不会将任何内容传递给调用者。
另请注意,Write-Output
基本上是可选的。以下几行是等效的:
Write-Output $x
$x