Pedro Lobito
Pedro Lobito

Reputation: 99081

Expand variable inside single quotes

How can I expand $pw inside single quotes?

$pw = "$PsHome\powershell.exe"
cmd.exe /c 'schtasks /create /tn cleanup /tr "$pw -WindowStyle hidden -ExecutionPolicy Bypass -nologo -noprofile %TEMP%\exec.ps1" /sc minute /mo 1'

Upvotes: 27

Views: 54423

Answers (2)

Ansgar Wiechers
Ansgar Wiechers

Reputation: 200543

Another option is to use the automatic variable $ExecutionContext:

$pw = "$PsHome\powershell.exe"
$cmd = 'schtasks /create /tn cleanup /tr "$pw -WindowStyle hidden -ExecutionPolicy Bypass -nologo -noprofile %TEMP%\exec.ps1" /sc minute /mo 1'
$cmd = $ExecutionContext.InvokeCommand.ExpandString($cmd)
cmd.exe /c $cmd

Upvotes: 15

Bacon Bits
Bacon Bits

Reputation: 32230

You can use formatting and assign it to another variable:

$pw = "$PsHome\powershell.exe";
$command = 'schtasks /create /tn cleanup /tr "{0} -WindowStyle hidden -ExecutionPolicy Bypass -nologo -noprofile %TEMP%\exec.ps1" /sc minute /mo 1' -f $pw;
cmd.exe /c $command

Or you can use double quotes and escape the inside quotes with quotes:

$pw = "$PsHome\powershell.exe"
cmd.exe /c "schtasks /create /tn cleanup /tr ""$pw -WindowStyle hidden -ExecutionPolicy Bypass -nologo -noprofile %TEMP%\exec.ps1"" /sc minute /mo 1"

Or do the same but use backtick (grave) to escape them:

$pw = "$PsHome\powershell.exe"
cmd.exe /c "schtasks /create /tn cleanup /tr `"$pw -WindowStyle hidden -ExecutionPolicy Bypass -nologo -noprofile %TEMP%\exec.ps1`" /sc minute /mo 1"

Upvotes: 43

Related Questions