PowerShell для поиска имен пользователей, которые имеют доступ
Я пытаюсь получить ACL набора папок, чтобы увидеть, указан ли конкретный пользователь
Например
Users
|
---Person1
---Person2
---Person3
Лица от 1 до 3 являются домашними папками. Недавно мы запустили команду icacls, чтобы изменить разрешение папки. У некоторых из них владелец установлен на "Сотрудник ИТ" вместо Person1
Если бы было только 3 папки, я бы сделал это вручную. Однако существует как минимум 1000 папок, и вручную было бы невозможно своевременно вернуть данные.
В основном это 6 ИТ-сотрудников, и я хочу убедиться, что их имя не находится ни в одной домашней папке Person (или в ее подпапках). Если это так, то я хочу иметь возможность удалить их или, по крайней мере, получить консольный журнал.
Я использую PowerShell 2 на Windows Server 2008
Я также могу выполнить VBScript или JavaScript
1 ответ
Вы можете попробовать что-то вроде этого, чтобы начать. Я не подключен к сети с файловым сервером atm., Поэтому я не уверен, что Owner
а также IdentityReference
содержит DOMAIN\Username
или SID (это происходит для несуществующих пользователей, например удаленных). я получил <DOMAIN or ComputerName>\Username
когда я запускаю его на м локальной машине. Возможно, вам придется изменить его, чтобы справиться с этим.
$rootpath = "c:\users"
#Get all folders
Get-ChildItem -Path $rootpath -Recurse | Where-Object { $_.PSIsContainer }
#Get ACL for the folders
Get-Acl |
#Find ACLs with IT Employee-reference
Where-Object {
#Check if owner matches 'IT Employee' or ACL Access rules contains 'IT Employee'
if(($_.Owner -match 'IT Employee') -or ($_.Access | Where-Object { $_.IdentityReference.Value -match 'IT Employee' })) { $_ }
} |
#Process
ForEach-Object {
#Show folderpath...
$_.Path
#Here you could access the ACL-object $_, modify it (change owner/remove access rules) and save it by using 'Set-Acl -Path $_.Path -AclObject $_' etc.
}