无法在powershell中获取system.int64注册表数据值

时间:2018-04-18 14:05:11

标签: powershell

powershell代码用于将完整的注册表配置单元导出为CSV文件。但它导致错误导出值大的REG_Binary类型数据,如附加的注册表截图所示。虽然我试图把它转换为字符串,但没有运气。请建议如何获取REG_Binary数据或如何将其转换为字符串。

Function Get_Reg_Keys ($reg_key) {
    $actualKey = Get-Item -Path Registry::$reg_key
    #Write-Host $actualKey 
    ForEach ($name in $actualKey.GetValueNames()) { 
        # Write-Host $name
        $name.Property | foreach {
            $type = $actualKey.GetValue($name).GetType()
            #Write-Host $type
            Write-Host $actualKey.Name " | " $name " | " $actualKey.GetValue($name) " | " $type 

            If ( $type -eq [System.Byte[]] -Or $type -eq [System.Int64[]]) {    
                $a = [System.BitConverter]::ToString($actualKey.GetValue($name))
                ( '"{0:0}","{1:0}", "{2:0}"' -f $actualKey.Name, $name, $a) | 
                    Out-File  "C:\Temp\Automation\HKCU.csv" -append -Encoding ascii -erroraction SilentlyContinue
            }
            Else {
                ( '"{0:0}","{1:0}", "{2:0}"' -f $actualKey.Name, $name, $actualKey.GetValue($name)) | 
                    Out-File  "C:\Temp\Automation\HKCU.csv" -append -Encoding ascii -erroraction SilentlyContinue
            }
        }
    }

    $keyinfo = Get-ChildItem Registry::$reg_key
    if ($keyinfo.count -gt 0) {

        ForEach ($keyitem in $keyinfo) { Get_Reg_Keys ($keyitem)  }
    }
}

然后运行:Get_Reg_Keys ("HKEY_CURRENT_USER\")

给出错误:

Cannot convert argument "index", with value: "MRUListEx", for "GetValue" to type "System.Int64": "Cannot convert value "MRUListEx" to type "System.Int64". Error: "Input string was 
not in a correct format.""
At C:\Temp\Automation\HKCUregistrynew.ps1:27 char:21
+                     ( '"{0:0}","{1:0}", "{2:0}"' -f $actualKey.Name, $name, $act ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument

注册表项详细信息: registrykeydetails

2 个答案:

答案 0 :(得分:0)

说实话,我很难跟进你的功能。我甚至不确定你是如何使用$name.properties | foreach...循环迭代键中的值。

但是,一般来说,这很简单。例如,我有一个注册表项HKCU:\Environment。我在那个名为“thing”的键中创建了一个属性,并且我用一些随机二进制数据填充它。

enter image description here

我会把那个属性的内容输出到一个文件中:

$reg_key = 'HKCU:\Environment'
$key_properties = Get-Item -Path $reg_key
[System.BitConverter]::ToString($key_properties.GetValue('thing')) | Out-File -FilePath .\Test.txt
cat .\Test.txt

只是为了表明我的袖子里没有任何东西:

enter image description here

祝你好运。

答案 1 :(得分:0)

进行以下更改后,我可以将注册表配置单元导出到CSV文件:  $ actualKey = Get-Item -LiteralPath Registry :: $ reg_key

$ keyinfo = Get-ChildItem -LiteralPath Registry :: $ reg_key