【发布时间】:2021-10-17 11:40:05
【问题描述】:
我正在尝试使用 Powershell 根据命令“wsl --list”的输出保存一些环境变量,当我调试此代码时,它似乎按预期流动但是当我检查我的环境变量时无法找到预期的键和值。
当我将相同的 SetEnvironmentVariable 方法与任何其他硬编码值一起使用时,它似乎可以工作。 $distroName 上的 Write-Host 也会产生预期的字符串,所以我真的迷失了。任何帮助,将不胜感激! 这是我的代码:
$wslListOutput = wsl --list
((Get-ChildItem env:*).Name | Select-String -Pattern "(SINDAGAL_INIT_DISTRO_([a-zA-Z=])*)|SINDAGAL_DEFAULT_DISTRO")
foreach ($line in $wslListOutput)
{
$lineIsEmpty = ("" -eq $line) -or ([string]::IsNullOrWhiteSpace($line))
$Introline = $line -eq "Windows Subsystem for Linux Distributions:"
if($lineIsEmpty -or $Introline){ continue }
if($line -Match "(([a-zA-Z]*) ([(Default)])*)"){
$distroName = ($line -split ' ',2)[0]
[System.Environment]::SetEnvironmentVariable("SINDAGAL_DEFAULT_DISTRO",$distroName)
} else{
$distroName = $line.ToUpper()
$variablePath = "Env:SINDAGAL_INIT_DISTRO_${distroName}"
[System.Environment]::SetEnvironmentVariable("SINDAGAL_INIT_DISTRO_${distroName}",$true)
}
}
# Cannot see the variables which are supposed to be set in here at all
((Get-ChildItem env:*).Name)
我的 wsl --list 输出:
┖[~]> wsl --list
Windows Subsystem for Linux Distributions:
Debian (Default)
Alpine
【问题讨论】:
-
您可能想使用
[Environment]::SetEnvironmentVariable("SINDAGAL_DEFAULT_DISTRO",$distroName, "Machine")。在不指定目标的情况下,SetEnvironmentVariable()创建、修改或删除存储在当前进程中的环境变量 -
请将您的
$wslListOutput列表添加到问题中。 -
在我的系统上,代码跳转到
else分支并设置SINDAGAL_INIT_DISTRO_=true,尽管$distroName不是空的(它是'UBUNTU-20.04')。奇怪的是,当使用相同的值对$distroName进行硬编码时,它可以工作。 -
感谢你们所有的 cmets 伙计们!
-
@Theo 我尝试在其中添加第三个参数,即使它没有出错,但不幸的是它仍然没有保存我的变量。
标签: powershell windows-10 environment-variables