SET
is een alias voor Set-Variable
, maar Powershell-variabelen zijn geen omgevingsvariabelen. Om een omgevingsvariabele in te stellen, moet u de $env:
. gebruiken domein. Probeer:
$env:PGPASSWORD = 'myPwd';
Zie ook hier voor meer informatie over omgevingsvariabelen.
Ik denk ook niet dat je weg kunt komen met het plaatsen van onbewerkte invoer op de opdrachtregel zoals die in PowerShell. Ik denk dat het dingen als afzonderlijke commando's zal behandelen, maar ik kan het mis hebben.
U kunt ook de opdrachtschakelaar gebruiken (-c
) en het PowerShell-symbool voor stoppen met parseren (--%
) wanneer u psql aanroept om te voorkomen dat PowerShell uw opdrachtreeks ontleden:
.\psql --% -U postgres -w MyDatabase -c "copy {'SELECT * FROM table';} TO 'C:\Users\e\Desktop\test1.csv' CSV DELIMITER ',';"
Of stel de commando's in op een variabele met here-strings en pijp die naar psql:
$query = @'
copy {'SELECT * FROM table';} TO 'C:\Users\e\Desktop\test1.csv' CSV DELIMITER ',';
'@
$query | .\psql -U postgres -w MyDatabase
Of een tiental andere manieren om een uitvoerbaar bestand aan te roepen.