Reputation: 1290
I've seen an example for setting the timestamps (creationtime, lastaccesstime, lastwritetime) of a file with powershell:
PS>$(get-item test.txt).lastwritetime=$(get-date "01/01/2020")
which seems to work.
This page: http://ss64.com/ps/syntax-operators.html about powershell operators says that "$( )"
is a "SubExpression operator".
But it also seems to work without the "$"
like:
PS>(get-item test.txt).lastwritetime=(get-date "01/01/2020")
and most powershell examples I've seen omit the "$"
when using parenthesis.
So, is the "Dollar-sign" optional in powershell "$()"
? Or is there some difference with/without the "$"
that I'm just not seeing.
Is "$()"
and "()"
actually 2 different operators that just happen to both be valid uses in the examples I have shown?
Upvotes: 3
Views: 1681
Reputation: 893
You need the $ sign to denote a sub expression if you use multiple statements or the statement is embedded in a string. Parenthesis without the $ is just a grouping operator.
$($x = 1; $y =2; $x + $y).tostring() //3
($x = 1; $y =2; $x + $y).tostring() // invalid syntax
($x = 1 + 2).tostring() //3
"$(1 +2)" //3
Upvotes: 3
Reputation: 72610
The first time I need of $()
was inside a string :
$a = Get-Process "explorer"
Write-host "$a.Name" -> System.Diagnostics.Process (explorer).Name
Write-Host "$($a.Name)" -> explorer
I also use it each time I want PowerShell to force compute something first.
Upvotes: 0