PowerShell,用于查找具有访问权限的用户名



>我正在尝试获取一组文件夹的ACL以查看是否列出了特定用户

例如

 Users
 |
  ---Person1
  ---Person2
  ---Person3

人员 1 到 3 是主文件夹。我们最近运行了一个 icacls 命令来修改文件夹权限。其中一些将所有者设置为"IT 员工"而不是人员 1

如果只有 3 个文件夹,我会手动执行此操作。但是,至少有1000个文件夹,手动及时取回数据是不可行的。

基本上有 6 名 IT 员工,我想确保他们的名字不在任何个人主文件夹(或其子文件夹)中。如果它在那里,那么我希望能够删除它们或至少获得控制台日志。

我在 Windows Server 2008 上使用 PowerShell 2

我也可以执行VBScript或JavaScript

你可以尝试这样的事情来帮助你开始。我没有连接到带有文件服务器 atm 的网络,所以我不确定OwnerIdentityReference是否包含DOMAINUsername或 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.
}

最新更新