#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. Это сработало отлично! Не могу вас отблагодарить, слишком долго ломал голову над этим.