2011-12-26 33 views
2

我在Powershell中有一個函數,它返回COM DLL註冊的路徑;在函數中返回正確的路徑,但在調用這個函數的時候,有一個額外的字符串「HKCR」前綴輸出使用Powershell從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

我剛把它清理了一下,這個版本給了我正確的字符串。

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}" 
+0

謝謝,這也適用! – arung 2011-12-30 04:37:36

4

我沒有得到以reg配置單元爲前綴的路徑。 首先,你需要抑制新的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}' 
+0

謝謝你的工作! – arung 2011-12-30 04:37:20

相關問題