Azure Solutions Architect Expert

Starting from June I have started to take Azure examination from Fundamentals, Associate and finally I have successfully achieved my Azure Solutions Architect Expert certification!

These are the examination path I took –
1. Microsoft Certified: Azure Fundamentals (AZ-900)
2. Microsoft Certified: Azure Administrator Associate (AZ-104)
3. Microsoft Certified: Azure Security Engineer Associate (AZ-500)
4. Microsoft Azure Architect Technologies (AZ-300) + Microsoft Azure Architect Design (AZ-301) = Microsoft Certified: Azure Solutions Architect Expert

Microsoft have their certifications aligned in three levels:

  1. Fundamentals – entry-level covering basic concepts
  2. Associate – more technical, mid-level
  3. Expert – aimed at experienced professionals

As you can see, if you are aiming to obtain an Expert certification, it’s highly recommended that you have had significant Azure experience. This can be demonstrated by obtaining the Associate level exam, however, it’s not a prerequisite to obtain an Associate exam prior to taking the Azure Solutions Architect Expert exams. For sure, without exposure to Azure, this will be a difficult certification to achieve.

Extending disk space in FortiAnalyzer VM

The log archive size of the network devices are increasing every year due to heavy data traffic. Even though we may only keep for one year retention for this kind of log, capacity planning is a must on every year to ensure the log storage will not getting exhausted.

1)  In the FortiAnalyzer/FortiManager CLI, run the following command to check if the logical volume manager (LVM) is enabled:

#execute lvm start

2) Provision the disk on the VM

Continue reading

Recipient Type Values on AD attribute

Both mailbox creation and deletion failure scenarios heavily involve verifying the current recipient type values across all directories – especially in a directory synchronized environment. For example; if a user is listed on-prem as a remote mailbox with a cloud archive, then you should expect EXO to have a primary and an archive mailbox for this user. If it doesn’t, then troubleshoot for a synchronization failure somewhere between on-prem and EXO.

The three attributes you will be dealing with are the following, and there are many possible values for each:

  1. msExchRemoteRecipientType
  2. msExchRecipientDisplayType
  3. msExchRecipientTypeDetails


Continue reading

[Case study] Conditional formatting on excel with customized “first day of the week”

Recently, we have a task to highlight the schedule in excel for last week and this week presenting with different color. However, the conditional formatting function come with Excel doesn’t not meeting our requirement. According to international standard ISO 8601, Monday is the first day of the week. It is followed by Tuesday, Wednesday, Thursday, Friday, and Saturday. Sunday is the 7th and last day of the week.

There is not option to customize the predefined function in conditional formatting, that’s said we need to DIY a new function with formatting rule. By using function WEEKNUM([DATE],2), we can get the actual week number of the [DATE] which comes with ISO8601 standard.

Therefore, using =WEEKNUM(A1,2)=WEEKNUM(TODAY(),2) can get the [DATE] result for this week; =WEEKNUM(A1,2)=WEEKNUM(TODAY(),2)-1 can get the [DATE] result for last week.

Assign O365 license by PowerShell

Assigning license to a group of O365 users are always the most headache task for administrators. So why don’t we script it? Let’s start!

First of all, check the license plan and usage of your company.

Connect-AzureAD #Connect to the tenant

Get-AzureADSubscribedSku | Select SkuPartNumber #Show account service plan and grep the SkuPartNumber (e.g, Microsoft 365 E3 = ENTERPRISEPACK, Microsoft 365 F1 = SPE_F1)

#Check SKU Service Plan detail option from the above output. Let's say if there are 22 SkuPartNumber in your service plan, you would like to select the 19th one, fill in 18 in the array of $license
$licenses = Get-AzureADSubscribedSku

Copy the output, so now you got all of the information of your account license that you want to add. The next step is define the service plan you would like to activate for the group of users. Create a csv file, define the license option (The output above); Friendly Name; Add License Option (True or False). Below are the example, we would like to enable Microsoft Search, Skype for Business, Office Online and Exchange Online but disable Microsoft Teams.

MICROSOFT_SEARCH;Microsoft Search;yes
TEAMS1;Microsoft Teams;no
MCOIMP;Skype for Business Online;yes
SHAREPOINTWAC;Office Online;yes
EXCHANGE_S_DESKLESS;Exchange Online Kiosk;yes

Create another csv and import the SMTP addresses that you would like to add the licenses.

[email protected]
[email protected]

Finally, the main PowerShell script.

# Powershell for license assignment                                                                                #
# Author: Wallace Ho                                                                                                     #
# Version: 1.0                                                                                                           #

$users = Import-Csv "C:\Users\wallaceho\Desktop\Licenses\users.csv" -Delimiter ";" # Define SMTP address CSV file path
$additionalOptions = Import-Csv "C:\Users\wallaceho\Desktop\Licenses\licenseplan.csv" -Delimiter ";" | ?{$_.addLicenseOption -eq "no"} #License path filter for disable option

foreach ($user in $users) #for each user in the SMTP address CSV file path
    $opts = New-MsolLicenseOptions -AccountSkuId "<accountid:serviceplan>" –DisabledPlans $additionalOptions.LicenseOption #Define disable option, remember to change the <accountid:serviceplan>
    Set-MsolUserLicense -UserPrincipalName $user.smtpAddress -RemoveLicenses <accountid:serviceplan>  #Remove old license, remember to change the <accountid:serviceplan>
    Set-MsolUserLicense -UserPrincipalName $user.smtpAddress -AddLicenses <accountid:serviceplan> -LicenseOptions $opts #Add new license, remember to change the <accountid:serviceplan>