Excellent. Always good to learn new stuff.

Thanks!

On Fri, Jul 21, 2017 at 11:18 AM, Webster <[email protected]> wrote:
> Not related to your question but maybe to speed up your array appending 
> operation, take a look at 
> https://blogs.technet.microsoft.com/ashleymcglone/2017/07/12/slow-code-top-5-ways-to-make-your-powershell-scripts-run-faster/
>
> Section Appending to arrays
>
> Thanks
>
>
> Carl Webster
> Citrix Technology Professional
> http://www.CarlWebster.com
> The Accidental Citrix Admin
>
> -----Original Message-----
> From: [email protected] [mailto:[email protected]] 
> On Behalf Of Kurt Buff
> Sent: Friday, July 21, 2017 1:04 PM
> To: [email protected]
> Subject: Re: [powershell] Largest 32 items in multiple subdirectories
>
> 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 <[email protected]> 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
>> <[email protected]>
>> 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
>>> <[email protected]>
>>> 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 <[email protected]> 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-determi
>>>>> ne-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.
>
>
>
>
>




Reply via email to