首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重命名-注册表项引发错误,并创建一个副本而不是重命名。

重命名-注册表项引发错误,并创建一个副本而不是重命名。
EN

Stack Overflow用户
提问于 2020-04-16 20:08:36
回答 1查看 956关注 0票数 1

这件事我已经抓了好几个小时了。我猜想这可能与我运行Powershell的帐户上的两个权限有关(不太可能,因为我登录到服务器时,帐户既是本地管理员,也是域管理员),或者密钥以某种方式被另一个进程使用。我查看了这个堆叠柱这个Reddit线程,但出于某种原因,这只适用于我为测试目的创建的空键,而不是现有的键。似乎还有其他人也有类似的问题。没有任何成功。

工作于测试

我创建了一个名为HKLM:\Software\MyTestKey的注册表项,然后运行:

代码语言:javascript
复制
Get-Item 'HKLM:\Software\MyTestKey'

这将返回:

代码语言:javascript
复制
    Hive: HKEY_LOCAL_MACHINE\SOFTWARE

Name                           Property
----                           --------
MyTestKey

所以我跑了:

代码语言:javascript
复制
Rename-Item 'HKLM:\Software\MyTestKey' -NewName "MyNewTestKey"

这将正确运行,并且我可以验证密钥MyTestKey已重命名为MyNewTestKey。如果注册表项中有空格,这也是可行的。

不工作的测试

然后,我将转到我已安装的软件的现有密钥。该软件的服务被停止。我跑

代码语言:javascript
复制
Get-Item 'HKLM:\Software\MySoftware\KeyToChangeName'

这将正确返回:

代码语言:javascript
复制
    Hive: HKEY_LOCAL_MACHINE\SOFTWARE\MySoftware

Name                           Property
----                           --------
KeyToChangeName

但是,当我跑的时候

代码语言:javascript
复制
Rename-Item 'HKLM:\Software\MySoftware\KeyToChangeName' -NewName "MyNewKeyname"

这会引发一个错误:

代码语言:javascript
复制
Rename-Item : The registry key at the specified path does not exist.
At line:1 char:1
+ Rename-Item 'HKLM:\SOFTWARE\MySoftware\KeyToChangeName...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (HKEY_LOCAL_MACH...ame|MyDomainName:String) [Rename-Item], ArgumentException
    + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.RenameItemCommand

最奇怪的一点是,Powershell实际上创建了密钥的副本,而不是重命名密钥,所以现在我拥有了KeyToChangeName和MyNewKeyname。

到目前为止,命令尝试过

  • 重命名-项目‘HKLM:\软件\MySoftware\KeyToChangeName’-NewName "MyNewKeyname“
  • 重命名-项目‘HKLM:\软件\MySoftware\KeyToChangeName’-NewName MyNewKeyname
  • 重命名-项目“HKLM:\软件\MySoftware\KeyToChangeName”-NewName "MyNewKeyname“
  • 重命名-项目“HKLM:\软件\MySoftware\KeyToChangeName”-NewName MyNewKeyname

所有这些都会导致抛出相同的错误,但它仍然创建密钥的副本,而不是重命名它。我还尝试了使用-Path和-LiteralPath标志来处理上述所有命令,但结果是相同的。

为什么powershell会告诉我密钥不存在,而它显然不存在?更奇怪的是,它为什么要创建一个与旧注册表项内容相同的新注册表项,实质上是复制它,而不是重命名它呢?

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-19 21:06:38

好的,我找到了解决方案:在尝试重新打开Powershell会话、重新登录到机器、执行ipconfig /flushdns以及/release和/renew之后,我意识到我在环境中运行了几个服务器,所有服务器都使用相同的软件,所有服务器都彼此连接。在重新启动所有服务器并停止所有正在运行的服务器上的软件服务之后,我能够正确地使用重命名项和移动项。

其他服务器上的软件正在使用我服务器上的注册表项,这阻止了我重新命名它们。但是,由于父密钥没有被软件使用或锁定,所以允许我创建与我试图重命名的密钥并行的新密钥。这就是为什么它允许旧键与当前名称保持在一起,但同时也使用新名称创建了一个新键。就我个人而言,我认为Powershell应该已经在重命名项中失败了,而不是创建一个副本,但是如果正如我所怀疑的那样,重命名项实际上是一个复制项,后面是一个删除项(在这种情况下,复制工作,但随后的删除失败)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61259161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档