Sco*_*ott 2 regex windows registry powershell environment-variables
我正在尝试编写一个脚本,该脚本从一组注册表项中读取文件路径,但这些路径具有 %SystemRoot% 等环境变量。我知道您通常可以使用以下方法查找这些值:
$env:SystemRoot
Run Code Online (Sandbox Code Playgroud)
例如。但是,如果 PS 收到诸如“%SystemRoot%\System32\Winevt\Logs\DebugChannel.etl”之类的字符串,如何将其转换为我需要的完整路径,即“C:\Windows\System32\Winevt\Logs\ DebugChannel.etl”?
我尝试使用正则表达式 -replace 将 %% 格式转换为 $env: 格式:
$_.FileName -replace "%(\w*)%\\", "`$env:`${1}\"
Run Code Online (Sandbox Code Playgroud)
但这只会导致字符串:
$env:SystemRoot\System32\Winevt\Logs\DebugChannel.etl
Run Code Online (Sandbox Code Playgroud)
而且我不确定如何让 PowerShell 实际评估“$env:SystemRoot”部分。无论如何,我认为有一种更明智的方法可以做到这一点!
我用来获取注册表值并产生上述结果的完整代码是
Get-ChildItem HKLM:\SYSTEM\CurrentControlSet\Control\WMI\Autologger | Get-ItemProperty -Name "FileName" -ErrorAction SilentlyContinue | foreach { if($_.FileName) { $_.FileName -replace "%(\w*)%\\", "`$env:`${1}\" } }
Run Code Online (Sandbox Code Playgroud)
谢谢。
使用.net。尝试这个:
[System.Environment]::ExpandEnvironmentVariables("%SystemRoot%\System32\Winevt\Logs\DebugChannel.etl")
Run Code Online (Sandbox Code Playgroud)