gpt4 book ai didi

powershell - 清除 Powershell 函数中捕获的输出/返回值

转载 作者:行者123 更新时间:2023-12-02 23:40:28 26 4
gpt4 key购买 nike

有没有办法清除函数内部的返回值,以便我可以保证返回值是我想要的?或者也许可以关闭该函数的这种行为?

在此示例中,我希望返回值是一个包含 ("Hello", "World") 的 ArrayList

function GetArray() 
{
# $AutoOutputCapture = "Off" ?
$myArray = New-Object System.Collections.ArrayList
$myArray.Add("Hello")
$myArray.Add("World")

# Clear return value before returning exactly what I want?
return $myArray
}

$x = GetArray
$x

但是,输出包含从“添加”操作捕获的值。

0
1
Hello
World

我发现 Powershell 的这个“功能”非常烦人,因为它让你很容易通过调用另一个函数来破坏你的函数,而你不知道该函数返回了一个值。

更新

我知道有一些方法可以防止捕获输出(如下面的答案之一所述),但这需要您知道函数实际上返回一个值。如果您正在调用另一个 Powershell 函数,将来有人可能会更改此函数以返回一个值,这将破坏您的代码。

最佳答案

我也遇到了同样的问题。在 PS 中,函数将返回所有输出管道信息。 | 变得很棘手Out-Null 函数中的其余代码。我通过将返回变量作为引用参数传递来解决这个问题 [ref] 。这始终有效。检查下面的示例代码。注意:某些语法对于避免错误很重要。例如参数必须在括号中传递 ([ref]$result)

function DoSomethingWithFile( [ref]$result, [string]$file )
{
# Other code writing to output
# ....

# Initialize result
if (Test-Path $file){
$result.value = $true
} else {
$result.value = $false
}
}
$result = $null
DoSomethingWithFile ([ref]$result) "C:\test.txt"

关于powershell - 清除 Powershell 函数中捕获的输出/返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24548723/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com