web-dev-qa-db-fra.com

Set-ItemProperty définit la valeur de Registre comme chaîne sur certains systèmes au lieu de DWord, pourquoi?

J'essaie de créer un élément à l'aide de Set-ItemProperty dans PowerShell, qui fonctionne sur la plupart des systèmes:

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

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

Cela crée une valeur DWORD sur la plupart des systèmes Windows 7, mais j'ai trouvé un système où cela crée une valeur STRING à la place, et je veux savoir: pourquoi? Que pourrait-il arriver que les systèmes se comportent différemment? Tous n'ont pas cette valeur déjà définie, tous utilisent la même image de base en utilisant la même version Powershell.

Btw, j'ai trouvé qu'en utilisant le code suivant, je peux explicitement définir un type, j'ai donc déjà résolu le problème:

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

Mais juste pour la curiosité, je veux savoir pourquoi les systèmes se comportent différemment.

17
Erik

Je n'ai pas de réponse à la raison pour laquelle cela se produit, mais pour éviter de tels cas, soyez explicite. Utilisez le paramètre Type (dynamic) et spécifiez une valeur RegistryValueKind (vous pouvez également l'utiliser avec New-ItemProperty):

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

Essaye ça.

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