SET
es un alias para Set-Variable
, pero las variables de Powershell no son variables de entorno. Para establecer una variable de entorno, debe usar $env:
alcance. Prueba:
$env:PGPASSWORD = 'myPwd';
Consulte también aquí para obtener más información sobre las variables de entorno.
Además, no creo que pueda salirse con la suya poniendo una entrada sin procesar en la línea de comando como esa en PowerShell. Creo que tratará las cosas como comandos separados, pero podría estar equivocado.
También puede usar el interruptor de comando (-c
) y el símbolo de parada de análisis de PowerShell (--%
) cuando llame a psql para evitar que PowerShell analice su cadena de comando:
.\psql --% -U postgres -w MyDatabase -c "copy {'SELECT * FROM table';} TO 'C:\Users\e\Desktop\test1.csv' CSV DELIMITER ',';"
O establezca los comandos en una variable con here-strings y canalícelos a psql:
$query = @'
copy {'SELECT * FROM table';} TO 'C:\Users\e\Desktop\test1.csv' CSV DELIMITER ',';
'@
$query | .\psql -U postgres -w MyDatabase
O alrededor de una docena de otras formas de llamar a un ejecutable.