gpt4 book ai didi

powershell - 当环境变量在路径中时,PowerShell错误

转载 作者:行者123 更新时间:2023-12-03 01:29:12 25 4
gpt4 key购买 nike

当我尝试使用以下路径获取文件时-失败:

$path = Get-ItemProperty -Path "%ProgramFiles%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll"

要么
$moduleVersion = [System.Diagnostics.FileVersionInfo]::GetVersionInfo("%ProgramFiles%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll").FileVersion
powershell中是否有解决此问题的方法?

当我指定“完整路径”时,它可以正常工作,但实际上我不是控制值的人。因此,我希望在将其直接粘贴到资源管理器中时会自动解析该路径。但是这没有发生。

Get-ItemProperty : Cannot find path 'C:\Users\xxxx\Documents\yyyy\%ProgramFiles%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll' because it does not exist.



编辑1 :我已尝试应用Regex修复程序,但它不起作用:
    $path = "%ProgramFiles%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll";
$path = $path -replace "\%(.*?)\%", '$env:$1'
$path2 = Get-ItemProperty -Path "%ProgramFiles%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll" #does not work
$path3 = Get-ItemProperty -Path "$env:ProgramFiles\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll" #works
$path4 = Get-ItemProperty -Path $path #does not work

有人可以解释为什么 path3有效但 path4无效吗?值是相同的。.仍在尝试使此工作。

最佳答案

PowerShell本身不支持cmd.exe样式的环境变量引用,例如expandable strings中的%ProgramFiles%("..."); PowerShell等效项是$env:ProgramFiles。[1]

如果变量名称包含特殊字符,请将该名称括在{...}中;例如${env:ProgramFiles(x86)}

使用 System.Environment.ExpandEnvironmentVariables 方法扩展嵌入在较大字符串中的cmd.exe样式的环境变量引用,例如%ProgramFiles%:

$path = [Environment]::ExpandEnvironmentVariables(
'%ProgramFiles%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll'
)

注意:对未定义环境的引用。变量保持不变。

您还可以使用 (...)(为便于阅读而设置格式)将上述表达式直接嵌入到cmdlet调用中:
$path = Get-ItemProperty -Path (
[Environment]::ExpandEnvironmentVariables(
'%ProgramFiles%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll'
)
)

[1]并且,如果有人给您包含此类引用的逐字字符串,则您必须按需扩展该字符串,例如,该字符串的用法有些晦涩,例如: $verbatim = '$env:ProgramFiles\IIS'; $ExecutionContext.InvokeCommand.ExpandString($verbatim)

关于powershell - 当环境变量在路径中时,PowerShell错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59823328/

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