Я пытаюсь записать значение REG_BINARY с помощью Powershell. Я могу записать REG_BINARY, если я предоставляю данные, но мне нужно иметь возможность кодировать то, что я хочу записать в файле, чтобы я мог использовать переменные системы и даты. Ниже мой код и ошибка.Как закодировать строку в REG_BINARY с помощью Powershell
Если вы раскомментируете первые $ данные, он будет работать.
function Convert-ToCHexString
{
param ([String] $str)
$ans = ''
[System.Text.Encoding]::ASCII.GetBytes($str) | % { $ans += "0x{0:x2}," -f $_ }
return $ans.Trim(' ',',')
}
$Folder = Convert-ToCHexString Z:\
$Username = Convert-ToCHexString $env:USERNAME
$Filename = Convert-ToCHexString \archive.pst
$key = "HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\0a0d020000000000c000000000000046"
#$data = 0x5a,0x3a,0x5c,0x61,0x72,0x63,0x68,0x69,0x76,0x65,0x2e,0x70,0x73,0x74
$data = $Folder + "," + $Username + "," + $Filename + ",0x00,0x00,0x00"
Set-ItemProperty -path $key -name "001f0324" -value ([byte[]]($data))
Ниже ошибка я получаю:
Невозможно преобразовать значение «0x5A, 0x3a, 0x5c, 0x6a, 0x62,0x79,0x65,0x72,0x73,0x5c, 0x61,0x72,0x63,0x68, 0x69,0x76,0x65,0x2e, 0x70,0x73,0x74,0x00,0x00,0x00 ", чтобы ввести« System.Byte [] ». Ошибка: «Невозможно преобразовать значение» 0x5a, 0x3a, 0x5c, 0x6a, 0x62,0x79,0x65,0x72,0x73,0x5c, 0x61,0x72,0x63,0x68,0x69,0x76,0x65,0x2e, 0x70,0x73,0x74,0x00 , 0x00,0x00 ", чтобы напечатать« System.Byte ». Ошибка:« Дополнительные символы, не подлежащие анализу, находятся в конце строки. »«
Это работает, но при добавлении фотографий 0 не работает. Я получаю ошибку: не могу преобразовать значение «0 0», чтобы ввести «System.Byte». Ошибка: «Строка ввода не была в правильном формате». '$ key =" HKCU: \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Windows Messaging Subsystem \ Profiles \ Outlook \ 0a0d020000000000c000000000000046 " $ data =" Z: \ archive.pst " $ data = [Text.Encoding]: : Unicode.GetBytes ($ data) Write-Host $ data Set-ItemProperty -path $ key -name "001f0324" -значение ([byte []] ($ data)) –
Нужны ли последние 0? Попробуйте это без них. Если они необходимы, вам нужно добавить их так: '$ bytes = [Text.Encoding] :: Unicode.GetBytes ($ data); $ bytes + = 0,0,0' –
Это сделало это, спасибо! Все еще пытаюсь выяснить всю эту вещь разметки комментариев. http://pastebin.com/FVvXg5Yj - это окончательный код. –