PowerShell查找有权访问的用户名

时间:2014-12-29 18:37:34

标签: powershell batch-file icacls

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

例如

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

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

如果只有3个文件夹,我会手动执行此操作。但是,至少有1000个文件夹,并且无法及时手动恢复数据。

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

我在Windows Server 2008上使用PowerShell 2

我也可以执行VBScript或JavaScript

1 个答案:

答案 0 :(得分:1)

您可以尝试这样的方法来帮助您入门。我没有使用文件服务器atm连接到网络,因此我不确定OwnerIdentityReference是否包含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.
}