自动将命令输出分配给Powershell中的变量

时间:2018-03-08 18:05:13

标签: powershell

是否存在将所有命令封装在Powershell会话中的黑客攻击,以便 所有 输出转换为临时变量?

当我输入命令Some-Function

时出现问题

我完全了解像Tee-Object-OutVariable这样的命令,它允许我将函数的输出传递给变量以及控制台。我可以通过以下方式实现我的目标:

Some-Function | Tee-Object -Variable PSMyCustomTempVariable

但是,在我运行已经运行Some-Function之前,我经常不知道或预测是否需要变量。在这种情况下,拥有一个包含最后一个函数输出的变量是很好的。这对于需要一段时间才能像递归文件搜索一样运行的函数特别有用。

我查看了about_Logging以及Start-Transcript,但这些似乎与将文本录制到文件有关;我需要函数返回的对象。

那么,有没有办法修改我的会话,以便任何Powershell命令Some-Function基本上变成Some-Function | Tee-Object -Variable PSMyCustomTempVariable

2 个答案:

答案 0 :(得分:1)

不完全是。然而,

$Variable = (Some-Function)

会将Some-Function的输出保存在变量$Variable中,然后允许您操作数据或稍后将其传递给其他函数。

相当于

Some-Function | Tee-Object -Variable $Variable

将输出Some-Function,将其保存在$variable通过管道将其传递给下一个命令,您可以使用

$variable = (Some-Function)
$variable

(或$variable | Next-Command),并完成您想要的内容。

答案 1 :(得分:0)

SetPSReadlineKeyHandler对我有用。以下代码在按Shift+Enter后的行结尾后插入变量赋值。

Set-PSReadlineKeyHandler -Chord "Shift+Enter" -Description "Tee function output to `$PSLastVariable"  -ScriptBlock{
    [Microsoft.PowerShell.PSConsoleReadLine]::Insert(" | Tee-Object -Variable PSLastVariable")
    [Microsoft.PowerShell.PSConsoleReadLine]::AcceptLine()
}

Some-Function #{Shift+Enter}
$var = $PsLastVariable

可能不应该为Enter设置此KeyHandler,因为这会破坏Powershell的多线功能。