2011-07-01 112 views
12

如何使用PowerShell设置二进制注册表值(REG_BINARY)?如何使用PowerShell设置二进制注册表值(REG_BINARY)?

背景:

我需要改变使用PowerShell脚本ASP.NET状态服务的一些性质。不幸的是,内置的PowerShell cmdlet Set-Service仅允许您修改服务描述,启动类型,显示名称和状态。我需要修改在“恢复”选项卡上找到的Subsequent failures属性(查看服务属性时)。我发现这个值作为REG_BINARY值存储在注册表中。

价值的出口是这样的:

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\aspnet_state] 
"FailureActions"=hex:50,33,01,00,00,00,00,00,00,00,00,00,03,00,00,00,0e,00,00,\ 
    00,01,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00 

在PowerShell中有一个Set-ItemProperty cmdlet将与您可以设置注册表值的值。对于字符串或双字值,只需传递一个字符串或一个int即可。我知道数组中的哪个十六进制值要更改,但我无法弄清楚如何设置二进制值。

回答

17

下面一行给你一个例子,如何创建一个

New-ItemProperty -Path . -Name Test -PropertyType Binary -Value ([byte[]](0x30,0x31,0xFF)) 

以及如何改变现有的:

Set-ItemProperty -Path . -Name Test -Value ([byte[]](0x33,0x32,0xFF)) 
2

仅供参考,您还可以设置二进制值与PSRemoteRegistry PowerShell的模块( http://psremoteregistry.codeplex.com/),在本地或远程计算机上。

$Key = 'SOFTWARE\MyCompany'  
Set-RegBinary -Hive LocalMachine -ComputerName Server1 -Key $Key -Value RegBinary -Data @([char[]]'PowerShell') 
5

难道只有我觉得这错过了这个问题的主要部分吗?

,你会如何去改变原有的:

50,33,01,00,00,00,00,00,00,00,00,00,03,00,00,00,0e,00,00,\ 
00,01,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00 

到像格式:

([byte[]](0x33,0x32,0xFF)) 

编辑:试图得到这个工作,事实证明你只是前缀所有对后'0x'。不知道为什么没有在答案中提到。因此,只要改变上面:

0x50,0x33,0x01,0x00,0x00,0x00,0x00,0x00... etc. 

然后包裹在以下几点:

([byte[]](0x50,0x33,0x01,0x00,0x00,0x00,0x00,0x00... etc.)) 
2

这个帖子已经帮了我类似的问题。谢谢!

带来xBr0k3n和霍华德的答案在一起:

#Change these three to match up to the extracted registry data and run as Admin 
$YourInput = "50,33,01,00,00,00,00,00,00,00,00,00,03,00,00,00,0e,00,00,00,01,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00" 
$RegPath = 'HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\aspnet_state' 
$AttrName = "FailureActions" 

$hexified = $YourInput.Split(',') | % { "0x$_"} 
New-ItemProperty -Path $RegPath -Name $AttrName -PropertyType Binary -Value ([byte[]]$hexified) 
相关问题