aru*_*ung 4 registry powershell
我在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
Run Code Online (Sandbox Code Playgroud)
有人可以解释这种奇怪的行为吗?我希望两个返回值都相同。
我没有以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}'
Run Code Online (Sandbox Code Playgroud)
我只是清理了一下它,这个版本给了我正确的字符串。
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}"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11353 次 |
最近记录: |