子目录大小和所有者

时间:2015-03-05 20:59:31

标签: powershell filesystems

我尝试编写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文件。

1 个答案:

答案 0 :(得分:1)

那么有什么东西呢?

$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\37 Place i.Bay                       domain\guy          
C:\temp\adoc42                   1103186357  domain\guy           
C:\temp\Adoc72                   958330505   domain\guy 

注意空文件夹。该输出将发送到文件Export-CSV

中的$output