Powershell脚本中哪些行返回输出?

Vim*_*mes 2 powershell

通常,有没有一种方便的方法来确定PowerShell脚本/函数的哪些行返回值("未捕获")?我希望有一种方法可以在调试时查询要返回的值的当前状态.我可以在每一行后检查它,看看哪些行添加到它.

我有一些脚本在工作,有些行将我的返回值转换为Object [].我通常将这些线管道输出Out-Null来修复这种情况.我只想要返回一个对象(我在函数末尾选择的对象).

有些行是Cmdlet调用,有些是对其他函数的调用,有些是.NET对象的函数调用.

man*_*lds 6

我想你可以使用它Set-PsDebug -trace 1来查看返回它们的行.

例:

考虑下面的脚本:

function f{
1..10
}

function g{
f
return 11
}

g
Run Code Online (Sandbox Code Playgroud)

完成后Set-PsDebug -trace 1,跟踪将如下所示:

DEBUG:    1+  <<<< .\test.ps1
DEBUG:    1+ function f <<<< {
DEBUG:    5+ function g <<<< {
DEBUG:   10+  <<<< g
DEBUG:    6+  <<<< f
DEBUG:    2+ 1.. <<<< 10
1
2
3
4
5
6
7
8
9
10
DEBUG:    7+ return <<<<  11
11
Run Code Online (Sandbox Code Playgroud)

显然,您可以看到输出的来源.但是如果输出被捕获,你就不会得到它.

此外,如果您不关心正在返回的其他对象,并且只想获得您使用该return语句返回的最后一个对象,则可以始终执行类似(func)[-1]func | select -last 1(如注释中所指出的)以获取最后一个一.