Popular Posts

Saturday, October 24, 2026

How to setup Room Finder on Exchange

Room Finder is a feature in Microsoft Exchange Online and Outlook that helps users find and book available meeting rooms. It displays room availability, capacity, location, and other facilities, making it easier to select a suitable meeting space when scheduling meetings. Behind the scenes, Room Finder represents collection of rooms grouped together by Exchange Distribution Groups. This is however more suitable and useful for rooms spread across several cities.

Imagine you need to add the following rooms into Room Finder:

  • City 1
    • Building 1
      • Room 1
      • Room 2
    • Building 2
      • Room 3
      • Room 4
  • City 2
    • Building 1
      • Floor 1
        • Room 5
        • Room 6
      • Floor 2
        • Room 7
  • City 3
    • Building 1
      • Room 8


Steps to configure Room Finder in your environment

  1. List down all existing Room Resources in your environment and group them by City, Building and Floor as above
  2. Go to Exchange Admin Console (EAC) --> Room Resource and update the City field of all the rooms your want to add into Room Finder. You may use Set-Place command for this purpose.
  3. Additionally, you may also set the floor parameter for your rooms using Set-Place command. Ex: Set-Place room1@yourdomain.com -Floor
  4. Run Connect-ExchangeOnline (Run this beforehand if you intend to use Set-Place for previous steps)
  5. To group rooms from Building 1 located in City 1,  run New-DistributionGroup -Name "City 1 Rooms - Building 1" -RoomList
  6. Take note of the UPN (User Principal Name) of the distribution group created above
  7. To add a room to the above, run Add-DistributionGroupMember -Identity city1rooms-building1@yourdomain.com -Member room1@yourdomain.com
  8. Continue to add more rooms as required ex: Add-DistributionGroupMember -Identity city1rooms-building1@yourdomain.com -Member room2@yourdomain.com
  9. Create another group and add rooms into it ex: New-DistributionGroup -Name "City 1 Rooms - Building 2" -RoomList
  10. Run Get-DistributionGroup -RecipientTypeDetails RoomList to verify the creation of those groups
  11. It may take up to 2 days for the Room List to update on Outlook client 
  12. To summarise
    1. You set the City field using EAC or PowerShell, this is compulsory.
    2. Group them into Distribution Groups by City and Building using PowerShell
    3. You may add other details such as the floor and capacity by updating the individual room resource. This is optional.
    4. Users will be able to filter rooms by city and building and additionally by floor and capacity if configured.

Saturday, April 18, 2026

Windows 11 April 2026 updates - BootDevice Not Found

Recent Windows Updates broke some Windows 11 devices, preventing them from booting.


Background

The affected devices will showcase the following symptoms:

  1. User initiates the updating process
  2. At some point, a message appears on the screen 'Something didn't go as planned. No need to worry-undoing changes. Please keep your computer on'.
  3. Device shutsdown/reboot
  4. Upon reboot, the following message appears 'BootDevice Not Found, Please install an operating system on your hard disk. Hard Disk - (3F0)'
  5. Device will continue to load into System Diagnostics page in BIOS

Solution

 

1. Boot to a Windows USB
2. Go through the prompts and select ‘Repair this PC’
3. Choose language
4. Select Troubleshoot -> Command Prompt
5. Enter BitLocker Recovery Key (if enabled)
6. Enter the following commands
1. diskpart
2. list disk
3. sel disk 0 (usually its 0, otherwise check which disk contains Windows from the previous command)
4. list vol
5. sel vol 1 (usually its 1, verify from the list vol command which volume is about 100MB and FAT32 format)
6. assign letter=Y (or any letter)
7. exit
8. bcdboot C:\Windows /s Y: /f UEFI
7. Close the command prompt
8. Select Exit and continue to Windows 11
9. Enter BitLocker Recovery Key (if enabled)
10. If Windows still doesn’t boot, repeat the above steps once more


Thursday, November 14, 2024

Setting up Ansible control node for managing Linux and Windows hosts

Background

In this post, I will walk you through the complete end-to-end procedure for setting up an Ansible controller node and setting up the connection for managing RHEL and Windows Server nodes.


Azure setup

I have created 3 servers and placed them in a simple network configuration.

Infra:

    10.0.3.4 ansiblecontrol (RHEL 8.7)

App:

    10.0.5.4 linuxnode1 (RHEL 8.7)

    10.0.5.5 windowsnode1 (Windows Server 2019)





OS preparation

Ensure all hosts are configured with the correct FQDN and IP configurations. This is more so important when dealing with domain-joined nodes.

ex:

  • run hostnamectl set-hostname ansiblecontrol.local.vanguard.com to set the hostname for RHEL
  • add DNS suffix to computer name on System Settings on Windows Server

Make sure the control node can reach the managed nodes in the absence of DNS by adding entries in /etc/hosts




Setting up Ansible on Control node

  1. Install ansible sudo yum install ansible

     2. Generate SSH key pair for ansible user ssh-keygen


     3. Copy public key to linuxnode1 ssh-copy-id linuxnode1.local.vanguard.com


     4. Install pywinrm for managing Windows nodes pip3 install "pywinrm>=0.3.0"



     5. Import windows module collection ansible-galaxy collection install ansible.windows




Setting up Linux managed node

    1. Add ansible user on linuxnode1 sudo useradd ansible
    2. Add ansible user in the sudoers file for password-less authentication for all elevated commands using sudo visudo




    Setting up Windows managed node

         1. Ensure PowerShell version is 5.0 and above using $PSVersionTable command. Also make sure .NET version is later than 4.0. However, with newer Windows Servers, this shouldnt be an issue.

        2. Set up WinRM listener on port 5986 for HTTPS transport. This requires the creation of a self-signed certificate. Ansible has provided a script for this task which is available to download on GitHub



        2. Additionally, make sure Windows Firewall is switched off


    Sample Ansible directory setup

    1. Create inventory file by grouping the 2 managed nodes by operating system


        2. Define group_vars.

            Create a new file called windows.yml in group_vars. The contents of the file defines the connection parameters that will be used by ansible to connect with hosts under the windows group of the inventory file. This will also work for any dynamic inventory as long as those hosts are also added to the windows group during playbook runtime.
             
            For domain-joined windows servers, it is advised to use the more secure kerberos instead of ntlm. In such cases, kerberos packages must be installed and krb5.conf configured on the ansible control node to obtain kerberos tickets from the AD domain.



        3. Encrypt windows group_vars using ansible-vault to protect sensitive information
            ansible-vault encrypt windows.yml
        

        4. Perform a ping to verify connectivity using ad-hoc ping command. Make sure to use --ask-vault-pass for windows nodes









    Sample playbook

     1. The following playbook will install webserver on both nodes depending on their OS



    2. Execute the playbook first by doing a dry-run

    ansible-playbook installwebserver.yml -i testservers --check --ask-vault-pass



    3. Run the playbook

    ansible-playbook installwebserver.yml -i testservers --ask-vault-pass