Set-ItemProperty将registry值设置为string而不是DWord,为什么?

我尝试使用PowerShell中的Set-ItemProperty创build一个项目,该项目适用于大多数系统:

 New-PSDrive -name HKCR -PSProvider Registry -root HKEY_CLASSES_ROOT Set-ItemProperty -Path HKCR:\Software\MyCompany\ -Name Level -Value 5 -ErrorAction SilentlyContinue 

这在大多数Windows 7系统上创build了一个DWORD值,但是我发现一个系统创build了一个STRING值,我想知道:为什么? 会发生什么系统的行为有所不同? 所有没有已经设置的值,都使用相同的基础镜像使用相同的Powershell版本。

顺便说一句,我发现通过使用下面的代码,我可以明确地设置一个types,所以我已经解决了这个问题:

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

但只是为了好奇,我想知道为什么系统的行为有所不同。

我没有答案为什么发生,但要避免这种情况下,明确的。 使用Type(动态)参数并指定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)