我试图编写一个从一组registry键读取文件path的脚本,但是这些path具有像%SystemRoot%这样的环境variables。我知道你通常可以使用以下命令来查找这些值:
$env:SystemRoot
例如。 但是,如果PS收到一个string,如“%SystemRoot%\ System32 \ Winevt \ Logs \ DebugChannel.etl”,如何将它转换为我需要的完整path,即“C:\ Windows \ System32 \ Winevt \ Logs \ DebugChannel.etl“?
我已经尝试使用正则expression式replace将%%格式转换为$ env:格式:
$_.FileName -replace "%(\w*)%\\", "`$env:`${1}\"
但是这只会导致string:
$env:SystemRoot\System32\Winevt\Logs\DebugChannel.etl
我不知道如何让PowerShell实际评估“$ env:SystemRoot”部分。 无论如何,我认为还有一个更明智的做法!
我用来获取registry值和产生上述结果的完整代码是
Get-ChildItem HKLM:\SYSTEM\CurrentControlSet\Control\WMI\Autologger | Get-ItemProperty -Name "FileName" -ErrorAction SilentlyContinue | foreach { if($_.FileName) { $_.FileName -replace "%(\w*)%\\", "`$env:`${1}\" } }
谢谢。
使用.net。 尝试这个:
[System.Environment]::ExpandEnvironmentVariables("%SystemRoot%\System32\Winevt\Logs\DebugChannel.etl")