Я не провел много испытаний, но следующий сценарий PowerShell должен работать:
param([string]$path)
get-childitem $path -recurse | Foreach {
$file=$_;get-acl $($_.FullName)} | Foreach {
[bool]$SystemHasAccess = $false
$_.GetAccessRules($True,$True,[Security.Principal.SecurityIdentifier]) | Foreach {
if ($_.IdentityReference -eq "S-1-5-18") { $SystemHasAccess = $true } # system sid
if ($_.IdentityReference -eq "S-1-1-0") { $SystemHasAccess = $true } # everyone sid
}
if ($SystemHasAccess -eq $false)
{
write-host "System has no access to $($file.FullName)"
}
}
скопируйте код в файл, скажем «FindFilesWithoutSystemAccess.ps1», затем вызовите его, указав путь, который вы хотите найти:
FindFilesWithoutSystemAccess.ps1 -path C:\
Скрипт перебирает все файлы по пути, включая любые файлы в подкаталогах.
Для каждого файла он просматривает все записи контроля доступа в списке контроля доступа файла. Если ни один из них не соответствует внутреннему sid системы (S-1-5-18), он выводит полное имя файла.
Возможно, что файл имеет ACE для системы, но это запрещенный ACE, что означает, что приведенный выше скрипт не перехватывает файл и система по-прежнему не может получить к нему доступ. Однако сценарий маловероятен, и вы можете использовать аналогичный сценарий для поиска таких файлов.