Set-ItemProperty устанавливает значение реестра как строку в некоторых системах вместо DWord, почему?

Я пытаюсь создать элемент с помощью Set-ItemProperty в PowerShell, который работает в большинстве систем:

New-PSDrive -name HKCR -PSProvider Registry -root HKEY_CLASSES_ROOT

Set-ItemProperty -Path HKCR:\Software\MyCompany\ -Name Level -Value 5 -ErrorAction SilentlyContinue 

Это создает значение DWORD в большинстве систем Windows 7, но я нашел одну систему, в которой вместо этого создается значение STRING, и я хочу знать: почему? Что могло случиться, что системы ведут себя по-разному? У всех еще не установлено это значение, все используют один и тот же базовый образ, используя одну и ту же версию Powershell.

Кстати, я обнаружил, что с помощью следующего кода я могу явно установить тип, поэтому я уже решил проблему:

New-ItemProperty -Path HKCR:\Software\MyCompany\ -Name Level -Value 5 -ErrorAction SilentlyContinue -PropertyType DWord

Но просто из любопытства я хочу знать, почему системы ведут себя по-разному.


person Erik    schedule 28.05.2013    source источник


Ответы (2)


У меня нет ответа, почему это происходит, но чтобы избежать таких случаев, будьте явными. Используйте параметр Тип (динамический) и укажите значение RegistryValueKind (вы также можете используйте его с New-ItemProperty) :

Set-ItemProperty -Path HKCR:\Software\MyCompany -Name Level -Value 5 -Type DWord
person Shay Levy    schedule 28.05.2013
comment
Документирован ли где-нибудь -Type? - person E.V.I.L.; 11.08.2017
comment
@MadTomVane Похоже, это зависит от поставщика реестра. Мне не удалось найти дополнительную документацию, кроме этой статьи было полезно для меня. - person Maximilian Burszley; 22.10.2018
comment
Тип кажется недопустимым в Windows 10. Также недопустимо двоеточие после HKCR. - person user2924019; 23.11.2018

Попробуй это.

[Microsoft.Win32.Registry]::SetValue("HKEY_CLASSES_ROOT\Software\MyCompany","Level",5,[Microsoft.Win32.RegistryValueKind]::DWord)
person gabriwinter    schedule 18.12.2014
comment
Это хорошо работает для более старых версий powershell, где по какой-то странной причине параметр -type не существует. - person Eric Nemchik; 30.12.2014
comment
Обратите внимание, что вы должны указать здесь десятичное значение вместо шестнадцатеричного значения. - person KERR; 02.05.2018