在某些系统上,Set-ItemProperty将注册表值设置为字符串而不是DWord。为什么?

21

我尝试在PowerShell中使用Set-ItemProperty创建一个项目,在大多数系统上都有效:

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

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

在大多数 Windows 7 系统上,这将创建一个 DWORD 值,但我发现有一个系统会创建一个 STRING 值,我想知道为什么?可能会出现什么情况导致系统的行为不同?所有系统都没有设置该值,并且使用相同的基础映像和 Powershell 版本。

顺便说一下,我已经通过使用以下代码来显式设置类型来解决了这个问题:

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

但只是出于好奇,我想知道为什么这些系统表现不同。

2个回答

36

我没有为什么会发生这种情况的答案,但为了避免这种情况,请明确说明。使用Type(dynamic)参数并指定RegistryValueKind值(也可以与New-ItemProperty一起使用):

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

6
-Type 在哪里有文档说明? - E.V.I.L.
1
@MadTomVane 看起来这是一个特定于注册表提供程序的问题。我找不到更多的文档,但这篇文章对我很有帮助。 - Maximilian Burszley
2
“Type” 在 Windows 10 中似乎无效。此外,“HKCR”后面的冒号也是无效的。 - user2924019
如果PowerShell在“-Type”上给您一个错误,请尝试使用路径的短格式。而不是“HKEY_LOCAL_MACHINE...”,请尝试使用“HKLM:...”。截至今天,适用于Windows 10 v20H2 b19042.1052。 - Cheslab

6

试试这个。

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

1
这对于旧版本的PowerShell非常有效,因为出于某种奇怪的原因,-type参数似乎不存在。 - Eric Nemchik
1
请注意,在此处必须指定十进制值而不是十六进制值。 - KERR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接