如何非递归地收集文件夹大小及其名称?(Powershell)



基本上我要做的就是从用户的网络文件夹中收集用户文件夹的大小然后将其导出为。csv,目录结构看起来像这样:network:Departmentuser…user 's-stuff

我现在拥有的脚本获取部门文件名和用户文件夹大小,但不是用户名(部门中的文件夹名称)。至于时间戳,我不确定它是否工作正确。它意味着在下一个部门的用户开始时创建一个时间戳,所以基本上,同一部门的所有用户将具有相同的时间戳。

这是我目前为止写的:

$root = "network"
$container= @()
$place = "C:temp"
$file = "DirectoryReport.csv"
Function Get-FolderSize
{
    BEGIN{$fso = New-Object -comobject Scripting.FileSystemObject}
    PROCESS
        {
        $prevDept = (Split-Path $path -leaf)
        $path = $input.fullname
        $folder = $fso.GetFolder($path)
        $Volume = $prevDept + "-users"
        $user = $folder.name #can't figure this part out...
        $size = $folder."size(MB)"
        if ( (Split-Path $path -leaf) -ne $prevDept)
        {
            $time = Get-Date -format M/d/yyy" "HH:mm #Probably wrong too..
        } 
        return $current = [PSCustomObject]@{'Path' = $path; 'Users' = $user; 'Size(MB)' = ($size /1MB ); 'Volume' = $Volume; 'TimeStamp' = $time;} 
        }
} 
$container += gci $root -Force -Directory -EA 0 | Get-FolderSize
$container
#Creating the .csv path
$placeCSV = $place + $file
#Checks if the file already exists
if ((test-path ($placeCSV)) -eq $true)
    {
       $file = "DirectoryReport" + [string](Get-Date -format MM.d.yyy.@h.mm.sstt) + ".csv" 
       rename-item -path $placeCSV -newname $file
       $placeCSV = $place + $file
    }
#Exports the CSV file to desired folder
$container | epcsv $placeCSV -NoTypeInformation -NoClobber

但是在CSV文件中,用户和时间戳是错误的。谢谢你的帮助

这看起来真的很困难。为什么不直接使用Get-ChildItem来完成这个任务,这让我觉得这个脚本有点受虐,所以我将使用这个cmd命令,而不是创建一个comobject来完成这个任务。

我有点困惑,为什么你不想递归大小,但好吧,我们会走这条路。这会显示你的文件夹大小,以MB为单位。

#Get a listing of department folders
$Depts = GCI $root -force -Directory
#Loop through them
ForEach($Dept in $Depts){
    $Users = @()
    $Timestamp = Get-Date -Format "M/d/yyy HH:mm"
    #Loop through each user for the current department
    GCI $Dept -Directory |%{
        $Users += [PSCustomObject]@{
            User=$_.Name
            Path=$_.FullName
            "Size(MB)"=(GCI $_|Measure-Object -Sum Length|Select Sum)/1MB
            Volume="$($Dept.Name)-Users"
            TimeStamp=$Timestamp
        }
    }
}
#Rename output file if it exists
If(Test-Path "C:TempDirectoryReport.csv"){
    Rename-Item "C:TempDirectoryReport.csv" "DirectoryReport.$(Get-Date -format MM.d.yyy.@h.mm.sstt).csv"
}
#Output file
$Users | Export-Csv "C:TempDirectoryReport.csv" -NoTypeInformation

如果您想获得每个用户文件夹中所有文件的总大小,包括子文件夹中的文件,将"Size(MB)"=(GCI $_|Measure-Object -Sum Length|Select Sum)/1MB改为递归,将其替换为"Size(MB)"=(GCI $_ -recurse|Measure-Object -Sum Length|Select Sum)/1MB,这样就可以了。

相关内容

  • 没有找到相关文章

最新更新