Home > Net >  Create csv file of all disabled AD users with mailboxes Output information from multiple cmdlets in
Create csv file of all disabled AD users with mailboxes Output information from multiple cmdlets in

Time:09-02

I am trying to gather some information on disabled user accounts that have mailboxes. I am specifically looking for just user mailboxes not shared mailboxes.

Here is what I have so far.

$Mailboxes = Get-Mailbox | where {$_.RecipientTypeDetails -eq 'UserMailbox'}

$date = get-date -f "MMddyyyy_HHmm" $Disabled = @()

Foreach ($Mailbox in $Mailboxes) { if((Get-ADUser -Identity $Mailbox.SamAccountName).Enabled -eq $False){ $Disabled = Get-MailboxStatistics $Mailbox.SamAccountName | Select -Property DisplayName,TotalItemSize }
} $Disabled | Sort DisplayName | Export-Csv -Path "%path%\DisabledADUsersWithMailbox_$date`.csv" -NoTypeInformation

Additionally what I would like to collect is the users Title, Manager, LastlogonDate all of which can be found using Get-Aduser. I am unsure how I go about collecting the information from both cmdlets and then exporting it all to csv. I have read that I may need to create a custom object. I am struggling with setting that up in this script.

Any help would be much appreciated.

Thanks

CodePudding user response:

the following lines should give you what you want, can't verify it as I have no exchange running here.

$date = get-date -f "MMddyyyy_HHmm" 

$Disabled = @(
    Foreach ($Mailbox in $Mailboxes) { 
        $adUser = get-aduser -Identity $Mailbox.SamAccountName -Properties enabled,manager,title,lastlogontimestamp
        If ($adUser.Enabled -eq $False){
            $mailStats = Get-MailboxStatistics $Mailbox.SamAccountName 
            $attrsht = [ordered]@{
                displayname=$mailstats.displayname
                totalitemsize=$mailStats.totalitemsize
                samaccountname=$aduser.samaccountname
                enabled=$aduser.enabled
                manager=$aduser.manager
                title=$aduser.title
                lastlogontimestamp=[datetime]::FromFileTime($aduser.lastlogontimestamp)
            }
            new-object -TypeName psobject -Property $attrsht
        }
    }
)
 
$Disabled | Sort-Object DisplayName | Export-Csv -Path "%path%\DisabledADUsersWithMailbox_$date`.csv" -NoTypeInformation

Avoid adding elements to an array by using =. It is slow, alternatively take a look at generic array lists.

  • Related