PowerShell combine filters ResourceType & AdditionalResponse

Copper Contributor

I am running into wall attempting to complete the following:

1.) I am wanting to do a Get-Mailbox filtering only ResourceType -eq "workspace"

I am able to do this with this command

Get-Mailbox -Filter '(ResourceType -eq "workspace")' | Select Alias

 

2.) I am wanting to find AdditionalResponse that 'contains' a specific word "WORD"

I am UN-able to do this with a similar command.

Get-calendarprocessing -Filter '(AdditionalResponse -contains "WORD")' | Select Alias

ERROR: A parameter cannot be found that matches parameter name 'Filter'

 

3.) I would like to combine the 2 and export a list to a .csv file of mailboxes that are ResourseType 'workspace' AND AdditionalResponse that 'contains' a specific word "WORD"

4 Replies

@DrCyberCure 

 

Something like

 

$total = foreach ($mailbox in Get-Mailbox -Filter '(ResourceType -eq "workspace")') {
    if (Get-CalendarProcessing -Filter '(AdditionalResponse -contains "WORD")') {
        [pscustomobject]@{    
            DisplayName = $mailbox.displayname
            Alias       = $mailbox.alias
        }
    }
}
$total | Export-Csv -NoTypeInformation -Path c:\temp\mailboxes.csv -Encoding UTF8 -Delimiter ';'

 

 

Untested, don't have an Exchange Server available at this moment ;) 

@Harm_Veenstralooks like Calendar-processing doesn't like filter.

 

A parameter cannot be found that matches parameter name 'Filter'.
    + CategoryInfo          : Invalid Argument: (:) [Get-CalendarProcessing], ParameterBinding 
   Exception
    + FullyQualifiedErrorId : NamedParameterNotFound,Get-CalendarProcessing
    + PSComputerName        : outlook.office365.com

@DrCyberCure 

2/ Try this command instead : 

Get-CalendarProcessing | Where-Object { $_.AdditionalResponse -contains "WORD" } | Select Alias


Here is my attempt at writing an example : 

# Get all mailboxes.
$mailboxes = Get-Mailbox -ResultSize Unlimited

# Filter mailboxes by ResourceType.
$mailboxes = $mailboxes | Where-Object { $_.ResourceType -eq "Workspace" }

# Filter mailboxes by AdditionalResponse containing "WORD".
$mailboxes = $mailboxes | Where-Object { $_ | Get-CalendarProcessing | Select-Object -ExpandProperty AdditionalResponse -like "*WORD*" }

# Select the Alias property.
$mailboxes = $mailboxes | Select-Object Alias

# Export the list to a CSV file.
$mailboxes | Export-Csv -Path "C:\path\to\output.csv" -NoTypeInformation


not tested yet,

@DrCyberCure 

 

Here's an example using the more recent Get-EXOMailbox (which is faster and more efficient (in most cases), but not necessary if you work for a small-to-medium-sized organisation).

 

Get-EXOMailbox (and the older Get-Mailbox) support server-side filtering, which is why they provide a -Filter parameter. Server-side filtering is always faster, however, it's not available on every commandlet.

 

Get-CalendarProcessing does not support server-side filtering, which is why there is no -Filter parameter. You have to do the filtering client-side.

 

Here's a functional example you can tailor to your needs.

 

Get-EXOMailbox -Filter "ResourceType -eq 'workspace'" -PropertySets StatisticsSeed -Properties Alias, ResourceType |
    ForEach-Object {
        $Mailbox = $_;

        Get-CalendarProcessing -Identity ($_.Identity) |
            ForEach-Object {
                if ($_.AdditionalResponse -match "WORD")
                {
                    [PSCustomObject] @{
                        Guid = $Mailbox.Guid;
                        ResourceType = $Mailbox.ResourceType;
                        Alias = $Mailbox.Alias;
                        AdditionalResponse = $_.AdditionalResponse;
                    }
                }
            }
    } |
        Export-Csv -NoTypeInformation -Path "C:\Data\someOutputfile.csv";

 

Cheers,

Lain