powershell - 使用 Powershell 从 HKCR 返回值

标签 powershell registry

我在 Powershell 中有一个函数,它返回注册 COM dll 的路径;在函数内返回正确的路径,但是当调用此函数时,输出前面有一个额外的字符串“HKCR”

function com_registeredpath()
{  
    param([string]$guid)

    New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT

    $key = Get-Item "HKCR:\CLSID\$guid\InprocServer32"
    $values = Get-ItemProperty $key.PSPath

    [string] $defaultValue = [string] $values."(default)"
    write-host ">>>: $defaultValue" # returns a value like: c:\somefolder\somefile.dll

    remove-psdrive -name HKCR
    return $defaultValue
}

write-host "~~~" (com_registeredpath "{00F97463-DF44-11D1-BED5-00600831F894}") #   returns a value like: HKCR c:\somefolder\somefile.dll

有人可以解释这种奇怪的行为吗?我希望两个返回值都相同。

最佳答案

我没有得到以 reg hive 为前缀的路径。
首先,您需要抑制新 psdrive 的结果,您不希望该函数返回除 dll 路径以外的任何内容(我将其分配为 null)。
最后,您无需创建 psdrive 即可获得该值,只需使用 HKCR 的提供程序路径

function Get-ComRegisteredPath
{
    param( [string]$Guid )

    try
    {
        $reg = Get-ItemProperty "Registry::HKEY_CLASSES_ROOT\CLSID\$Guid\InprocServer32" -ErrorAction Stop
        $reg.'(default)'
    }
    catch
    {
        Write-Error $_ 
    }   
}

PS> Get-ComRegisteredPath -Guid '{00F97463-DF44-11D1-BED5-00600831F894}'

关于powershell - 使用 Powershell 从 HKCR 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8633307/

相关文章:

powershell - 检查网址以获取特定文本,如果匹配则下载,如果名称无法解析则继续下一个

powershell - 函数变量的范围

windows - 在 Visual Studio 2019 的 PowerShell 窗口中找不到 ILDASM

powershell - 如何使用 Powershell 从注册表中的值获取数据

c# - C# 上的注册表和 Wow6432Node

performance - Powershell Count行非常大的文件

c# - 是否可以打开 regedit 并使用 process.start 直接导航到特定键?

windows - 用于删除注册表项的 PowerShell 脚本

c# - 为 COM Interop 注册 x64 程序集的问题

powershell - "get-childitem * -recurse"删除一级目录