获取特定用户的文件夹 ACL
Get ACL of folder for a specific user
我是 Powershell 的新手,我需要知道如何列出特定用户的文件夹的所有权限。这是我到目前为止发现的:
但是,这不会 return 写入输出命令的任何值。将其更改为 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
这会 return 包含我可以访问的文件夹的列表。但如果我能得到一个列表,其中包含我有权访问的所有文件夹并列出我拥有的权限(读取、写入、执行、完全控制),那就更好了。
这是列表的示例:
Directory: T:\
Mode: d----
LastWriteTime: 17.04.2019 08:25
Name: TestFolder
像这样的东西会得到你需要的信息,比如文件夹、用户和权限。然后您可以创建所需的输出,例如 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
}
我不确定您的文件夹中的权限是如何设置的,但请记住,您要采用的这种方法不会检查用户是否是有权访问该文件夹的组的成员,它只会检查是否用户可以直接访问它。
这是另一种选择。这会将完整的输出存储在一个列表中,如果需要,该列表可以导出为 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
我是 Powershell 的新手,我需要知道如何列出特定用户的文件夹的所有权限。这是我到目前为止发现的:
但是,这不会 return 写入输出命令的任何值。将其更改为 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
这会 return 包含我可以访问的文件夹的列表。但如果我能得到一个列表,其中包含我有权访问的所有文件夹并列出我拥有的权限(读取、写入、执行、完全控制),那就更好了。
这是列表的示例:
Directory: T:\
Mode: d----
LastWriteTime: 17.04.2019 08:25
Name: TestFolder
像这样的东西会得到你需要的信息,比如文件夹、用户和权限。然后您可以创建所需的输出,例如 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
}
我不确定您的文件夹中的权限是如何设置的,但请记住,您要采用的这种方法不会检查用户是否是有权访问该文件夹的组的成员,它只会检查是否用户可以直接访问它。
这是另一种选择。这会将完整的输出存储在一个列表中,如果需要,该列表可以导出为 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