New-ComplianceSearch BUG – ExchangeLocation gets cleared.

Just creating some script for GDPR email removal mechanism, and noticed one interesting thing – already reported this bug to MS.

Last time when I got issue about Compliance Searches it was that when telling it to “purge” the messages it was not really purging the messages – I flagged that you need to use Search-Maibox to actually do it – case was submitted to MS and they changed the documentation.

There is something more – when creating a compliance search and assigning it to the case I noticed that when triggering a command the ExchangeLocation was…empty. It wouldn’t be weird but I explicitly told  I want to have “all” there.

Continue reading “New-ComplianceSearch BUG – ExchangeLocation gets cleared.”

“Mailbox size exceeds target quota 2.3 GB” when moving the mailbox between databases / servers.

When receiving such error please check you quota on mailboxdatabase:

[PS] D:\Exchange Server\V15\Bin>Get-MailboxDatabase | fl

RunspaceId : 5aa6941c-eadf-4c8e-b9fb-8163b7426622
JournalRecipient :
MailboxRetention : 30.00:00:00
OfflineAddressBook :
OriginalDatabase :
PublicFolderDatabase :
ProhibitSendReceiveQuota : <strong>2.3 GB</strong> (2,469,396,480 bytes)
ProhibitSendQuota : 2 GB (2,147,483,648 bytes)
RecoverableItemsQuota : 30 GB (32,212,254,720 bytes)
RecoverableItemsWarningQuota : 20 GB (21,474,836,480 bytes)

Set it up ou to your needs, in my case this database will be hosted only to export mailboxes to PST files:

 Get-MailboxDatabase WROMR0-DB001 | Set-MailboxDatabase -ProhibitSendReceiveQuota 120GB -ProhibitSendQuota 120GB 

Exchange 2016, owa/auth.owa and error 500 on ECP.

I was receiving error 500 and website was landing on owa/auth.owa on my Exchange 2016 server.

Interesting thing was – that happened to all admins but me  – who installed the server.

I found this blog post:

https://blog.ollischer.com/exchange-2016-http-error-500-after-logging-into-ecpowa

I’ve done all the steps, I ran UpdateCas.ps1 – that didn’t help, so I ran multiple commands that Alexander proposed – unfortunately that didn’t help out as well, additionally now I was getting popup asking me for to log in instead of nice Exchange website.

So I thought at least I will get back to the settings I had – removed Windows authentication and enabled form based authentication on ECP and OWA virtual directories, so basically I went back to previous settings:

Get-owaVirtualDirectory "\owa (Default Web Site)" | Set-owaVirtualDirectory -FormsAuthentication $true -BasicAuthentication $true -WindowsAuthentication $false

Get-ecpVirtualDirectory "\owa (Default Web Site)" | Set-ecpVirtualDirectory -FormsAuthentication $true -BasicAuthentication $true -WindowsAuthentication $false

Done iisreset, and once again wanted to see my error, I refreshed the page on the test user I made aaaaaaannndd… it was all working well.

A mystery…

Scooby-gang

Get pending windows updates status on ZABBIX using custom LLD (Low Level Discovery) and PowerShell

Just recently I got some time, and was rethinking the solution of reading windows updates.

At the beginning I thought I will use PowerShell to get update list and later use dependent items to parse the script output, but this wouldn’t be so nice, as I would need to manually work on parsing the file on the zabbix side, create items etc. + so far zabbix does not offer (I work on 3.4, at the time being 4.0 available) LLD on dependent items.

Well, why not use current LLD to read them?

Zabbix_pendingupdates4

You can do it – I will show you how.

Continue reading “Get pending windows updates status on ZABBIX using custom LLD (Low Level Discovery) and PowerShell”

Completely remove whole meetings’ SERIES using PowerShell and EWS.

Hey!

Some time ago I’ve published here a way to remove meetings from calendars using EWS:

https://paweljarosz.wordpress.com/2017/10/09/exchange-online-remove-cancelled-outlook-meetings-using-powershell-and-ews/

I got a bit upset that I needed to run the script from time to time to remove old stalled  cancelled meetings that were there before applying “AutoAccept” calendar processing. We got tons of them believe me, and I wanted to get rid of them completely! But how to remove the whole series and not just meetings for like two years, I wanted not to worry about the meetings even after 5 years, I just didn’t know how to remove the whole series as when people were mentioning about removing the series in the Internet articles, they were usually mentioning how to remove meetings for a long period of time and were calling it by removing a “series”.

Continue reading “Completely remove whole meetings’ SERIES using PowerShell and EWS.”

How to remove litigation hold from mailbox in Exchange Online and clean Purges folder immediately.

When removing litigation hold from mailbox in Exchange Online you need to run these 2 commands in order to start mailbox clean immediately:

Set-Mailbox -Identity "identity" -LitigationHoldEnabled:$false
Set-Mailbox -Identity "identity" -RemoveDelayHoldApplied

Items cannot be deleted from mailbox’s “deleted items” even using MFCMAPI.

Hey,

Just recently I’ve got this weird issue.

Mailbox got stuck. I was able to remove emails from inbox folder and subfolders, even from the Recovery Items folder BUT… not from the deleted items folder.

The behaviour was weird – I was removing some emails and they were reappear after some time, same with MFCMAPI – was clicking hard delete and these bastards didn’t even move.

I was even not able to move the mailbox as it was telling me that mailbox exceeded the quota – I knew it – well, let me remove these emails then!!!

The reason for that appeared very trivial, I’ve been mentioning about this mechanism here: https://paweljarosz.wordpress.com/2015/09/08/singleitemrecovery-in-exchange-2013-recovering-emails-from-purges-folder-with-search-mailbox-cmdlet/

Mailbox had litigation hold enabled and the “Purges” folder on the mailbox got filled up to 100GB. I thouhgt that these emails will be moved to archive but somehow these were still in the mailbox space causign the issue.

Removing the litigation hold allowed to finally delete the emails from deleted items.

Just as a reminder to check what is the size of the “Purges” folder run:

Get-MailboxFolderStatistics -Identity “<mailbox_name>” -FolderScope RecoverableItems -IncludeAnalysis | ft

How to check last run of Mailboxes’ Managed Folder Assistants.

WrongRetentionPolicy.jpg

Let’s say you have published wrong retention policy and you would like to check which mailboxes got this policy applied. To check when the last run of Mailboxes’ Managed Folder Assistant took place you might use below simple script – it is a mess but I’m sure you guys will retrieve from it what you want ^^.

Continue reading “How to check last run of Mailboxes’ Managed Folder Assistants.”

Does “New-ComplianceSearchAction -Purge” really purge the mailbox like it should?

New-ComplianceSearchAction -SearchName "GDPR Fuckups" -Purge

Are you sure you want to perform this action?
This operation will make message items meeting the criteria of the compliance search “Remove Vetting messages” completely inaccessible to users. There is no automatic method to undo the removal of these message items.
[Y] Yes [A] Yes to All [N] No [L] No to All [?] Help (default is “Y”): A

soundsgood

Continue reading “Does “New-ComplianceSearchAction -Purge” really purge the mailbox like it should?”

Harder, Better, Faster, Stronger…”-filter” vs. “where-object”

eeac7149d557a4ef83b3f499c24563e8--simpsons-meme-the-simpsons

Some time ago I was measuring execution times of posh lines with -filter and where-object.

The difference is significant:

PS D:\AdminTools> measure-command {Get-remotemailbox -Filter {RecipientTypeDetails -eq "RemoteRoomMailbox" -and name -like "*people*"}}

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 756
Ticks             : 7564893
TotalDays         : 8,75566319444444E-06
TotalHours        : 0,000210135916666667
TotalMinutes      : 0,012608155
TotalSeconds      : 0,7564893
TotalMilliseconds : 756,4893

PS D:\AdminTools> measure-command {Get-remotemailbox | ? {$_.RecipientTypeDetails -eq "RemoteRoomMailbox" -and $_.name -like "*people*"}}

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 18
Milliseconds      : 415
Ticks             : 184153984
TotalDays         : 0,000213141185185185
TotalHours        : 0,00511538844444444
TotalMinutes      : 0,306923306666667
TotalSeconds      : 18,4153984
TotalMilliseconds : 18415,3984

We can see here that commands with -filter can be significantly quicker – almost 3 times quicker.

Where does it come from you may ask? Well, the “-filter” tells the source to filter the results BEFORE sending back to the requester, whilst when using “where-object” tells the source to send ALL results to the requster and later the requester picks the right records.