ローカルマシンでそのユーザーのログイン名を知っている場合、HKEY_USERSでローカルユーザーのレジストリキーを見つける方法があるのだろうか。プログラムで特定のユーザーのレジストリキー(自動実行など)にデータを追加したいのですが、ユーザー名しかわかりません。 HKEY_USERSのどの暗号ユーザーが実際に特定のユーザー名に属しているかを確認するにはどうすればよいですか?
$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}"
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()
詳細については、 この投稿を参照してください
これは私のためにそれをします
ls 'hklm:software/Microsoft/windows nt/currentversion/profilelist' | ? {
$_.getvalue('profileimagepath') -match 'Steven'
} | % pschildname