Restating my original question, to make the process more efficient, I want to not use where (which would implicitly use a pipeline):
1) make a single call for each dataset to store all the data in three variables, instead of making one call per mailbox.
$mbxs = get-mailboxes -resultsize unlimited
$adinfo = get-aduser -resultsize unlimited
$stats = get-mailboxstatistics -resultsize unlimited
2) traverse the lists of data one time, progressing as I process each key mailbox.
Thanks for clarifying the one-to-one problem, but while the problem is arithmetic, not exponential, you got my point. the math looks like this:
mbxdata + (mbxdata*adinfodata) + (mbxdata*statsdata)
You said the pipeline would do what i want , "You can use the pipeline to streamline this." I'm asking you how that would look in pseudo-code.
The following pseudo-code illustrates the problem of the reads, which you called out in your second comment.
#one pass through the key list.
foreach ( $mailbox in $mailboxes ){
$aggragate = "" | select "mbxid","adinfoa","adinfob","statsinfoa","statsinfob"
#read aduser info.
#one pass through adinfo.
$adinfo = $mailbox | where {aduser.upn -eq $mailbox.upn} | select upn...
#one pass through mbxstats.
$statsinfo = $mailbox | where {$mbxstats.dn -eq $mailbox.dn} | select total...
}