gpt4 book ai didi

使用 $matches 数组中的值时的 PowerShell Set-Item 异常

转载 作者:行者123 更新时间:2023-12-02 23:31:39 27 4
gpt4 key购买 nike

我正在研究一些函数来在 PowerShell 中为 Visual Studio 设置环境变量,然后沿着执行 vcvarsXXX.bat 批处理文件的路径,然后解析 set 的输出并查找 name=value,然后使用 Set-Item在 PS 端设置这些环境变量。

执行此操作的函数如下所示:

#   from Bruce Payette's book to set the environment variables, slightly modified
function Get-Batchfile ($file) {
$cmd = "`"$file`" & set"
cmd /c $cmd | Foreach-Object {
# variation from Payette's book, use a regex in case the batch file writes some output, only take name=value
if ($_ -match "^(.*?)=(.*)$") {
# make sure they look good
write-host $matches[1] "=" $matches[2]
$name=$matches[1]
$value=$matches[2]
write-host ">>> $name = $value"
Set-Item -path env:$name -value $value
# for some reason the set item below does not seem to work even though the values of $matches look good
#Set-Item -path env:$matches[1] -value $matches[2]
}
}
}

我注意到的问题是,在正则表达式匹配后,如果我调用:

Set-Item -path env:$matches[1] -value $matches[2]

但是如果我将 $matches 分配给 $name 和 $value 然后调用:

Set-Item -path env:$name -value $value

它按预期工作。

我已经“解决”了这个问题,但我想了解为什么第一个 from 似乎不起作用。我宁愿让代码更紧凑,而不必创建两个临时变量。

最佳答案

我相信这与您在字符串中使用这些哈希表引用的情况相同。如果它是对象的属性,则必须使用子表达式 - $($variable.property)。如果您将 $variable.property 分配给一个变量,您可以在不使用子表达式的情况下使用该变量。它对哈希表条目和数组切片的作用相同。

看看这是否效果更好:

Set-Item -path env:$($matches[1]) -value $($matches[2])

关于使用 $matches 数组中的值时的 PowerShell Set-Item 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6718086/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com