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
答案 0 :(得分:0)
说实话,我很难跟进你的功能。我甚至不确定你是如何使用$name.properties | foreach...
循环迭代键中的值。
但是,一般来说,这很简单。例如,我有一个注册表项HKCU:\Environment
。我在那个名为“thing”的键中创建了一个属性,并且我用一些随机二进制数据填充它。
我会把那个属性的内容输出到一个文件中:
$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
只是为了表明我的袖子里没有任何东西:
祝你好运。答案 1 :(得分:0)
进行以下更改后,我可以将注册表配置单元导出到CSV文件: $ actualKey = Get-Item -LiteralPath Registry :: $ reg_key
$ keyinfo = Get-ChildItem -LiteralPath Registry :: $ reg_key