如何使用 powershell 以编程方式查找用户 HKEY_USERS 注册表项?
Posted
技术标签:
【中文标题】如何使用 powershell 以编程方式查找用户 HKEY_USERS 注册表项?【英文标题】:How can I programmatically find a users HKEY_USERS registry key using powershell? 【发布时间】:2012-06-10 03:28:36 【问题描述】:如果您知道本地计算机上该用户的登录名,我想知道是否有办法在 HKEY_USERS 中找到本地用户的注册表项。我想以编程方式将内容添加到特定用户的注册表项(例如 Autorun),但我只知道用户名。如何确定 HKEY_USERS 中的哪些神秘用户实际上属于特定用户名?
【问题讨论】:
【参考方案1】:$User = New-Object System.Security.Principal.NTAccount($env:UserName)
$sid = $User.Translate([System.Security.Principal.SecurityIdentifier]).value
上面的 sn-p 给你登录用户的 SID。当附加到 HKEY_USERS 时,这将为您提供该用户名的正确路径。
New-PSDrive HKU Registry HKEY_USERS
Get-Item "HKU:\$sid"
【讨论】:
好的,您知道如何以编程方式 (PowerShell) 加载用户配置单元,就像可以使用 regedit.exe 一样? U 的意思类似于 reg.exe LOAD 选项? @JPBlanc 看起来 .NET 和随后的 PowerShell 不支持这样做。您必须使用 RegLoadKey() P/Invoke Windows API。看看这个 - csharphelp.com/2007/01/registry-ins-and-outs-using-c 感谢@Andy Arismendi,这是我的怀疑。 嗨,非常感谢您的回答,但是,我可以按照您描述的方式找到其他用户的 SID,但是当我打开 regedit.exe 时,我得到了一个看不到的 SID。所以问题是我如何最终添加或更改该用户路径的键?是否必须以某种方式显式加载,如果是,如何实现?【参考方案2】:此答案不完整,因为 HKEY_USERS 不包含所有用户,仅包含当前活跃的用户。
您需要为要使用的用户加载注册表配置单元
reg load hku\ThatUserName C:\Users\ThatUserName\NTUSER.DAT
请参阅this SO answer,了解如何为所有用户加载注册表配置单元的示例。
然后您可以使用以下命令访问该用户的注册表
Set-Location HKU:\ThatUserName
或者调用 New-PSDrive 给用户的注册表它自己的驱动器,像这样:
New-PSDrive -Name HKThatUser -PSProvider Registry -Root HKU\ThatUserName
Set-Location HKThatUser:
一定要卸载注册表,并进行垃圾收集以确保在完成后释放配置单元:
reg unload hku\ThatUserName
[gc]::collect()
见this post for more info
【讨论】:
确保释放 hive 的部分很重要。我不得不将订单切换到[gc]::collect() [GC]::WaitForPendingFinalizers() reg unload hku\ThatUserName
。否则,我在卸载时收到权限被拒绝错误。如果我不卸载它,则不会保存对注册表的更改。
@absynce 赞成但不幸的是答案不正确,无论是否使用,在调用 reg unload
之前都必须关闭密钥,请参见此处:docs.microsoft.com/en-us/dotnet/api/…【参考方案3】:
这对我有用
ls 'hklm:software/microsoft/windows nt/currentversion/profilelist' | ?
$_.getvalue('profileimagepath') -match 'Steven'
| % pschildname
Example
【讨论】:
以上是关于如何使用 powershell 以编程方式查找用户 HKEY_USERS 注册表项?的主要内容,如果未能解决你的问题,请参考以下文章