通常TrustedInstaller が所有するレジストリ値を変更する Powershell スクリプトがあります。基本的なワークフローは次のとおりです。
編集用のキーを開いてみる
これが失敗した場合は、アクセス許可のキーを開いてみてください
- これが失敗した場合は、所有権を取得するためにキーを開いてください
- ACL をバックアップします。
if ($backupAcl -eq $null) { $backupAcl = $key.GetAccessControl(); }
- ACL の作業コピーを取得します。
$acl = $key.GetAccessControl();
- で所有者を設定します
$acl.SetOwner($me);
- 権限変更のキーを開く
ACL をバックアップします。
if ($backupAcl -eq $null) { $backupAcl = $key.GetAccessControl(); }
- ACL の作業コピーを取得します。
$acl = $key.GetAccessControl();
- で権限を適用します
$acl.AddAccessRule($rule); $acl.SetAccessControl($acl);
- キーを開いて編集する
変更する必要がある値を変更する
$key.SetValue(...)
以前に行った権限への変更を元に戻します。
アクセス許可を元に戻すために使用しているコードは次のとおりです。
$key = [Microsoft.Win32.Registry]::ClassesRoot.OpenSubKey($subKeyName, $regOpenMode, $regTakeOwnChangePerms);
Write-Host "Setting permissions to:"
Format-List -InputObject $aclBackup;
$key.SetAccessControl($aclBackup);
Write-Host "Permissions set to:"
Format-List -InputObject $key.GetAccessControl();
$key.Close();
...しかし、実際には ACL を元の状態に戻すことはありません。
これ以外は、スクリプトは正常に動作します。ACL は、値を変更するために必要なものに設定され ( ACL を変更できることがわかります)、値自体が変更されます ( ACLを変更したことがわかります)。 .
しかし、復帰は決してかかりません。例外は発生しません。
なぜだめですか?また、ACL をスクリプトが開始されたときの状態に戻すにはどうすればよいでしょうか?