Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell Set-ItemProperty创建重复的注册表项_Powershell_Registry - Fatal编程技术网

Powershell Set-ItemProperty创建重复的注册表项

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:

我正在尝试激活Windows 10 1903中的长路径名

在Windows PowerShell中以管理员身份运行时:

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
)。您有吗