获取特定用户的文件夹的ACL

时间:2019-04-17 12:29:24

标签: powershell permissions directory powershell-v2.0 acl

我是Powershell的新手,我需要知道如何列出特定用户的文件夹的所有权限。这是我到目前为止发现的:

但是,使用Write-Output命令不会返回任何值。将其更改为Write-Host不能正常工作。我是否缺少一些关键部分?

$user = "testumgebung\cbruehwiler"
$path = "T:\"
$list = Get-ChildItem $path -Recurse | Where-Object {(Get-Acl $_.FullName).Access | Where-Object {$_.IdentityReference -eq $user} }
Write-Output $list

这确实会返回一个包含文件夹的列表,我可以访问该文件夹。但是,如果能得到一个包含所有我可以访问的文件夹的列表并列出我所拥有的权限(读取,写入,执行,完全控制),那就更好了。

这是列表的示例:

  

目录:T:\

     

模式:d ----

     

LastWriteTime:17.04.2019 08:25

     

名称:TestFolder

2 个答案:

答案 0 :(得分:0)

类似的东西将获得您所需的信息,例如文件夹,用户和权限。然后,您可以创建所需的输出,例如csv文件,自定义对象或任何您需要的内容。

$user = "testumgebung\cbruehwiler"
$path = "T:\"
$folders = Get-ChildItem $path -Recurse
foreach ($folder in $folders)
{
    $acl = (Get-Acl $folder.FullName).Access | Where-Object { $_.IdentityReference -eq $user }
    # Folder name
    $folder.FullName
    # User/group name
    $acl.IdentityReference
    # Folder permissions
    $acl.FileSystemRights
}

我不确定如何在文件夹中设置权限,但是请记住,您要使用的这种方法将不会检查用户是否是有权访问该文件夹的组的成员,而只会检查该用户是否可以直接访问它。

答案 1 :(得分:0)

这是另一种选择。这样会将完整的输出存储在一个列表中,如果需要,可以将其导出到CSV或类似格式。

$User = "testumgebung\cbruehwiler"
$Path = "T:\"
# Generic list object to store output in
$List = New-Object System.Collections.Generic.List[System.Object]

# Fields we want in list, an array of calculated properties.
$OutputFields = @(
    @{name="Item" ;       expression={$_.Path.split(':',3)[-1]}}
    @{name="Rights" ;     expression={$Right.FileSystemRights}}
    @{name="AccessType" ; expression={$Right.AccessControlType}}
) 
# Store all objects in variable
$FileSystemObjects = Get-ChildItem $Path -Recurse | ForEach-Object {Get-Acl $_.FullName}

# Iterate through every object
foreach ($Item in $FileSystemObjects) {
    # Iterate through every individual user right within each object
    # Add it to our list if it matchers our $User
    foreach ($Right in $Item.Access) {
        if ($Right.IdentityReference -eq $User) {
            $List.Add(($Item | Select-Object $OutputFields))
        }
    }   
}
# Output our list to screen.
$List