ca9163d9
ca9163d9

Reputation: 29159

What's the command of call operator &?

I used ls alias: and tried to find &. However, & is not in the output. What's &? Is it the combination of Invoke-Command and Invoke-Expression?

Are there any other operators which don't have a cmdlet in PowerShell?

Upvotes: 15

Views: 18422

Answers (2)

js2010
js2010

Reputation: 27423

Some other uses for the call operator, not well documented:

# Get and set a variable in a module scope with the call operator 
# get module object
$m = get-module counter

& $m Get-Variable count
& $m Set-Variable count 33

# see module function definition
& $m Get-Item function:Get-Count

# run a cmdlet with a commandinfo object and the call operator
$d = get-command get-date
& $d

You can think of & { } as an anonymous function.

1..5 | & { process{$_ * 2} }

Another really useful operator is the subexpression operator. $( ) It's not just for inside strings. You can combine two statements and make them act as one.

$(echo hi; echo there) | measure

If and Foreach statements can go inside them too. You couldn't normally pipe from foreach (). So anywhere you could put an expression or pipeline, with $() you can put any statement or group of statements.

$(foreach ($i in 1..10) { $i;sleep 1 } ) | Out-Gridview

Although, I like streaming from foreach with the call operator (or function), so I don't have to wait.

 & {foreach ($i in 1..10) { $i;sleep 1 } } | Out-GridView

Upvotes: 4

Lachie White
Lachie White

Reputation: 1251

The call operator & allows you to execute a command, script or function.

Many times you can execute a command by just typing its name, but this will only run if the command is in the environment path. Also if the command (or the path) contains a space then this will fail. Surrounding a command with quotes will make PowerShell treat it as a string, so in addition to quotes, use the & call operator to force PowerShell to treat the string as a command to be executed.

PowerShell Call Operator

I am not sure of all the operators that are in PowerShell, but another really useful one is --%, used to stop parsing.

The stop-parsing symbol --%, introduced in PowerShell 3.0, directs PowerShell to refrain from interpreting any further input on the line as PowerShell commands or expressions.

PowerShell Stop Parsing Operator

Building on the comments that have been made:

Get-Help About_Operators

It will show you the best overview of all operator types and abstract ones like the Call and Stop Parsing Operators.

Upvotes: 20

Related Questions