Глубина рекурсии в Powershell 4

#powershell #powershell-4.0

#powershell #powershell-4.0

Вопрос:

Я пытаюсь извлечь небольшую информацию о вложенных папках в данном каталоге. Я довольно новичок в powershell, но после недели или около того спотыкания мне удалось собрать это, что идеально подходит для моих целей в Powershell 5. Проблема в том, что мне нужно создать эквивалентный скрипт, который будет выполняться в Powershell 4. Единственное, что, похоже, не работает, это -Depth , что является необходимостью.

 $FolderPath = dir -Directory -Path "D:FILEPATH" -Recurse -Force -Depth 3
$Report = @()
Foreach ($Folder in $FolderPath) {
    $Acl = Get-Acl  -Path $Folder.FullName
    foreach ($Access in $acl.Access)
        {
        if (!($Access.IdentityReference -in $Exclude)) {
            $Properties = [ordered]@{
            'Folder and Location'=$Folder.FullName;
            'AD Group or User'=$Access.IdentityReference; 
            'Permissions'=$Access.FileSystemRights;
            'Inherited'=$Access.IsInherited}

            $Report  = New-Object -TypeName PSObject -Property $Properties
        }
    }
}
$Report | Export-Csv -path "FILEPATHTest.csv"
  

Я попытался добавить "******" и несколько вариантов в него, чтобы получить желаемый результат, но они либо дали мне из 3-й подпапки вниз, либо ничего не вернули. Я также изучил Get-ChildItemToDepth настройку, но, похоже, она ограничена только функциями, и я понятия не имею, как включить это в то, что у меня есть в настоящее время. Любые рекомендации будут высоко оценены!

Комментарии:

1. вы можете вычислить глубину и удалить те, которые не соответствуют тому, что вам нужно. например, ('C:Program FilesCommon Filesmicrosoft sharedTextConv' -replace '[^\]', '').Length даст 4 для глубины.

Ответ №1:

Что вы можете сделать, так это получить нерекурсивный список для каждого уровня, корневой папки, а затем трех рекурсивных уровней, которые были бы включены -depth 3 . Вы можете запустить это на своем компьютере PS5 и сравнить $FolderPath.count с тем, что вы используете -Depth 3 , и вы должны получить тот же результат.

 $FolderPath = $(dir -Directory -Path "D:FILEPATH*" -Force
dir -Directory -Path "D:FILEPATH**" -Force
dir -Directory -Path "D:FILEPATH***" -Force
dir -Directory -Path "D:FILEPATH****" -Force)
  

Комментарии:

1. Это сработало отлично! Не могу вас отблагодарить, слишком долго ломал голову над этим.