2011-07-01 68 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) 
相關問題