2013-05-28 2 views
13

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

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

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

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

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

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

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

ответ

21

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

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

Является ли '-Type' документированным где угодно? –

3

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

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

Это хорошо работает для старых версий powershell, где по какой-то нечетной причине параметр -type, похоже, не существует. –

 Смежные вопросы

  • Нет связанных вопросов^_^