我尝试编写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文件。
答案 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
作为属性FolderSize
和Owner
的管道将变量添加到对象。最终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