仅限PowerShell Get-Childitem顶级文件夹

时间:2019-04-04 14:20:25

标签: powershell directory size

我正在尝试获取有关一组文件夹的信息(SizeLastWriteTime)。我只需要知道顶层文件夹,即c:\ Logs,C:\ Storage,D:\ backup,我不想知道有关这些文件夹内部内容的信息。

我编写的脚本几乎可以满足我的要求,但是问题是,脚本要遍历那些文件夹的内容,而不仅仅是查看父文件夹(d:\ backup等...)

$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 个答案:

答案 0 :(得分:1)

Get-ChildItem获取给定路径的子项(例如内容)。这就是为什么它看起来像递归的原因,因为它向您显示了这些路径内的所有文件夹,但没有显示这些文件夹的内容(这需要-Recurse)。

如果只想获取有关路径的信息,则可能应该使用Get-Item,但是请注意,如果不遍历Windows路径的内容,就无法获取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}}
}