Using a ScriptBlock to pass a variable into another variable

  •  
  •  
  •  
  •  
  •  
  •  
  •  
Rate this post

So, during the course of my current project, I’ve been able to re-use a lot of scripts that I’ve spent years developing and reworking.  This time through, though, I’ve found that in trying to make them consumable by other people, I need to update them with command-line parameters (you know, like some sort of grown-up scripter).

One of the environments I’m working with is fairly large, and it’s very impractical to do client-side filtering (a Get-Mailbox -ResultSize Unlimited, for example, takes about 8 hours to complete, if my session doesn’t time out).  There are very few instances where I actually need *all* mailboxes returned to perform an operation; I’m usually working with a single department or subset of users at a time, and can filter on a domain name.

Server-side filtering is the answer.  However, making a function that I can use repeatedly is almost just as important (if for no other reason, than I constantly forget how I did something).

Normally, I could just use something like:

Get-Maibox -ResultSize Unlimited -Filter { WindowsEmailAddress -like "*subdomain1.domain.com" }

and call it a day.  However, if I want to create something that I can continue to reuse, I need to be able to specify data in the -Filter parameter on-the-fly, such as in a parameter.

Here’s the solution I came up with.  In this example, I want to select mailboxes for the domain “subdomain1.domain.com” in my gigundous tenant.

#
Function MakeFilter($FilterValue)
     {
     If ($FilterValue.StartsWith("*"))     
          {     
          # Value already starts with an asterisk     
          }
     Else    
          {
          $FilterValue = "*" + $FilterValue    
          }
     $Filter = [scriptblock]::Create("{WindowsEmailAddress -like `"$FilterValue`"}")
     Write-Host $Filter
     }

So, giving it a try:

scriptblock-filter_1

Reader Comments

  1. another one i missed:)
    i think this plus the link i put on newer post would cut time dramatically.
    for me on 30k environment i get all data(5-7 attributes im interested in)i need from all mailboxes in around 2min without using this filter, combined with this(don’t know if its possible) should be even faster
    Thanks again

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.