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, но я нашел одну систему, где это создает строковое значение вместо этого, и я хочу знать: почему? Что может случиться, чтобы системы вели себя по-другому? Все они не имеют уже установленного значения, все используют один и тот же базовый образ, используя одну и ту же версию Powershell.

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

New-ItemProperty -Path HKCR:\Software\MyCompany\ -Name Level -Value 5 -ErrorAction SilentlyContinue -PropertyType DWord
Но просто из любопытства я хочу знать, почему системы ведут себя по-разному.
2   14   2013-05-28 12:29:44

2 ответа:

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

Set-ItemProperty -Path HKCR:\Software\MyCompany -Name Level -Value 5 -Type DWord

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

[Microsoft.Win32.Registry]::SetValue("HKEY_CLASSES_ROOT\Software\MyCompany","Level",5,[Microsoft.Win32.RegistryValueKind]::DWord)