【问题标题】:Get ACL of folder for a specific user获取特定用户的文件夹 ACL
【发布时间】:2019-09-07 16:52:02
【问题描述】:

我是 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

【问题讨论】:

    标签: powershell permissions directory powershell-2.0 acl


    【解决方案1】:

    这是另一种选择。这会将完整的输出存储在一个列表中,如果需要,该列表可以导出为 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
    

    【讨论】:

    • 这正是我想要的!非常感谢。
    【解决方案2】:

    这样的东西会得到你需要的信息,比如文件夹、用户和权限。然后您可以创建您想要的输出,例如 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
    }
    
    

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

    【讨论】:

    • 非常感谢。有没有办法检查组的权限?
    • 一种方法是首先获取用户所属的所有组,然后检查是否 ($_.IdentityReference -in $userGroupList)
    • 是的,我也想过。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 2016-04-14
    • 2016-03-05
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多