是否存在将所有命令封装在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
?
答案 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的多线功能。