环境变量,PowerShell会话与从CMD开始

时间:2017-06-29 13:59:07

标签: powershell variables cmd environment

我正在尝试从命令提示符窗口(以管理员身份运行)中运行PowerShell命令,但它失败了。而当我在PowerShell窗口中运行相同的命令时,它运行正常。

以下是PowerShell窗口中没有错误的命令:

Powershell [Environment]::SetEnvironmentVariable("HostIPv4", "192.168.255.14:", "Machine")

在命令提示符窗口中失败:

C:\test>powershell [Environment]::SetEnvironmentVariable("HostIPv4", "192.168.255.14:", "Machine")
At line:1 char:39
+ [Environment]::SetEnvironmentVariable(HostIPv4, 192.168.255.14:, Mach ...
+                                       ~
Missing ')' in method call.
At line:1 char:39
+ [Environment]::SetEnvironmentVariable(HostIPv4, 192.168.255.14:, Mach ...
+                                       ~~~~~~~~
Unexpected token 'HostIPv4' in expression or statement.
At line:1 char:47
+ [Environment]::SetEnvironmentVariable(HostIPv4, 192.168.255.14:, Mach ...
+                                               ~
Missing argument in parameter list.
At line:1 char:73
+ ... ironment]::SetEnvironmentVariable(HostIPv4, 192.168.255.14:, Machine)
+                                                                         ~
Unexpected token ')' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingEndParenthesisInMethodCall

可能是什么问题?

2 个答案:

答案 0 :(得分:3)

PowerShell的命令行解析删除双引号,尝试使用单引号:

powershell [Environment]::SetEnvironmentVariable('HostIPv4', '192.168.255.14:', 'Machine')

另请注意,您必须重新打开一个新的进程窗口才能看到结果(这是命令shell的已知行为,另请参阅:C# set environment variable

答案 1 :(得分:3)

iRon's helpful answer解释了问题并且有效,但我建议采用一种更强大的方法从cmd.exe 调用PowerShell命令:

  • 明确使用-Command ,因为在PSv6中,默认值将更改为-File,期望脚本文件名而不是命令

  • 使用-NoProfile ,以避免不必要地加载PowerShell配置文件以及更可预测的执行环境。

  • 双重您的整个 PowerShell命令,以保护其免受cmd.exe可能不需要的预先解释

powershell -NoProfile -Command "[Environment]::SetEnvironmentVariable('HostIPv4', '192.168.255.14:', 'Machine')"

在命令字符串中使用'代替" 是一种简单的方法,可以避免转义嵌入{{1} }字符,在这里工作正常,但如果您确实需要嵌入式"(用于插入字符串),请将它们转义为"(原文如此)或\"(原文如此)。