如何在一行中设置环境变量并执行命令(PowerShell)?

7

如何在PowerShell中一条命令中设置环境变量的值并执行命令?

我有以下代码:

PGPASSWORD=db_pass psql -U db_user -d db_name -a -h localhost -f some.sql

它在Linux系统中运行良好。

如何将上述内容翻译为可在Windows Server 2012 - Windows 10上运行的PowerShell命令?

我尝试了:

SET "PGPASSWORD=db_pass" & "C:\Program Files (x86)\PostgreSQL\9.4\bin\psql.exe" -U postgres -a -d db_name -h localhost -f some.sql

我遇到了错误:"The & is reserved for future use..." - Windows 2012。
2个回答

6

试试这个:

$env:PGPASSWORD='db_pass'; & "C:\Program Files (x86)\PostgreSQL\9.4\bin\psql.exe" -U postgres -a -d db_name -h localhost -f some.sql

实际上这是两个命令,它们用分号隔开以便作为一行运行。

还要注意,在PowerShell中,您可以通过$env:<变量名称>来设置环境变量。


8
实际上,这并不完全等同于问题所涉及的bash命令,因为它在调用命令后仍保留环境变量。而在bash命令中,PGPASSWORD在调用psql后会消失。 - Dustin Wyatt

0

只需在复合列表中添加一个尾随命令: ;$env:PGPASSWORD='' 即可获得 "C:\Program Files (x86)\PostgreSQL\9.4\bin\psql.exe" -U postgres -a -d db_name -h localhost -f some.sql; $env:PGPASSWORD=''

如果该命令以异步方式启动,则您可能需要在命令和最后一次重置变量之间添加一个睡眠时间,否则您可能会在启动的程序使用变量之前重置变量。具体情况因人而异。 这是一个hack,但它比永久将密码留在环境中要好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接