在PowerShell中,如何将环境variables(如$ SystemRoot $)转换为string的一部分?

我试图编写一个从一组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")