Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Automatically assign command output to a variable in Powershell

Tags:

powershell

Is there a hack to encapsulate all commands in a Powershell session so that all output is tee'd to a temporary variable?

My problem arises when I enter a command Some-Function

I'm fully aware of commands like Tee-Object and -OutVariable that allow me to pipe a function's output to a variable as well as to the console. I could accomplish my goal with the following:

Some-Function | Tee-Object -Variable PSMyCustomTempVariable

However, I often don't know or anticipate whether I need the variable until after I've run already run Some-Function. In this case, it'd be great to have a variable standing by that contains the output from the last function. This is especially helpful for functions that take a while to run like recursive file searches.

I've looked at about_Logging as well as Start-Transcript, but these seem to be concerned with recording text to a file; I need the objects returned by the function.

So, is there any way to modify my session so that any Powershell command Some-Function basically turns into Some-Function | Tee-Object -Variable PSMyCustomTempVariable?

like image 845
Stadem Avatar asked Mar 08 '18 18:03

Stadem


People also ask

How do you assign a value to a variable in PowerShell?

To create a new variable, use an assignment statement to assign a value to the variable. You don't have to declare the variable before using it. The default value of all variables is $null . To get a list of all the variables in your PowerShell session, type Get-Variable .

How do you output a variable in PowerShell?

The echo command is used to print the variables or strings on the console. The echo command has an alias named “Write-Output” in Windows PowerShell Scripting language. In PowerShell, you can use “echo” and “Write-Output,” which will provide the same output.

How do you assign a variable to another variable in PowerShell?

Assigning multiple variables In PowerShell, you can assign values to multiple variables by using a single command. The first element of the assignment value is assigned to the first variable, the second element is assigned to the second variable, the third element to the third variable, and so on.


1 Answers

Not exactly. However,

$Variable = (Some-Function)

will save the output of Some-Function in the variable $Variable, and allow you to then manipulate the data or pass it to other functions later on. To accomplish the equivalent of

Some-Function | Tee-Object -Variable $Variable

which would take the output of Some-Function, save it in $variable, and pass it through the pipe to the next command, you could use

$variable = (Some-Function)
$variable

(or $variable | Next-Command), and accomplish what you appear to want.

like image 170
Jeff Zeitlin Avatar answered Sep 17 '22 16:09

Jeff Zeitlin