删除注册表值的父键

Posted

技术标签:

【中文标题】删除注册表值的父键【英文标题】:Deleting a Registry value's Parent Key 【发布时间】:2014-09-07 12:22:21 【问题描述】:

我们目前正在升级到新的无线系统,并通过 GPO 推出 SSID。但是,我们想从系统中删除现有的 SSID/配置文件,这不是简单地使用“netsh wlan delete profile name”的问题。我们遇到的问题是从我们用户的“Lenovo Access Connections”中删除这些配置文件,它管理着大多数(如果不是全部)用户的各种网络配置文件。如果它被 netsh 删除,用户只需打开 Access Connections,它就会在 Windows 中重新创建该配置文件。 我们不能简单地删除配置文件,因为每个用户都可以在程序中使用他们想要的任何昵称来命名我们的公司网络。话虽如此,我已经找到了这些配置文件在注册表中的存储位置。

联想访问连接:

HKLM\SOFTWARE\Wow6432Node\Lenovo\Access Connections\Locations

这就是问题所在,我想不出办法在Locations 文件夹中搜索我们的 SSID,然后删除它的主键。目前的布局是这样的:

\Locations\(Custom Profile Name)\AdptList\Adpt00\

Adpt00 键中有一个Reg_SZ,名称为m_szSsid,其值=Our Network 的SSID。所以,基本上我希望搜索所有\Locations,如果Adpt00 中每个不同配置文件的密钥中的任何m_szSsid 存在.. 从\Locations 中删除整个配置文件,是的一些由于我不知道的原因,我们的用户为同一个网络 SSID 设置了多个配置文件。

这是我目前所拥有的

$LACKey = "HKLM:\SOFTWARE\Wow6432Node\Lenovo\Access Connections\Locations"
$LACProfileKey = Get-ChildItem $LACKey -Recurse -ErrorAction SilentlyContinue | ForEach-Object 
   If((Get-ItemProperty -Path $_.PsPath) -match "m_szSsid")
      
      $_.PsPath
      
  

这将返回\Locations 下当前测试机器的唯一配置文件(仅包含一个匹配的配置文件),但从这里我不确定如何为找到的每个匹配的无线配置文件扩展 m_szSsid 以确保它匹配我们的SSID。然后从那里删除\Locations\下的父配置文件文件夹

编辑:

我做了一些改变

$LACKey = 'SOFTWARE\Wow6432Node\Lenovo\Access Connections\Locations'
$LACProfileKey = Get-ChildItem "HKLM:\$LACKey" -Recurse -ErrorAction SilentlyContinue | ForEach-Object 
If(( Get-ItemProperty -Path $_.PsPath) -match "m_szSsid") 
$_.PsPath 
ForEach-Object 
If((Get-ItemProperty -Path $LACProfileKey -Name m_szSsid).m_szSsid -match "<Company SSID HERE>") 
$ssIDKey = (Get-ItemProperty -Path $LACProfileKey $_.PSParentPath).PSParentPath




但是我返回了这个错误

Get-ItemProperty : Property Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Lenovo\Access C
onnections\Locations\<Company SSID HERE>\AdptList does not exist at path HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Lenovo\Access Con
nections\Locations\HYDAC-NA\AdptList\Adpt00.
At line:6 char:29
+ $ssIDKey = (Get-ItemProperty <<<<  -Path $LACProfileKey $_.PSParentPath).PSParentPath
+ CategoryInfo          : InvalidArgument: (Microsoft.Power...ID ERE>\AdptList:String)   [Get-ItemProperty], PSArgume
   ntException
   + FullyQualifiedErrorId :    System.Management.Automation.PSArgumentException,Microsoft.PowerShell.Commands.GetItemPr
  opertyCommand

我将不胜感激任何进一步的指导,我确信很明显我是一个 Powershell 新手;)

【问题讨论】:

【参考方案1】:

你试过了吗:

Get-ItemProperty -Path $_.PSPath -Name "m_szSsid" 

您还拥有$_.PSPath$_.PSParentPath,有了这些信息,您应该能够在相应的注册表项上使用Remove-Item

【讨论】:

谢谢你的提示,我已经用这些建议更新了我的“进度”。

以上是关于删除注册表值的父键的主要内容,如果未能解决你的问题,请参考以下文章

从注册表项路径中提取根配置单元

注册表

如何处理 jdbc 事务中的父键约束?

如何使用 java 从 Firebase 检索新添加的子项的父键

WiX 3.8:使用相同注册表值的两个MSI。如果同时卸载两个MSI,如何删除注册表值?

JavaScript:将具有父键的对象数组转换为父/子树(包括没有父的对象)