递归有限数量的文件夹

时间:2014-05-13 18:17:57

标签: powershell recursion ntfs

我从脚本中获得以下代码片段,用于获取文件共享的NTFS权限。

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

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

if ($OutputFile){
Get-Childitem $Path -Recurse:$Recurse | ForEach-Object {Get-Acl $_.FullName} | Select-Object @{Name="Path";Expression={$_.PSPath.Substring($_.PSPath.IndexOf(":")+2) }},@{Name="Type";Expression={$_.GetType()}},Owner -ExpandProperty Access | Export-CSV $OutputFile -NoTypeInformation
}

else{
Get-Childitem $Path -Recurse:$Recurse | ForEach-Object {Get-Acl $_.FullName} | Select-Object @{Name="Path";Expression={$_.PSPath.Substring($_.PSPath.IndexOf(":")+2) }},@{Name="Type";Expression={$_.GetType()}},Owner -ExpandProperty Access | Format-Table -AutoSize
}

在我运行此操作的那一刻,我能够生成有关NTFS权限的报告,但是我想让代码在文件共享中更深入地追加一个额外的文件夹。然而,我的问题是我只知道完全递归所有文件夹或获取路径中当前文件夹的方法。

例如,假设我有一个名为'test'的文件夹,并且在测试内部还有另外两个名为'temp1'和'temp2'的文件夹,temp2中还有一个名为'extra'的文件夹。我希望它获得'test'的NTFS权限然后更高一级并报告'temp1'和'temp2'的权限,但我不希望它获得'额外'。

编辑:

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

2 个答案:

答案 0 :(得分:1)

您可以轻松地手动递归1级。试试这个尺寸:

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

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

if ($OutputFile){
gci c:\|%{if($_.PSIsContainer){GCI $_.FullName|get-acl};$_|get-acl}|sort PSParentPath|Export-CSV $OutputFile -NoType
}

else{
gci c:\|%{if($_.PSIsContainer){GCI $_.FullName|get-acl};$_|get-acl}|sort PSParentPath|FT -Auto
}

答案 1 :(得分:0)

这样的东西会下降到一个文件夹的深度

Get-Childitem $path  | %{get-childitem -path $_.fullname}