Saya belum melakukan banyak pengujian, tetapi skrip PowerShell berikut harus berfungsi:
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)"
}
}
salin kode ke file, katakan "FindFilesWithoutSystemAccess.ps1", lalu panggil dengan menyediakan jalur yang ingin Anda cari:
FindFilesWithoutSystemAccess.ps1 -path C:\
Script loop melalui semua file di bawah path termasuk file dalam sub-direktori. Untuk setiap file itu loop melalui semua entri kontrol akses dalam daftar kontrol akses file. Jika tidak ada yang cocok dengan sisi internal sistem (S-1-5-18), ia mencetak nama lengkap file.
Ada kemungkinan bahwa file memiliki ACE untuk Sistem, tetapi itu adalah ACE tolak, yang berarti skrip di atas tidak menangkap file dan Sistem masih tidak dapat mengaksesnya. Namun skenario tidak mungkin dan Anda dapat menggunakan skrip yang mirip untuk menemukan file tersebut.
Set-ExecutionPolicy Unrestricted -Scope Process
dan.\FindFilesWithoutSystemAccess.ps1 -path C:\cygwin\home\Chloe
memberikan kesalahan ini:.\FindFilesWithoutSystemAccess.ps1 : Access to the path 'C:\cygwin\home\Chloe\FindFilesWithoutSystemAccess.ps1' is denied. At line:1 char:1