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

kjthegm6  于 2023-03-02  发布在  Shell
关注(0)|答案(2)|浏览(295)

如何在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

我得到一个错误:"&已保留供将来使用..."-Windows 2012。

mefy6pfw

mefy6pfw1#

试试这个:

$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:<name of var>设置环境变量。

uoifb46i

uoifb46i2#

只需在复合列表中添加一个尾随命令:;$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=''
你可能需要在命令和变量最后一次重置之间插入一个sleep,如果命令是异步启动的,否则你可能会在启动的程序使用变量之前重置变量。里程可能会有所不同。这是一个黑客攻击,但它比永远把密码留在环境中更有效。

相关问题