I've restructured this a bit. It now looks like this, but I've run into a problem, and I know what it is, but not how to solve it.
The script: $CurrentVersions = Get-ChildItem K:\Engdrops -directory -filter CurrentVersions -recurse | select -expand fullname $CurrentVersionsOut = @() foreach ($CurrentVersion in $CurrentVersions) { $CurrentVersionLargest32 = [math]::Round((Get-ChildItem $CurrentVersion -recurse ` | Sort-Object length -descending ` | select-object -first 32 -expand length | measure-object –sum).sum / 1mb) $CurrentVersionsOut += [pscustomobject]@{SourceContentPath = ` $CurrentVersion; SourceConflictAndDeletedQuotaInMB = $CurrentVersionLargest32 } } $CurrentVersionsOut | export-csv -notype c:\temp\CacheSizes.csv It works great, unless there are fewer than 32 items in the directory, at which point the script emits the following error. select-object : Property "length" cannot be found. At line:3 char:123 + ... -descending | select-object -first 32 -expand length | measure-object –sum).sum ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (601-1273V4.01c:PSObject) [Select-Object], PSArgumentException + FullyQualifiedErrorId : ExpandPropertyNotFound,Microsoft.PowerShell.Commands.SelectObjectCommand So, it looks like I need to do some error trapping, and I'd like to set a 4096mb default for small or empty directories. Thoughts? Kurt On Thu, Jul 20, 2017 at 8:47 PM, Devin Rich <dr...@firstelectronic.com> wrote: > Ooops, didn't see you were using -Property from measure-object. > > Why does spaces in your input object cause it to fail... that's a weird one. > ... > > Thanks, > Devin Rich > Systems Administrator > > On Thu, Jul 20, 2017 at 9:44 PM, Devin Rich <dr...@firstelectronic.com> > wrote: >> >> Ok, couple other things :) >> >> ... select-object -first 32 | measure-object -property length –sum .. >> Should be: >> ... select-object -first 32 -expand Length | measure-object -property >> length –sum ... >> >> >> Next, a lesson on objects. If you have a FileInfo object (like what you >> get from Get-ChildItem), you can access its properties (such as length, >> fullname, psparentpath, others all shown via Get-Member, etc.). If you run >> your Get-ChildItem | Select -Expand FullName, you no longer have an object. >> You have an array of strings. They no longer have properties to be accessed. >> You can only use $CurrentVersion which is the full path from earlier. I'd >> say keep the Select -Expand FullName from your first line and then get rid >> of the .FullName from accessing the output. >> >> >> >> Thanks, >> Devin Rich >> Systems Administrator >> >> On Thu, Jul 20, 2017 at 9:30 PM, Devin Rich <dr...@firstelectronic.com> >> wrote: >>> >>> The $CurrentVersion before your () is wrong. And you don't need the (). >>> Try this for line 1 insde of the Foreach: >>> $CurrentVersionLargest32 = Get-ChildItem $CurrentVersion -recurse | >>> Sort-Object length -descending | select-object -first 32 | measure-object >>> -property length –sum >>> >>> Of course, you can also do: [int]$CurrentVersionLargest32 = >>> (Get-ChildItem $CurrentVersion -recurse | Sort-Object length -descending | >>> select-object -first 32 | measure-object -property length –sum).sum / 1GB >>> >>> This forces it to round to nearest GB. :) >>> >>> Good luck! >>> >>> Thanks, >>> Devin Rich >>> Systems Administrator >>> >>> On Thu, Jul 20, 2017 at 9:04 PM, Kurt Buff <kurt.b...@gmail.com> wrote: >>>> >>>> I have a large directory, with multiple (80+) subdirectories, each of >>>> which has its own subdirectory for which I'm trying to find the >>>> largest 32 items, and sum them. I'm using this article: >>>> >>>> https://blogs.technet.microsoft.com/askds/2011/07/13/how-to-determine-the-minimum-staging-area-dfsr-needs-for-a-replicated-folder/ >>>> to determine the optimum cache size for DFRS for the >>>> sub-sub-directories that will be replicated. >>>> >>>> This works just fine for a single directory: >>>> $CurrentVersion = "K:\Engineering\x1\y1\CurrentVersions" >>>> $CurrentVersionLargest32 = Get-ChildItem $CurrentVersion -recurse | >>>> Sort-Object length -descending | select-object -first 32 | >>>> measure-object -property length –sum >>>> >>>> This fails: >>>> >>>> $CurrentVersions = Get-ChildItem K:\Engineering -directory -filter >>>> CurrentVersions -recurse | select -expand fullname >>>> $CurrentVersionsOut = @() >>>> foreach ($CurrentVersion in $CurrentVersions) >>>> { >>>> $CurrentVersionLargest32 = $CurrentVersion.(Get-ChildItem >>>> $CurrentVersion -recurse | Sort-Object length -descending | >>>> select-object -first 32 | measure-object -property length –sum) >>>> $CurrentVersionCacheSize = >>>> [math]::Round($CurrentVersionLargest32.sum /1gb) >>>> $CurrentVersionsOut += [pscustomobject]@{SourceContentPath = >>>> $CurrentVersion; SourceConflictAndDeletedQuotaInMB = >>>> $CurrentVersionCacheSize } >>>> } >>>> $CurrentVersionsOut | export-csv -notype c:\temp\CacheSizes.csv >>>> >>>> Output looks like this: >>>> "SourceContentPath","SourceConflictAndDeletedQuotaInMB" >>>> "K:\Engineering\x1\y1\CurrentVersions","0" >>>> "K:\Engineering\x2\y2\CurrentVersions","0" >>>> >>>> So, to me, after much testing, it looks like I've got something wrong >>>> with the first line inside the foreach loop, but I've banged my head >>>> against that for several hours, and just can't seem to figure it out. >>>> >>>> Pointer in the correct direction would be much appreciated. >>>> >>>> Kurt >>>> >>>> >>>> >>>> >>> >>> >>> The information contained in this message is privileged, confidential, >>> and protected from disclosure. If you are not the intended recipient, you >>> are hereby notified that any review, printing, dissemination, distribution, >>> copying or other use of this communication is strictly prohibited. If you >>> have received this communication in error, please notify us immediately by >>> replying to the message and deleting it from your computer. >> >> > > > The information contained in this message is privileged, confidential, and > protected from disclosure. If you are not the intended recipient, you are > hereby notified that any review, printing, dissemination, distribution, > copying or other use of this communication is strictly prohibited. If you > have received this communication in error, please notify us immediately by > replying to the message and deleting it from your computer.