如何更改PowerShell中其他用户的特定registry设置

目标:

要在PowerShell中编辑特定用户的特定registry项设置,而不是其他人

已知:

操作系统:Windows 8.1embedded式行业专业版(与Win 8.1相同,但具有一些embedded式function)

我可以通过打开REGEDIT,selectHKU,然后点击文件菜单,单击加载configuration单元,导航到用户的configuration文件目录,例如:c:\ users \ MrEd,然后在出现提示时input'ntuser .dat' – 导入HKEY_CURRENT_USER。 Hive将被装入HKU,您可以浏览并进行必要的修改。

概要:

我有一个powershell脚本返回特定用户的SID,但是当在registryconfiguration单元的上下文中使用时,configuration单元“没有find” – 所以我猜我一定是错过了一个步骤? 如何从Powershell“加载configuration单元”? 还是我错过了一个特殊的,神奇的山羊内脏键盘上的咒语?

Param( [string]$user= $null ) Function GetSIDfromAcctName() { Param( [Parameter(mandatory=$true)]$userName ) $myacct = Get-WmiObject Win32_UserAccount -filter "Name='$userName'" return $myacct.sid } if($user) { $sid = GetSIDfromAcctName $user New-PSDrive HKU Registry HKEY_USERS $myHiveEntry = Get-Item "HKU:\${sid}" Write-Host "Key:[$myHiveEntry]" } 

Solutions Collecting From Web of "如何更改PowerShell中其他用户的特定registry设置"

您现有的代码应该适用于其配置单元已经加载的用户(如当前登录的用户),但不会尝试加载配置单元。

我不知道有一种方法来编程调用来加载配置单元,但你可以reg.exereg.exe

这最终是有点janky。 如果它在任何地方被使用,似乎有卸载蜂巢的问题,所以我已经在这个示例中放置了一堆垃圾,试图摆脱可能将它打开的东西,但在我的测试中,它可以采取在reg unload命令成功之前一段时间,因此finally块中的整个重试部分。

这是超级粗糙,我只是当场鞭打。

 Function GetSIDfromAcctName() { Param( [Parameter(mandatory=$true)]$userName ) $myacct = Get-WmiObject Win32_UserAccount -filter "Name='$userName'" return $myacct.sid } $user = 'someuser' $sid = GetSIDfromAcctName -userName $user $path = Resolve-Path "$env:USERPROFILE\..\$user\NTUSER.DAT" try { reg load "HKU\$sid" $path #New-PSDrive -Name HKUser -PSProvider Registry -Root "HKEY_USERS\$sid" #Get-ChildItem HKUser:\ Get-ChildItem Registry::\HKEY_USERS\$sid } finally { #Remove-PSDrive -Name HKUser [System.GC]::Collect() [System.GC]::WaitForPendingFinalizers() $retryCount = 0 $retryLimit = 20 $retryTime = 1 #seconds reg unload "HKU\$sid" #> $null while ($LASTEXITCODE -ne 0 -and $retryCount -lt $retryLimit) { Write-Verbose "Error unloading 'HKU\$sid', waiting and trying again." -Verbose Start-Sleep -Seconds $retryTime $retryCount++ reg unload "HKU\$sid" } } 

这不使用PS驱动器,但代码也在那里,注释。

请注意,如果您没有用SID命名Hive挂载点,则根本不需要SID,因为您仍然使用用户名来查找NTUSER.DAT文件。