PowerShell Получает только папку верхнего уровня Childitem

#powershell #directory #size

#powershell #каталог #размер

Вопрос:

Я пытаюсь получить информацию ( Size , LastWriteTime ) о наборе папок. Мне нужно знать только для папок верхнего уровня, т.Е. c:Logs , C:Storage , D:backup Я не хочу знать информацию о том, что находится в этих папках внутри.

Я написал скрипт, который почти соответствует моим требованиям, но проблема в том, что скрипт просматривает содержимое этих папок, а не просто просматривает только родительскую папку (d:backup и т.д. …)

 $path = Import-Csv C:UserspshellDesktoppaths.csv

Foreach ($paths in $path) {
  get-childitem $paths.path | where {$_.PSIsContainer} | 
    select-object FullName, Name, Creationtime, @{Name="MB";Expression={$_.Length / 1MB}}, 
         LastAccessTime, @{Name="Owner";Expression={(Get-ACL $_.Fullname).Owner}}

}
  

Это дает мне нужную мне информацию, но в большей глубине, которую я не хочу иметь на данном этапе.

Чего я не понимаю, так это почему Get-Childitem не просматриваются только папки верхнего уровня? Я имею в виду, что я не использовал -Recurse переключатель, поэтому он должен сканировать только верхний уровень.

Ответ №1:

Get-ChildItem возвращает дочерние элементы (например, содержимое) указанных вами путей. Вот почему это выглядит как повторение, потому что оно показывает вам все папки, которые находятся внутри этих путей, но не содержимое этих папок (для этого потребуется -Recurse ).

Если вы просто хотите получить информацию о путях, вам, вероятно, следует использовать Get-Item , но будьте осторожны, вы не сможете получить размер пути Windows без итерации по его содержимому.

Это был бы один из способов получить размер каждого пути (я предполагаю, что вам нужен общий размер пути, включая вложенные папки, если не удалить -recurse , чтобы просто получить размер файлов в этой конкретной папке):

 $path = @(@{path = 'C:temp'},@{path = 'c:users'})

Foreach ($paths in $path)
{
    $Size = (Get-ChildItem $paths.path -File -Recurse | Measure-Object Length -Sum).Sum
    Get-Item -Path $paths.path | select-object FullName, Name, Creationtime, @{Name="MB";Expression={$Size / 1MB}}, LastAccessTime, @{Name="Owner";Expression={(Get-ACL $_.Fullname).Owner}}
}
  

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

1. как это будет работать в моем случае? Я имею в виду, может ли powershell выполнять итерацию по ее содержимому, но не отображать его, в конце должно быть указано размер папки и время последней записи и т.д. …? Я не думаю, что это возможно с powershell? спасибо за ответ.

2. аааа, извините за мое рвение.