SET
ist ein Alias für Set-Variable
, aber Powershell-Variablen sind keine Umgebungsvariablen. Um eine Umgebungsvariable festzulegen, müssen Sie $env:
verwenden Umfang. Versuchen Sie:
$env:PGPASSWORD = 'myPwd';
Siehe auch hier für mehr über Umgebungsvariablen.
Außerdem glaube ich nicht, dass Sie damit durchkommen, rohe Eingaben in PowerShell in die Befehlszeile zu schreiben. Ich denke, es behandelt die Dinge als separate Befehle, aber ich könnte mich irren.
Sie können auch den Befehlsschalter verwenden (-c
) und das PowerShell-Stopp-Parsing-Symbol (--%
), wenn Sie psql aufrufen, um zu verhindern, dass PowerShell Ihre Befehlszeichenfolge analysiert:
.\psql --% -U postgres -w MyDatabase -c "copy {'SELECT * FROM table';} TO 'C:\Users\e\Desktop\test1.csv' CSV DELIMITER ',';"
Oder setzen Sie die Befehle auf eine Variable mit Here-Strings und leiten Sie diese an psql:
weiter$query = @'
copy {'SELECT * FROM table';} TO 'C:\Users\e\Desktop\test1.csv' CSV DELIMITER ',';
'@
$query | .\psql -U postgres -w MyDatabase
Oder ungefähr ein Dutzend andere Möglichkeiten, eine ausführbare Datei aufzurufen.