Powershell Set-ItemProperty创建重复的注册表项
我正在尝试激活Windows 10 1903中的长路径名 在Windows PowerShell中以管理员身份运行时:Powershell Set-ItemProperty创建重复的注册表项,powershell,registry,Powershell,Registry,我正在尝试激活Windows 10 1903中的长路径名 在Windows PowerShell中以管理员身份运行时: Set-ItemProperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' -Name 'LongPathsEnabled' -value '1' 我看到已经创建了一个新的注册表项,而不是覆盖现有的注册表项 谢谢你的帮助。我知道了 未引用该值 Set-ItemProperty -path 'HKLM:
Set-ItemProperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' -Name 'LongPathsEnabled' -value '1'
我看到已经创建了一个新的注册表项,而不是覆盖现有的注册表项
谢谢你的帮助。我知道了
未引用该值
Set-ItemProperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' -Name 'LongPathsEnabled' -value 1
现在我可以玩WSL了
享受吧。我想出来了
未引用该值
Set-ItemProperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' -Name 'LongPathsEnabled' -value 1
现在我可以玩WSL了
享受。试试这个:
Push-Location
Set-Location 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem'
Set-ItemProperty -path .\ -Name 'LongPathsEnabled' -value 1 -Type DWord -Force
Pop-Location
试试这个:
Push-Location
Set-Location 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem'
Set-ItemProperty -path .\ -Name 'LongPathsEnabled' -value 1 -Type DWord -Force
Pop-Location
- 这里没有理由假设一个bug,您的命令应该按预期工作,但它做了错误的事情(见下文)
- 您显示的症状(注册表项中存在重复的值名称)与问题中的命令不一致
- 底层本机注册表API不允许在给定注册表项中创建名称重复的值;如果他们真的这么做了——这将是一个严重的错误——问题就在那里,而不是在PowerShell中
- 如果注册表编辑器确实显示了两个名称相同的值,唯一合理的解释是它们包含不可见的字符,这使它们不同
至于你所尝试的: 已知系统
LongPathsEnabled
注册表项HKEY\U LOCAL\U MACHINE\system\CurrentControlSet\Control\FileSystem的值
是一个64位整数,注册表类型为REG\u DWORD
,相当于.NET/PowerShell中的[uint32]
实例
通过在Set ItemProperty
调用中使用-Value“1”
,您可以让它推断将值写入的注册表类型,即REG_SZ
,即文字字符串:
- 但是,如果目标值已经存在,并且类型正确,PowerShell将为您转换字符串
- 相反,如果还不存在这样的值,您将错误地创建一个
REG_SZ
值
您现在使用-Value 1
,这使得1
隐式成为[int]
(System.Int32
),在这种情况下,PowerShell会正确推断REG\u DWORD
<强>但是,对于可读性和健壮性,都要考虑使用<代码> -< /COD>参数来显式地指示您计划创建的注册表值的类型< /强>(为了可读性,命令分散在多行中-注意内行末尾的
`
字符,这必须是它们各自行上的最后一个字符):
-Type
参数的类型为,当您创建或设置值时,它必须是以下值之一(此处显示的值映射到它们的REG.*
值):
可以找到本机REG.*
类型的完整列表。
- 这里没有理由假设一个bug,您的命令应该按预期工作,但它做了错误的事情(见下文)
- 您显示的症状(注册表项中存在重复的值名称)与问题中的命令不一致
- 底层本机注册表API不允许在给定注册表项中创建具有重复名称的值;如果允许,这将是一个严重的错误,问题将出在那里,而不是PowerShell中
- 如果注册表编辑器确实显示了两个名称相同的值,唯一合理的解释是它们包含不可见的字符,这使它们不同
至于你所尝试的:
已知系统LongPathsEnabled
注册表项HKEY\U LOCAL\U MACHINE\system\CurrentControlSet\Control\FileSystem的值
是一个64位整数,注册表类型为REG\u DWORD
,相当于.NET/PowerShell中的[uint32]
实例
通过在Set ItemProperty
调用中使用-Value“1”
,您可以让它推断将值写入的注册表类型,即REG_SZ
,即文字字符串:
- 但是,如果目标值已经存在,并且类型正确,PowerShell将为您转换字符串
- 相反,如果还不存在这样的值,您将错误地创建一个
REG_SZ
值
您现在使用-Value 1
,这使得1
隐式成为[int]
(System.Int32
),在这种情况下,PowerShell会正确推断REG\u DWORD
<强>但是,对于可读性和健壮性,都要考虑使用<代码> -< /COD>参数来显式地指示您计划创建的注册表值的类型< /强>(为了可读性,命令分散在多行中-注意内行末尾的
`
字符,这必须是它们各自行上的最后一个字符):
-Type
参数的类型为,当您创建或设置值时,它必须是以下值之一(此处显示的值映射到它们的REG.*
值):
可以找到本机REG.*
类型的完整列表。我很好奇您是如何创建重复值的,因为我希望底层的本机注册表API能够防止这种情况发生-在看似重复的值中是否有隐藏字符?此外,您所问的命令不会创建一个REG.\u DWORD
v值,它会创建一个REG\u SZ
值-答案中的命令也是如此(尽管更新现有的REG\u DWORD
值会自动将字符串'1'
转换为REG\u DWORD
)。您有吗