アカウント不明 (S-1-5-21-*) SID を既存の SID に置き換えるソリューションはありますか?

アカウント不明 (S-1-5-21-*) SID を既存の SID に置き換えるソリューションはありますか?

古い/他の Windows インストールからの多くのファイルに典型的な「アカウント不明」があり、どこにでも典型的な答えがたくさんあります。ただし、典型的な、、または GUI ソリューション
を探しているわけではありません。これらの不明な SID を既知のローカル SID に変更したいのですが、アクセス許可の種類と継承は維持します。takeownsubinaclxcacls

これまでのところ、私が探しているものに近いのは PowerShell スクリプトだけです。http://poshcode.org/2081ネットワーク共有内の不明な SID を削除できます。不明な SID を見つけるための基本的なロジックが含まれていますが、オブジェクト内の SID を置き換える方法はまだ見つけていませんFileSystemAccessRule。PowerShell や .NET にそれほど精通していません。
間違っていなければ、この記事MS TechNet では、の構築が提案されておりFileSystemAccessRule、これは実現可能です。

これに対するより良い解決策があるかどうか知っている人はいませんか? おそらく、この作業のためのアプリケーション、コマンド ライン ツール、またはコマンドレットがあるのでしょうか?

答え1

Powershell ではGet-Acl、を使用すると、 Set-AclSDDL 文字列を操作することで ACL を変更できます。

まず ACL オブジェクトを取得します。

$acl = Get-Acl -Path C:\YourFile.txt

次に SDDL 文字列を取得します。

$sddl = $acl.sddl

これで、文字列内の SID を必要なものに置き換えることができます。これは、正規表現を使用して部分一致を更新します。

$sddl2 = $sddl -replace "S-1-5-21-[0-9-]+", "ExistingSIDHere"

次に、ACL オブジェクトを更新します。

$acl.SetSecurityDescriptorSddlForm($sddl2)

次に、オブジェクトの ACL を設定します。

Set-Acl -AclObject $acl -Path C:\YourFile.txt

関連情報