Возвращение значения из HKCR с использованием Powershell - PullRequest
3 голосов
/ 26 декабря 2011

У меня есть функция в 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

Может кто-нибудь объяснить это странное поведение? Я ожидаю, что оба возвращаемых значения будут одинаковыми.

Ответы [ 2 ]

4 голосов
/ 26 декабря 2011

У меня нет префикса пути с регистром.Во-первых, вам нужно подавить результат нового 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}'
2 голосов
/ 26 декабря 2011

Я только немного его почистил, и эта версия дает мне правильную строку.

function com_registeredpath()
{  
    param([string]$guid)
    New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT | Out-Null
    $key = Get-Item "HKCR:\CLSID\$guid\InprocServer32"
    $values = Get-ItemProperty $key.PSPath

    return $values.'(default)'
}

com_registeredpath "{0000002F-0000-0000-C000-000000000046}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...