子目录大小和所有者

Child directory sizes and owners

我正在尝试编写一个 PowerShell 脚本来检索我的 Windows 文件系统上的目录大小和所有者。我有两个独立的脚本,但我不知道如何将它们放在一起作为一个脚本文件。

目录名称和大小:

$startFolder = "C:\Test”
$colItems = (Get-ChildItem $startFolder | Where-Object {$_.PSIsContainer -eq $True} | Sort-Object)
foreach ($i in $colItems)
    {
        $subFolderItems = (Get-ChildItem $i.FullName | Measure-Object -property length -sum)
        $i.FullName + " -- " + "{0:N2}" -f ($subFolderItems.sum / 1MB) + " MB" 
    }

目录所有者:

Get-ACL C:\Test

我希望将脚本输出到 CSV 文件。

那么类似的东西呢?

$start = "c:\temp"
$output = "C:\temp\output.csv"
Get-ChildItem $start | Where-Object{$_.PSIsContainer} | ForEach-Object{
    $singleFolder = $_.FullName
    $folderSize = Get-ChildItem $singleFolder -Recurse -Force | Where-Object{!$_.PSIsContainer} | Measure-Object -Property length -sum | Select-Object -ExpandProperty Sum
    $folderSize = [math]::round($folderSize/1MB, 2)
    $owner = Get-Acl $singleFolder | Select-Object -ExpandProperty Owner
    $_ | Add-Member -MemberType NoteProperty -Name FolderSize -Value $folderSize -PassThru |
        Add-Member -MemberType NoteProperty -Name Owner -Value $owner -PassThru
} | Select-Object FullName,FolderSize,Owner | Export-Csv $output -NoTypeInformation

需要在长度计算中添加一些额外的逻辑以防止文件夹混乱> Where-Object{!$_.PSIsContainer}。这应该适用于 PowerShell 2.0。

它遍历 $start 根目录中的每个文件夹,并为每个 $singleFolder 计算内容和文件夹所有者的大小。

然后通过管道将变量添加到对象,其中 Add-Member 作为属性 FolderSizeOwner。最后的 Select-Object 用于隔离我们想要的输出文件的属性。

样本

FullName                         FolderSize  Owner                 
--------                         ----------  -----                 
C:\temp Place i.Bay                       domain\guy          
C:\temp\adoc42                   1103186357  domain\guy           
C:\temp\Adoc72                   958330505   domain\guy 

注意空文件夹。该输出被发送到文件 $output

中的 Export-CSV