基本上我尝试做的是从网络文件夹中收集用户文件夹大小,然后将其导出到.csv,目录结构如下所示:network:\ Department \ user ... User' S-东西
我现在拥有的脚本会获取部门文件名和用户的文件夹大小,但不会获取用户的名称(部门中的文件夹名称)。至于TimeStamp,我不确定它是否正常工作。它意味着在下一个部门的用户启动时创建时间戳,所以基本上,同一部门的所有用户都将具有相同的时间戳。
这是我到目前为止所做的:
$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文件中,用户和时间戳是错误的。感谢任何/所有帮助
答案 0 :(得分:1)
这似乎是在努力做到这一点。为什么你不会只是使用Get-ChildItem这样做几乎使这个脚本看起来对我来说有点受虐待,所以我将使用该cmdlet而不是创建一个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:\Temp\DirectoryReport.csv"){
Rename-Item "C:\Temp\DirectoryReport.csv" "DirectoryReport.$(Get-Date -format MM.d.yyy.@h.mm.sstt).csv"
}
#Output file
$Users | Export-Csv "C:\Temp\DirectoryReport.csv" -NoTypeInformation
如果要获取每个用户文件夹中所有文件的总大小,包括子文件夹中的文件,请将"Size(MB)"=(GCI $_|Measure-Object -Sum Length|Select Sum)/1MB
替换为"Size(MB)"=(GCI $_ -recurse|Measure-Object -Sum Length|Select Sum)/1MB
并将其替换为{{1}}你有好的去。