2011-07-01 5 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)) 

और कैसे पहले से मौजूद किसी को बदलने के लिए देता है: FYI करें

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

क्या यह सिर्फ मुझे लगता है कि यह इस प्रश्न का मुख्य हिस्सा याद करता है?

कैसे आप मूल बदलने के बारे में जाना होगा:

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

संपादित करें:

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 

की तरह एक प्रारूप में इस काम कर पाने के लिए यह पता चला है तुम सिर्फ जोड़े के सभी उपसर्ग की कोशिश के बाद '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) 
संबंधित मुद्दे