Попробуйте:
$file = "C:\Source\asdf.csv"
$user = "user"
$pass = "pass"
$hst = "host"
$path="C:\ProgramFiles\psftp.exe"
$cmd = @(
"cd ..",
"cd upload",
"put $file",
"bye"
)
$cmd | & $path -pw $pass "$user@$hst"
В ответе на вопросы в комментарии:
Первая часть, "$ cmd |" передает содержимое $ cmd в следующую команду. Поскольку это внешняя программа (в отличие от командлета или функции), она отправляет содержимое $ cmd на стандартный ввод внешней программы.
В части "& $ path" говорится, что содержимое $ path следует рассматривать как имя команды или программы и выполнять его.
Остальная часть строки передается внешней программе в качестве аргументов командной строки.