Только папка верхнего уровня PowerShell Get-Childitem - PullRequest
1 голос
/ 04 апреля 2019

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

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

$path = Import-Csv C:\Users\pshell\Desktop\paths.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 Ответ

1 голос
/ 04 апреля 2019

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}}
}
...