SET
е псевдоним за Set-Variable
, но променливите на Powershell не са променливи на средата. За да зададете променлива на средата, трябва да използвате $env:
обхват. Опитайте:
$env:PGPASSWORD = 'myPwd';
Вижте също тук за повече информация относно променливите на средата.
Също така, не мисля, че можете да се измъкнете с поставянето на необработен вход в командния ред като този в PowerShell. Мисля, че ще третира нещата като отделни команди, но може и да греша.
Може също да искате да използвате командния превключвател (-c
) и символът за спиране на анализирането на PowerShell (--%
), когато извиквате psql, за да попречите на PowerShell да анализира вашия команден низ:
.\psql --% -U postgres -w MyDatabase -c "copy {'SELECT * FROM table';} TO 'C:\Users\e\Desktop\test1.csv' CSV DELIMITER ',';"
Или задайте командите на променлива с here-strings и препратете това към psql:
$query = @'
copy {'SELECT * FROM table';} TO 'C:\Users\e\Desktop\test1.csv' CSV DELIMITER ',';
'@
$query | .\psql -U postgres -w MyDatabase
Или около дузина други начини за извикване на изпълним файл.