You learn a new thing every day!

I have a number of SAS jobs that are set off as part of Powershell scripts. Currently I pass parameters to them via the sysparm option, using a delimiter within the (single) parameter, as in:

# Powershell code
$prog = "C:\Program Files\SASHome\SASFoundation\9.3\sas.exe"
$arg = "-sysin $base_dir\ccjsu11r.sas -log $base_dir\ccjsu11r.log -sysparm $p_month~$p_year"

$sasjob = New-Object System.Diagnostics.Process
$sasjob.StartInfo = New-Object System.Diagnostics.ProcessStartInfo
$retcode = $false

$sasjob.StartInfo.FileName = $prog
$sasjob.StartInfo.Arguments = $arg
$sasjob.StartInfo.UseShellExecute = $shell
$sasjob.StartInfo.WindowStyle = "Hidden"
$sasjob.StartInfo.RedirectStandardOutput = $true

$null = $sasjob.Start()
$sasjob.WaitForExit()
$RetCode=$sasjob.exitcode

and

/* SAS Code */
%let p_month=%scan(&sysparm,1,~);
%let p_year=%scan(&sysparm,2,~);

-set and %sysget will do that in a much clearer way.