SET
är ett alias för Set-Variable
, men Powershell-variabler är inte miljövariabler. För att ställa in en miljövariabel måste du använda $env:
omfattning. Försök:
$env:PGPASSWORD = 'myPwd';
Se även här för mer om miljövariabler.
Dessutom tror jag inte att du kan komma undan med att lägga rå input på kommandoraden så i PowerShell. Jag tror att det kommer att behandla saker som separata kommandon, men jag kan ha fel.
Du kanske också vill använda kommandoväxeln (-c
) och PowerShell slutar tolka symbolen (--%
) när du anropar psql för att förhindra PowerShell från att analysera din kommandosträng:
.\psql --% -U postgres -w MyDatabase -c "copy {'SELECT * FROM table';} TO 'C:\Users\e\Desktop\test1.csv' CSV DELIMITER ',';"
Eller ställ in kommandona till en variabel med here-strings och pipe that till psql:
$query = @'
copy {'SELECT * FROM table';} TO 'C:\Users\e\Desktop\test1.csv' CSV DELIMITER ',';
'@
$query | .\psql -U postgres -w MyDatabase
Eller ett dussintal andra sätt att anropa en körbar fil.