icacls: 空の ACL を持つ所有ファイルを変更しようとすると「アクセスが拒否されました」

icacls: 空の ACL を持つ所有ファイルを変更しようとすると「アクセスが拒否されました」

空の ACL を持つファイルを削除できないという奇妙な問題が発生しています。

>icacls "avfilter-7_ms.dll" /grant Administrator:F
avfilter-7_ms.dll: Access is denied.

ファイルは次のようになります:

リンク

このオブジェクトにアクセスするグループまたはユーザーはありません。

ただし、Windows セキュリティ UI を使用すると、オブジェクトにフル コントロールとして自分自身を追加できます。削除するファイルが何千もありますが、これを行う方法はありますか? icacls はこれらのファイルにまったく触れられないようです。

答え1

.NET を少しいじってみたところ、ACL エントリを追加して 1 つのファイルを削除できるようになりました (次に Get-ChildItem の ForEach が必要です)。

$rule = new-object System.Security.AccessControl.FileSystemAccessRule "Administrator", "FullControl", "Allow";
$p = "bad_file.txt"
$acl = [System.IO.File]::GetAccessControl($p);
$acl.SetAccessRule($rule);
[System.IO.File]::SetAccessControl($p, $acl);

関連情報