Windows

從命令行修復“此訪問控制列表不是規範形式”錯誤

  • July 11, 2018

在我們的幾個開發人員工作站上,我們遇到了可怕的“此訪問控制列表不是規範形式,因此無法修改”。當我們嘗試對某些文件夾設置權限時出錯。我們無法弄清楚是什麼破壞了這些 ACL。

現在,我知道修復它的唯一方法是右鍵點擊損壞的文件夾/文件,選擇屬性,然後點擊安全選項卡。然後 Windows 將注意到損壞並提供修復它。我不喜歡這個,因為它是手動的,並且需要使用者進行一些調查以確定哪個文件夾/文件已損壞。

是否有某個腳本或程序可以自動執行此操作?我看到它icacls有一個/verify參數,但它只是告訴我文件/文件夾上的 ACL 已損壞。它不提供修復任何東西。

我終於能夠為此找到一個自動修復程序。當您呼叫 PowerShell 的Set-Aclcmdlet 時,它將正確地重新排序 ACL:

$path = C:\Path\To\Item\With\Borked\ACL
$acl = Get-Acl $path
Set-Acl $path $acl

當然,它可能是搞砸的目錄的父級,所以你應該做一些遍歷以找到罪魁禍首。用於icacls C:\Path\To\Item\With\Suspect\CL /verify確定是否需要維修。

在我們的環境中,Cygwin 可能是罪魁禍首:當它創建目錄時,牠喜歡為它們提供 POSIX 樣式的權限,而不是依賴 Windows 來管理文件系統的安全性。

引用自:https://serverfault.com/questions/209957