我正在尝试从命令提示符窗口(以管理员身份运行)中运行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
可能是什么问题?
答案 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} }字符,在这里工作正常,但如果您确实需要嵌入式"
(用于插入字符串),请将它们转义为"
(原文如此)或\"
(原文如此)。