【问题标题】:How do I create an Environment variable in windows using Powershell that's accessible in a WebApi app?如何使用可在 WebApi 应用程序中访问的 Powershell 在 Windows 中创建环境变量?
【发布时间】:2016-08-17 16:53:48
【问题描述】:

如何使用 Powershell 在 Windows 中创建环境变量,然后可以使用 Environment.GetEnvironmentVariable() 方法在 WebApi 应用程序中访问该环境变量?

这是我尝试过的:

我创建了一个名为 SetEnvironment.ps1 的 powershell 脚本。文件内容为:

[Environment]::SetEnvironmentVariable('TEST', 'testval')

然后我使用以下命令运行脚本:

powershell -ExecutionPolicy ByPass -File .\SetEnvironment.ps1

使用$Env:TEST 命令检查后,我发现环境路径没有保存。

如果我在脚本本身中添加该命令 ($Env:TEST),它就可以工作。但除此之外它不起作用。

我也试过杀死 explorer.exe 并重新启动它。有什么想法吗?

谢谢

【问题讨论】:

  • 看起来有一个重载需要一个target 参数来为机器或用户设置变量:msdn.microsoft.com/en-us/library/96xafkes(v=vs.110).aspx
  • 你的脚本中echo [Environment]::UserName 的输出是什么,它是否与你的PowerShell窗口中的用户名匹配?
  • @AndrewPiliser 如何检查我的 powershell 窗口的用户?我以管理员身份运行 powershell 窗口
  • 我的意思是在两者中运行echo [Environment]::UserName 并比较它们。例如,powershell 命令可能使用标准用户而不是您的管理员。

标签: c# powershell asp.net-web-api environment-variables


【解决方案1】:

您仅为 PowerShell 进程设置环境变量。您需要全局设置一个。

使用EnvironmentVariableTarget 指定您需要的访问权限

[Environment]::SetEnvironmentVariable('TEST', 'testval', [EnvironmentVariableTarget]::Machine)

或者,如果您从 PowerShell 创建一个进程,该进程将继承您可能设置的任何环境变量。如果可以,请这样做,因为我通常不鼓励设置全局环境变量。

【讨论】:

  • 谢谢。我实际上已经尝试过不同的变体(只是将'Machine'作为字符串传递)。但是我尝试了你的方法,它有点工作。当我关闭现有的 powershell 并重新打开它(作为管理员)时,它可以工作。我能够看到 TEST 环境变量。但是我在任何其他 powershell 窗口中都看不到它,也无法从 c# 中的 Environment.GetEnvironmentVariable("TEST") 方法中检索它。有什么想法吗?
  • @Shaz 如果在其他进程已经打开时设置环境变量,则不会更新。当一个新进程被创建时,它会继承它自己的环境变量副本(如果这没有发生,想想如果两个进程试图同时写入一个变量会发生的混乱)。你不能改变另一个进程的变量,只能改变你自己的。您需要关闭并重新启动程序才能获取新值。
  • 谢谢!!有效。当我打开一个新进程时,它起作用了。在 Environment.GetEnvironmentVariable 方法中,我必须使用允许我指定 EnvironmentVariableTarget 的重载
猜你喜欢
  • 1970-01-01
  • 2020-12-30
  • 1970-01-01
  • 2020-02-07
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
  • 2018-02-28
  • 1970-01-01
相关资源
最近更新 更多