【问题标题】:PowerShell Get-Childitem top level folder only仅 PowerShell Get-Childitem 顶级文件夹
【发布时间】:2019-08-26 08:23:24
【问题描述】:

我正在尝试获取有关一组文件夹的信息(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 开关,所以它应该只扫描顶层。

【问题讨论】:

    标签: powershell directory size


    【解决方案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}}
    }
    

    【讨论】:

    • 这在我的情况下如何工作?我的意思是,powershell 可以遍历其内容但不显示它,最后,它应该给我文件夹大小和上次写入时间等...?我认为powershell不可能吗?感谢您的回复。
    • 啊,对不起我的急切。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 2011-02-22
    • 2020-09-08
    • 2015-10-29
    相关资源
    最近更新 更多