Перечислите все папки, где пользователи (кроме администратора) имеют полный доступ
На файловом сервере нашей компании у нас были свободные разрешения несколько лет назад. Это означает, что есть папки, где пользователи обычно имеют полное разрешение. Это плохо (пользователь, играющий с правами, блокирующий систему (и резервную копию с ней) и только предоставляющий себе доступ.
Моя цель:
Сканирование папки файлового сервера по папкам (файлов будет слишком много) и вывод
- полный путь к папке
- Ссылка на личность
если у кого-то есть fullaccess помимо администраторов домена или системы.
Вывод будет в порядке как:
Путь, ACL E:\share\projectfolder, домен \10JohnDoe E:\share\commonfolder, домен \ все...
Это то, что у меня есть, но этого недостаточно:
##define variable
$path = "E:\Share"
## begin script
foreach ($file in Get-Childitem $path -Recurse -Directory) {
if (Get-Acl $file.FullName |
select -ExpandProperty Access |
where {$_.IdentityReference -notlike "AT\Domain Admins" -and
$_.IdentityReference -notlike "NT AUTHORITY\SYSTEM" -and
$_.AccessControlType -like "Allow" -and
$_.FileSystemRights -like "FullControl"}
) {
Write-Host $file.FullName >> e:\check_acl.txt
Get-Acl $file.FullName |
select -ExpandProperty Access |
where {$_.IdentityReference -notlike "AT\Domain Admins" -and
$_.IdentityReference -notlike "NT AUTHORITY\SYSTEM" -and
$_.AccessControlType -like "Allow" -and
$_.FileSystemRights -like "FullControl"
} >> e:\check_acl.txt
}
}
Но я думаю, я не могу получить вывод (в файл!), Как это.
1 ответ
Write-Host
только выводит текст на консоль, его нельзя сохранить. Get-Acl >> check_acl.txt
напишу весь "объект", а не только идентификационную ссылку. Вам нужно создать пользовательский объект со свойством Path и ACL (identityreference) и экспортировать его в csv.
Я также упростил ваше исключение идентификации и изменил if-тест на цикл foreach, чтобы вам не нужно было запускать весь Get-ACL
строчка дважды.
Попробуй это:
##define variable
$path = "E:\Share"
$ExcludeUsers = 'AT\Domain Admins','NT AUTHORITY\SYSTEM','AT\AT-IT','AT\01STREW','AT\01BRUND','AT\01KNAFP','AT\01BECKC'
## begin script
#Create regex-pattern to match all excluded users
$ExcludeUsersRegex = ($ExcludeUsers | % { [regex]::Escape($_) }) -join '|'
Get-Childitem $path -Recurse -Directory | ForEach-Object {
$file = $_
Get-Acl -Path $file.FullName |
Select-Object -ExpandProperty Access |
Where-Object {$_.IdentityReference -notmatch $ExcludeUsersRegex -and $_.AccessControlType -eq "Allow" -and $_.FileSystemRights -eq "FullControl"} |
ForEach-Object {
#Foreach ACL
New-Object psobject -Property @{
Path = $file.FullName
ACL = $_.IdentityReference
}
}
} | Select-Object -Property Path, ACL | Export-Csv e:\check_acl.csv -NoTypeInformation
Образец вывода:
"Path","ACL"
"C:\Users\frode\Desktop\TEST\YES","CONTOSO\frode"
"C:\Users\frode\Desktop\TEST\YES","CONTOSO\FrodesOtherAccount"