web-dev-qa-db-ja.com

PowerShellを使用してユーザーのHKEY_USERSレジストリキーをプログラムで見つけるにはどうすればよいですか?

ローカルマシンでそのユーザーのログイン名を知っている場合、HKEY_USERSでローカルユーザーのレジストリキーを見つける方法があるのだろうか。プログラムで特定のユーザーのレジストリキー(自動実行など)にデータを追加したいのですが、ユーザー名しかわかりません。 HKEY_USERSのどの暗号ユーザーが実際に特定のユーザー名に属しているかを確認するにはどうすればよいですか?

14
Erik
$User = New-Object System.Security.Principal.NTAccount($env:UserName)
$sid = $User.Translate([System.Security.Principal.SecurityIdentifier]).value

上記のスニペットは、ログインしたユーザーのSIDを示しています。これをHKEY_USERSに追加すると、そのユーザー名の正しいパスが提供されます。

New-PSDrive HKU Registry HKEY_USERS
Get-Item "HKU:\${sid}"
18
ravikanth

HKEY_USERSにはすべてのユーザーが含まれているわけではなく、現在アクティブなユーザーのみが含まれているため、この回答は完全ではありません。

使用するユーザーのレジストリHiveをロードする必要があります

reg load hku\ThatUserName C:\Users\ThatUserName\NTUSER.DAT

allユーザーのレジストリHiveをロードする方法の例については、 this SO answer )を参照してください。

次に、そのユーザーのレジストリにアクセスできます。

Set-Location HKU:\ThatUserName

または、次のように、New-PSDriveを呼び出して、ユーザーのレジストリに独自のドライブを提供します。

New-PSDrive -Name HKThatUser -PSProvider Registry -Root HKU\ThatUserName 
Set-Location HKThatUser:

必ずレジストリをアンロードし、ガベージコレクションを実行して、完了時にHiveが解放されるようにします。

reg unload hku\ThatUserName
[gc]::collect()

詳細については、 この投稿を参照してください

5
David Cobb

これは私のためにそれをします

ls 'hklm:software/Microsoft/windows nt/currentversion/profilelist' | ? {
  $_.getvalue('profileimagepath') -match 'Steven'
} | % pschildname

2
Steven Penny