子目录大小和所有者
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
作为属性 FolderSize
和 Owner
。最后的 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
我正在尝试编写一个 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
作为属性 FolderSize
和 Owner
。最后的 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