我精通 bash,但无法理解 PowerShell 中的环境。是否有任何等效方法可以/usr/bin
将可执行文件添加到环境中?环境在 PowerShell 中如何表示 - 其类型是什么?
答案1
*nix 文件系统绝对没有什么特别之处/usr/bin
,除了它是所有用户的默认 PATH 环境变量中的位置。Windows 具有相同的环境变量,但所有用户的默认位置只有C:\Windows\System32
.
你能使用 System32 作为 bin 文件夹,但您也可以只为 bins 创建一个新文件夹。C:\bin
可以工作,但默认情况下所有用户都可以写入,因此您可能需要调整权限,然后可以将其添加到计算机范围的 PATH 环境变量中,以便所有用户都可以轻松地从中运行。或者,考虑bin
每个用户目录中的文件夹,其路径位于用户的每个用户 PATH 环境变量中(当在用户和计算机存储中都定义了环境变量时,它在实际使用中会连接起来,首先是机器)。
PowerShell 将所有环境变量放在名为 Env: 的虚拟“驱动器”中(类似于文件的 C: 或 HKLM 注册表配置单元的 HKLM:)。在此处阅读更多相关信息:http://ss64.com/ps/syntax-env.html您可以像访问$env:<VARNAME>
其他变量一样通过(类型为String);例如,你可以附加到 PATH(注意:Windows 环境变量名不区分大小写)如下:
$env:path = $env:path + ";C:\foo\bar\baz"
不过,这只针对当前进程(及其子进程)进行设置。如果您想将值存储在注册表中,以便其他进程甚至其他用户可以看到它们(注意:编辑影响其他用户的环境变量需要管理员权限),我知道的最简单的方法是使用 .NET 类(PowerShell 基本上是“.NETscript”)。例如,要将此文件夹添加到计算机范围的 PATH 环境变量中,您可以执行以下操作(以管理员身份):
[System.Environment]::SetEnvironmentVariable("path", $env:path + "C:\foo\bar\baz", "Machine")
最后一个参数是System.EnvironmentVariableTaget 枚举,正如System.Environment.SetEnvironmentVariable 静态方法。
您当然可以创建一个脚本/cmdlet 来简化此函数的调用。您还可以使用[System.Environment]::GetEnvironmentVariable(name, [optional store])
静态函数直接从用户或机器存储中读取环境变量。同样,所有环境变量都是字符串(当您获得它们的集合时,它就是一个字典)。