bestsource

PowerShell로 이진 레지스트리 값(REG_BINARY)을 설정하는 방법은 무엇입니까?

bestsource 2023. 8. 17. 21:33
반응형

PowerShell로 이진 레지스트리 값(REG_BINARY)을 설정하는 방법은 무엇입니까?

PowerShell로 이진 레지스트리 값(REG_BINARY)을 설정하는 방법은 무엇입니까?

배경:

ASP의 속성을 변경해야 합니다.PowerShell 스크립트를 사용하는 NET 상태 서비스.안타깝게도 내장된 PowerShell cmdlet은Set-Service서비스 설명, 시작 유형, 표시 이름 및 상태만 수정할 수 있습니다.나는 수정이 필요로 합니다.Subsequent failures서비스의 속성을 볼 때 복구 탭에서 찾을 수 있습니다.이 값이 레지스트리에 REG_B로 저장되어 있음을 발견했습니다.INARY 값.

값 내보내기는 다음과 같습니다.

[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

파워셸에는 다음이 있습니다.Set-ItemProperty레지스트리 값을 설정할 수 있는 cmdlet입니다.문자열 또는 dword 값의 경우 문자열 또는 int만 전달할 수 있습니다.배열에서 변경할 16진수 값은 알고 있지만 이진수 값을 설정하는 방법을 알 수 없습니다.

다음 줄은 생성 방법의 예를 보여줍니다.

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

기존 버전을 변경하는 방법:

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

이 게시물은 비슷한 문제를 해결하는 데 도움이 되었습니다.감사합니다!

xBr0k3n과 Howard의 답변을 함께 가져오기:

#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)

이것이 이 질문의 주요 부분을 놓쳤다고 느끼는 사람은 나뿐입니까?

원본을 변경하려면 어떻게 해야 합니까?

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.))

이걸 부활시키는 것.

다음은 레지스트리 항목 이진 값을 쉽게 찾을 수 있는 파워셸에서 간결하게 수정하는 방법입니다.이 예에서는DefaultConnectionSettings의 레지스트리 항목입니다.REG_BINARY우리가 수정하려고 하는 가치.

$path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections"
$objName = "DefaultConnectionSettings"
$getObj = Get-ItemProperty -path $path -name $objName
$getObj.DefaultConnectionSettings[8] = 1
$objValue = $getObj.DefaultConnectionSettings
Set-ItemProperty -path $path -name $objName -Value $objValue

사용할 때Get-ItemPropertyREG_B가 있는 레지스트리 항목의 경우INARY 값은 컬렉션에 포함된 여러 하위 개체를 제공합니다.

품목의 이름을 참조함으로써(이 경우 우리는 참조함).getObj.DefaultConnectionSettingsgetObj의 하위 개체로서, 우리는 각각의 이진 값(즉,50,33,01,00,00,00,00,00,04)는 배열에서 고유한 위치를 가집니다.

어레이이기 때문에 쉽게 참조, 수정 및 반복할 수 있습니다.$getObj.DefaultConnectionSettings[8] = 1또는 8 대신 원하는 숫자를 입력할 수도 있습니다.8은 배열에서 값의 위치를 나타냅니다.의 예에서는50,33,01,00,00,00,00,00,04는 9.5m입니다.04다른 것들과 마찬가지로 어레이도 0부터 카운트되기 시작합니다.

하기 »= 1그것을 바꿀 것입니다.04의 값 - 수의값 진01나머지 값은 배열에서 변경되지 않은 채로 둡니다.

마지막으로, 우리는 다음과 같이 변경 사항을 설정했습니다.Set-ItemProperty -path $path -name $objName -Value $objValue

이것이 다른 사람들에게 도움이 되기를 바랍니다.

참고로, PSRemoteRegistry PowerShell 모듈(로컬 또는 원격 컴퓨터의 경우 http://psremoteregistry.codeplex.com/), )을 사용하여 이진 값을 설정할 수도 있습니다.

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

정수로 시작하겠습니다.

$int = 0xffffffff

바이트 가져오기:

$bytes = [bitconverter]::GetBytes($int)

레지스트리 경로에 사용할 수 있는 little known '-type' 매개 변수와 함께 set-item 속성 사용:

Set-ItemProperty hkcu:\key1 bin1 $bytes -type binary

돌려받기:

$bytes = Get-ItemProperty hkcu:\key1 bin1 | % bin1

4바이트를 int로 변환:

$int = [bitconverter]::toint32($bytes, 0)

'0x{0:x}' -f $int
0xffffffff

다른 솔루션에 문제가 있었습니다. 다음은 제가 작동하는 방법은 다음과 같습니다.

단답:

New-ItemProperty -path $path -name $name -value [byte]0x00,0x01,0x02 -PropertyType Binary

전체 예:

$path = "HKCU:\Software\Hex-Rays\"
$name = "StrWinStringTypes"
$value = [byte]0x00,0x01,0x02

#if key path found, just add/modify the value/data pair
If (Test-Path($path))
{
    New-ItemProperty -path $path -name $name -value $value -PropertyType Binary -Force | Out-Null
}

#if key path not found, create it first before adding value/data
Else
{
    New-Item -path $path -force
    New-ItemProperty -path $path -name $name -value $value -PropertyType Binary -Force | Out-Null
}

언급URL : https://stackoverflow.com/questions/6551224/how-to-set-a-binary-registry-value-reg-binary-with-powershell

반응형