21

I try to create an item using Set-ItemProperty in PowerShell, which works on most systems:

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

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

This creates a DWORD-value on most Windows 7 systems, but I have found one system where this creates a STRING-value instead, and I want to know: why? What could happen that the systems behave differently? All don't have that value already set, all use the same base image using the same Powershell version.

Btw, I found that by using the following code, I can explicitly set a type, so I already solved the problem:

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

But just for curiosity, I want to know why the systems behave differently.

abatishchev
  • 98,240
  • 88
  • 296
  • 433
Erik
  • 2,316
  • 9
  • 36
  • 58

2 Answers2

36

I don't have an answer to why it happens but to avoid such instances, be explicit. Use the Type (dynamic) Parameter and specify a RegistryValueKind value (you can also use it with New-ItemProperty) :

Set-ItemProperty -Path HKCR:\Software\MyCompany -Name Level -Value 5 -Type DWord
Shay Levy
  • 121,444
  • 32
  • 184
  • 206
  • 6
    Is the `-Type` documented anywhere? – E.V.I.L. Aug 11 '17 at 17:39
  • 1
    @MadTomVane It appears to be a registry-provider-specific thing. I couldn't find further documentation but [this article](https://mnaoumov.wordpress.com/2014/06/10/powershell-registry-set-itemproperty-gotchas/) was useful for me. – Maximilian Burszley Oct 22 '18 at 15:27
  • 2
    "Type" appears to be invalid in Windows 10. Also Colon after "HKCR" is invalid. – user2924019 Nov 23 '18 at 17:02
  • If PowerShell gives you an error on `-Type` try to use path's short form. Instead of `HKEY_LOCAL_MACHINE\...` try `HKLM:\...`. Works as of today with Windows 10 v20H2 b19042.1052 – Cheslab Aug 22 '21 at 15:01
6

Try this.

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