使用PowerShell生成整个D:驱动器的报告
我不熟悉PowerShell脚本。对于我的一个学校项目,我需要生成整个D驱动器的报告。我需要列出所有按大小排序的文件夹 我迄今为止所做工作的总结: 我已从此网站安装了PowerShell模块 使用安装模块PSFolderSize 安装后,如果我运行命令Get FolderSize,我将获得运行路径的FolderSize。foldersize没有为目录中的所有文件夹运行。 我在遍历所有文件夹时遇到困难 预期产出:使用PowerShell生成整个D:驱动器的报告,powershell,csv,scripting,Powershell,Csv,Scripting,我不熟悉PowerShell脚本。对于我的一个学校项目,我需要生成整个D驱动器的报告。我需要列出所有按大小排序的文件夹 我迄今为止所做工作的总结: 我已从此网站安装了PowerShell模块 使用安装模块PSFolderSize 安装后,如果我运行命令Get FolderSize,我将获得运行路径的FolderSize。foldersize没有为目录中的所有文件夹运行。 我在遍历所有文件夹时遇到困难 预期产出: +-------------+--------------+------------
+-------------+--------------+--------------+-----------+-----------------------+-----------+
| FolderName | Size(Bytes) | Size(MB) | Size(GB) | FullPath | HostName |
+-------------+--------------+--------------+-----------+-----------------------+-----------+
| Disney | 454545448889 | 433488.32024 | 423.32844 | D:\Videos\Disney | localhost |
| Universal | 25454544884 | 24275.34569 | 23.70639 | D:\Videos\Universal | localhost |
| Fox Studios | 8803063287 | 8395.25536 | 8.19849 | D:\Videos\Fox Studios | localhost |
+-------------+--------------+--------------+-----------+-----------------------+-----------+
谁能帮我从哪里开始 由于速度和长文件名问题,我会使用其他工具(如TreeSize)创建这样的报告。
但是,您可以使用以下powershell命令解决任务,而无需下载其他模块。
对于D:\中的每个子文件夹,您必须接收所需的数据。
您必须通过查找每个文件来计算每个目录的大小Get ChildItem-Path$Folder.FullName-Recurse-Force
,并汇总所有文件的长度。
在这里,您可以使用测量对象-属性长度-总和
。根据目录大小,此任务将需要一些时间。
如果您正在处理长文件名问题,请看一看。
收集所有数据并将其添加到输出变量后,使用选择对象-属性'FolderName','Size(Bytes)','Size(MB)','Size(GB)','FullPath','HostName'
对标头顺序进行排序。
命令Sort Object-Property“Size(Bytes)”,“FolderName”
将根据文件夹大小和名称对输出进行排序。
要获得美观的输出,请使用格式表
[System.String]$Path = 'D:\'
[PSCustomObject[]]$Output = @()
foreach ($Folder in (Get-ChildItem -Path $Path -Directory))
{
[System.Int64]$Size = (Get-ChildItem -Path $Folder.FullName -Recurse -Force | Measure-Object -Property Length -Sum).Sum
[System.Collections.Hashtable]$Hashtable = @{
'FolderName' = $Folder.Name
'Size(Bytes)' = $Size
'Size(MB)' = $Size / 1MB
'Size(GB)' = $Size / 1GB
'FullPath' = $Folder.FullName
'HostName' = $env:COMPUTERNAME
}
$Output += New-Object -TypeName 'PSCustomObject' -Property $Hashtable
}
$Output | `
Select-Object -Property 'FolderName', 'Size(Bytes)', 'Size(MB)', 'Size(GB)', 'FullPath', 'HostName' | `
Sort-Object -Property 'Size(Bytes)', 'FolderName' | `
Format-Table
来自:要求家庭作业帮助的问题必须包括到目前为止您为解决问题所做工作的摘要,以及您解决问题的困难的描述。PoSh在查看文件系统时所能看到的内容是有限的。这些限制中最常见的是<代码>查看某些内容的权限&
总路径长度
//您需要确定导致问题的特定项目,然后调查该项目以确定问题的原因。感谢您的明确解释。你的解决方案并没有完全解决我的问题,但它帮助我解决了我的问题。我更新了你的代码,包括隐藏文件夹和所有子文件夹。请参阅下面的我的答案,以获得我的问题的完美答案,具体取决于您的powershell版本,其中不需要对象{$\.psicContainer}
,因为Get ChildItem
支持-目录
开关。我仍然不明白为什么在foreach循环中使用-Recurse
参数。。。我以为你只需要D:\“第一”级的报告。不过,我很高兴我的样品对您有所帮助!:-)
[System.String]$Path = 'D:\'
[PSCustomObject[]]$Output = @()
foreach ($Folder in (Get-ChildItem -Recurse $Path | Where-Object { $_.PSIsContainer }))
{
[System.Int64]$Size = (Get-ChildItem -Path $Folder.FullName -Recurse -Force | Measure-Object -Property Length -Sum -ErrorAction SilentlyContinue).Sum
[System.Collections.Hashtable]$Hashtable = @{
'FolderName' = $Folder.Name
'Size(Bytes)' = $Size
'Size(MB)' = [Math]::Round($Size / 1MB ,2)
'Size(GB)' = [Math]::Round($Size / 1GB,2)
'FullPath' = $Folder.FullName
'HostName' = $env:COMPUTERNAME
}
$Output += New-Object -TypeName 'PSCustomObject' -Property $Hashtable
}
$Output | `
Select-Object -Property 'FolderName', 'Size(Bytes)', 'Size(MB)', 'Size(GB)', 'FullPath', 'HostName' | `
Sort-Object -Property 'Size(Bytes)' , 'FolderName' -Descending | `
Format-Table