【发布时间】:2016-11-02 07:41:26
【问题描述】:
我在 powershell 脚本中递归地获取具有各自权限的文件夹列表,但是当递归部分发生时,我的输出字符串每次都会打印文件夹结构,例如:
我有一个名为 C:\temp 的文件夹,该文件夹中有 2 个空文件夹 C:\temp\folder1 和 C:\temp\folder2。使用我的脚本,输出将是:
为了便于阅读,我省略了权限
C:\temp
C:\temp\folder1
C:\temp
C:\temp\folder2
我不希望这种情况发生我想要一个包含权限的文件夹列表,然后如果子文件夹的权限不同,请查看获取该文件夹的子文件夹。这与弦乐建筑不同,我认为我需要一双新的眼睛来看待它,因为我无处可去。
提前感谢帮助,
山姆
代码:
Add-Type -AssemblyName System.Windows.Forms
Import-Module ActiveDirectory
$info = ""
$OutputString
$step = 0
function DisplayForm{
#Some GUI code
#$textBox takes in the base folder from the user
if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
$baseFolder = $textBox.Text
$ParentProperties = (Get-Acl $baseFolder).Access| Select-Object -ExpandProperty IdentityReference
$OutputString = $OutputString + $baseFolder + "`r`n" + $ParentProperties + "`r`n`r`n"
$ChildFolders = Get-ChildItem $baseFolder | where {$_.Attributes -eq 'Directory'}
FindPriorities($baseFolder)
$info = "SAVED TO FOLDER"
outputList
}
}
function FindPriorities{
param($fileName)
$ChildFolders = Get-ChildItem $fileName | where {$_.Attributes -eq 'Directory'}
$step = $step + 1
$TempString = ""
foreach ($folder in $ChildFolders){
$child = $fileName + "\\" + $folder.name
$ParentProperties = (Get-Acl $fileName).Access| Select-Object -ExpandProperty IdentityReference
$ChildProperties = (Get-Acl $child).Access| Select-Object -ExpandProperty IdentityReference
$parentString=""
foreach ($p in $ParentProperties){
$parentString= $parentString + $p
}
$childString=""
foreach ($c in $childProperties){
$childString = $childString + $c
}
if($childString -ne $parentString){
$OutputString = $OutputString + $child + "`r`n" + $ChildProperties + "`r`n`r`n"
FindPriorities ($child)
}else{
$OutputString = $OutputString + $child + "`r`n" + $ChildProperties + "`r`n`r`n"
}
}
}
function outputList{
$OutputString
}
DisplayForm
【问题讨论】:
-
DisplayForm中的 foreach 代码与FindPriorities中的 foreach 代码相同,因此它们都运行了两次。 (foreach ($folder in $ChildFolders){ ... })。你还在函数DisplayForm结束时再次调用DisplayForm -
是的,这仅适用于基本文件夹中的子文件夹,然后如果它有一个具有不同权限的文件夹,则会进入该文件夹并找到子文件夹
-
---文件夹1 -----------文件夹2(相同的权限)-----------文件夹3(不同的权限)---- ----------------------------------文件夹4......等等。我总是希望它回来并检查基本文件夹中的其余文件夹,这就是为什么我有这样的原因
-
你能不能把根搜索文件夹(
$baseFolder)给FindPriorities,让它处理所有的子文件夹。那么你就不需要DisplayForm中的重复代码了吗? -
我可以,我现在就试一试,但是如果发现一个文件夹具有不同的权限,那难道不会跳过基础中的任何剩余文件夹吗?
标签: powershell directory