gpt4 book ai didi

powershell - 如何避免在返回值中将数据打印到标准输出?

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

在进行一些 Powershell 自动化时,我在自动捕获由 .cmd 文件写入标准输出的数据的方式上遇到了麻烦。我有两个函数执行如下操作:

function a {
& external.cmd # prints "foo"
return "bar"
}

function b {
$val = a
echo $val # prints "foobar", rather than just "bar"
}

基本上,external.cmd 发送到 stdout 的数据会添加到 a 的返回值中,尽管我真正想从 a< 返回的所有数据 是我指定的字符串。我怎样才能防止这种情况发生?

最佳答案

以下是处理此问题的几种不同方法:

  • 捕获 .cmd 脚本的输出:

      $output = & external.cmd # saves foo to $output so it isn't returned from the function
  • 将输出重定向为 null(将其丢弃)

      & external.cmd | Out-Null # throws stdout away
  • 将其重定向到文件

      & external.cmd | Out-File filename.txt
  • 通过在函数返回的对象数组中跳过它,在调用者中忽略它

      $val = a
    echo $val[1] #prints second object returned from function a (foo is object 1... $val[0])

在 PowerShell 中,代码未捕获的任何输出值都会返回“调用者”对象(包括 stdout、stderr 等)。因此,您必须捕获或通过管道将其传递给不返回值的内容,否则您最终将得到 object[] 本身作为函数的返回值。

return 关键字实际上只是为了清楚起见,其效果与单独写入变量(如图所示)完全相同,但会立即退出 PowerShell 中的脚本 block 。像这样的东西甚至可以工作(不是逐字逐句,只是为了给你一个想法):

function foo()
{
"a"
"b"
"c"
}

PS> $bar = foo
PS> $bar.gettype()
System.Object[]
PS> $bar
a
b
c

function foobar()
{
"a"
return "b"
"c"
}

PS> $myVar = foobar
PS> $myVar
a
b

关于powershell - 如何避免在返回值中将数据打印到标准输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4660966/

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