使用Get-ACL获取文件共享权限

时间:2014-05-20 14:06:19

标签: powershell ntfs

我有以下脚本,根据给定的路径报告当前文件夹并递归一级以获取任何子文件夹权限。

if ($ComputerName -eq '.'){
$Path = $Folder
}

else {
$Path = "\\$ComputerName\$Folder"
}ls

if ($OutputFile){
gci $Path|%{if($_.PSIsContainer){GCI $_.FullName|get-acl};$_|get-acl}| sort PSParentPath| Select-Object @{Name="Path";Expression={$_.PSPath.Substring($_.PSPath.IndexOf(":")+2) }},@{Name="Type";Expression={$_.GetType()}},Owner -ExpandProperty Access | Export-CSV $OutputFile -NoType
}

else{
gci $Path|%{if($_.PSIsContainer){GCI $_.FullName|get-acl};$_|get-acl}|sort PSParentPath| Select-Object @{Name="Path";Expression={$_.PSPath.Substring($_.PSPath.IndexOf(":")+2) }},@{Name="Type";Expression={$_.GetType()}},Owner -ExpandProperty Access | FT -Auto
}

我遇到问题我没有获得实际共享的权限。例如,假设我的路径是\ Server \ share \ folder1 \ folder2 \ folder3。我想获得share和folder1的权限,但是当我运行这个时,我得到的是share内部的内容和超出它的一个级别。

1 个答案:

答案 0 :(得分:1)

问题是,您要做的第一件事就是获取$ Path的内容,并获取所有内容的ACL,如果它是一个文件夹,您将获得这些文件夹内容的ACL,但你实际上从来没有得到$ Path本身的ACL。我想你想做的是:

if ($ComputerName -eq '.'){
    $Path = $Folder
}

else {
    $Path = "\\$ComputerName\$Folder"
}

$Output = @()
$Output += get-acl $Path
$Output += GCI $Path | ?{$_.PSIsContainer} | Get-ACL

if ($OutputFile){
    $Output | sort PSParentPath| Select-Object @{Name="Path";Expression={$_.PSPath.Substring($_.PSPath.IndexOf(":")+2) }},@{Name="Type";Expression={$_.GetType()}},Owner -ExpandProperty Access | Export-CSV $OutputFile -NoType
}

else{
    $Output | sort PSParentPath| Select-Object @{Name="Path";Expression={$_.PSPath.Substring($_.PSPath.IndexOf(":")+2) }},@{Name="Type";Expression={$_.GetType()}},Owner -ExpandProperty Access | FT -Auto
}

这将创建一个用于存储ACL的数组。然后它获取$ Path的ACL并将其存储在数组中,然后它获取$ Path中所有文件夹的ACL并将其添加到数组中,然后输出它就像你想要的那样。