Tim D'Annecy


#Powershell #HyperV

I read a great post by Benjamin Armstrong [A] with a one-line Powershell command to list virtual machines in Hyper-V that have a missing or broken VHD disk.

This helped me do some weeding on some Hyper-V machines and clean up old/stale VMs.

get-vm | Get-VMHardDiskDrive | %{write-host $_.VMName.PadRight(40) ":: VHD Exists :: "-NoNewline; Test-Path $_.Path}

Just putting this here for my notes.


#Windows #Microsoft #Powershell

Exchange has the ability to limit sending permissions on Distribution Groups. Finding which Distribution Groups have user sending permissions assigned to them can be very time consuming using the portal.

To make it quicker, you can list the accounts that have the ability to send to a specific distribution group using PowerShell.

$FormatEnumerationLimit=-1 # This allows the property to be expanded in format-table


Get-DistributionGroup -Identity XXX | Format-table -Wrap -AutoSize -property name,acceptmessagesonlyfrom # Change XXX to the Distribution Group SAM account name



I company I work for just completed an O365 tenant migration. After email had been moved to a new Exchange tenant, we noticed that users continued to use their Outlook apps on their phones. They were also continuing to chat on the old tenant's Teams and were using all of the Office apps on the web using their cached logins.

This caused a headache. Some users were in the new environment with the correct domain—others didn't notice the “@onmicrosoft.com” and were having issues with SSO apps that had been migrated.

We needed to revoke all of the cached login tokens force log out all users. This quick Powershell command did the trick:


$users = Get-AzureAdUser -All $true

$users | foreach {
    Revoke-AzureADUserAllRefreshToken -objectID $_.objectID

After this runs, all users will be required to log in again. This forced them to go into the new tenant and solved our SSO issues.


#Windows #Powershell

Here's a script that I'm using to roll out the Quest ODM agent on PCs in my environment that do not have access to the LAN. I used Atera Service Desk to deploy it for internet-only installation.

Agent install and hosting

This script requires that you download the Device Agent from the Quest Migration for Active Directory downloads page:

Once that's complete, you will need to upload the file to a publicly accessible file share. I used Azure Files to create a storage container and provide direct access to the file. This URI will be pointed to in the script, so you cannot use something like OneDrive or SharePoint without special configuration.


Before running this script, you will need to change the following XXX values:

Function Invoke-ODM_Agent_Install {

	$InstallCheck = Get-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Quest\On Demand Migration For Active Directory\ODMAD_AD" -ErrorAction SilentlyContinue
  If ($null -eq $InstallCheck) {
    Write-Host 'Downloading ODM agent.' 
    $QuestODMMSIURI = 'XXX' # Change to use your own Azure Files URI
    $QuestODMdest = 'C:\Temp\ODM\QuestODM.msi' 
    Invoke-WebRequest -Uri $QuestODMMSIURI -OutFile (New-Item -Path $QuestODMdest -Force)

    Write-Host 'Installing ODM agent.'
    cmd /c "msiexec.exe /I `"C:\Temp\ODM\QuestODM.msi`" /qn SERVICEURL=https://us.odmad.quest-on-demand.com/api/ADM AUTHKEY=XXX" # Change to use your own authkey from Quest
    Write-Host 'Finished installing ODM agent.' 
  ElseIf ($null -ne $InstallCheck) {
    Write-Host 'ODM agent is already installed.'
  Else {
    Write-Host 'ERROR!' 





Call Monitoring or call shadowing is a feature offered by Ringcentral that allows specified users to silently join other users' ongoing calls.

This functionality is desired for training and call center environments and is intended for managers or supervisors to listen in on ongoing calls between agents and external customers.


Before enabling this feature, you must have the following in your environment:

  • At least 2 users.
  • At most 100 users.
  • All users must be licensed with an MVP Premium account.
  • All users must have a call out number associated with their extension.

There are two user roles for this workflow that are admin-managed from the Ringcentral web dashboard:

  • “Can Monitor”: A user with this role can join an ongoing call of any user in the “Can be Monitored” group. I will refer to these users as “managers” in this guide.
  • “Can be Monitored”: A user with this role can have any ongoing call joined by users in the “Can Monitor” group without immediate notification that this is occurring. I will refer to these users as “agents” in this guide.

I will refer to the third party callers as “customers” in this guide.


After adding a user to the “Can be Monitored” group, they will receive the following notification email:

There doesn't appear to be a way to suppress this notification.

Create the Call Monitoring group

  1. Login to Ringcentral with an admin account.

  2. Navigate to Phone System > Groups > Call Monitoring and click + New Call Monitoring

  3. Enter a name for the Call Monitoring group. This will not be displayed to users.

  4. After entering the name, expand the “Group Members” setting. Select at least one user for “Can Monitor” and at least one other user for “Can be Monitored”. (Note: I was unable to have the same user in both categories, so a user seems to only be able to use one or the other):

  5. Save these group settings and return to the main Ringcentral view.

“Can Monitor” user setup

After the admin stuff has been completed, the manager with the “Can Monitor” role must do the following:

  1. Open the Ringcentral web or desktop app and login with their user account.

  2. Click on the “Settings” icon at the bottom left. Click on “Phone”.

  3. In the “Phone” menu, scroll down to the Heads-Up Display (HUD) section and enable the HUD by flipping the switch:

  4. Save the settings, accept the notification, and return to the main Ringcentral view.

  5. From the main Ringcental view, click on the “Phone” icon.

  6. Under the “HUD” section, click on “Extensions”. Click on the “Add an extension” button:

  7. Type the name of the “Can be Monitored” user(s) and then click the Add button:

Monitoring a call

After the admin and user changes are made, the “Can Monitor” manager can then monitor when a “Can be Monitored” agent is in an active call using these steps:

  1. The “Can Monitor” user must open the Ringcentral web or desktop app and login using their user account.

  2. Navigate to “Phone > HUD” and join the call by hovering over and clicking on “Monitor Call”:

From there, there are several tools that the “Can Monitor” manager can employ:

  • Call whisper: Talk to the “Can be Monitored” agent without the customer hearing.

  • Call barge: Talk to all parties on the line. This is like a conference call.

  • Call takeover: Drops the “Can be Monitored” agent from the call, leaving the manager and the customer on the line.

  • Call recording: Begins a recording session with no notice to the customer or the agent. These recordings are stored in the “Call history” tab in the Phone section of the Ringcentral web or app interface.


#telephony #Windows

Ringcentral requires audio files to be saved as .mp3 files.

To do this, you'll need to convert your audio that you recorded in the Voice Recorder from .m4a into .mp3 using the app Audacity and the ffmpeg plugin. Audacity and ffmpeg are open source programs that can convert audio into different formats. Audacity is the main program and ffmpeg is an extension that Audacity uses to open .m4a files.

Install Audacity and the ffmpeg extension

Before you'll be able to convert the file, follow these steps to get Audacity and ffmpeg set up on your computer:

  1. Download the Audacity installer: https://github.com/audacity/audacity/releases/download/Audacity-3.1.2/audacity-win-3.1.2-64bit.exe
  2. Run the file and install Audacity with default settings: image-20211130111005914
  3. Navigate to the ffmpeg downloader page: https://lame.buanzo.org/ffmpeg64audacity.php
  4. Click on the link for the ffmpeg v.2.2.2 installer: image-20211130111421621
  5. Run the file and install ffmpeg with default settings: image-20211130111510466

Convert your audio file

After the setup is complete for both apps, follow these steps to convert your audio file:

  1. Open Audacity and navigate to File > Open and select your .m4a file: image-20211130111754961
  2. Navigate to File > Export > Export as MP3: image-20211130111904955
  3. Choose where you want to save the file and leave all options as default. Click the Save button: image-20211130112121743
  4. Leave the export options as default. Click the OK button: image-20211130112225196

After the window closes, your conversion will be complete. You can close Audacity without saving the file.

Navigate to the location where you saved the .mp3 file and upload it to Ringcentral.



I am creating an onboarding/new hire Sharepoint List at one of my clients and wanted to display a column/field only if a box is checked.

To do this, I created two columns:

  • ReplacementHire = Boolean Yes/No checkbox

  • PreviousUser = Text field

I wanted the PreviousUser field to only appear if the ReplacementHire box is checked.

To do this, I opened my Sharepoint List and did the following steps:

  1. Click on the New button on the left side of the page.

  2. In the Form view, click on the book/edit icon at the top right and click “Edit columns”

  1. Click on the three dots next to the column that you want to hide. Click “Edit conditional formula”

  1. In the popup window, paste in the following: =if([$ReplacementHire] == true, 'true', 'false') From what I gather, the if statement reads, if the box is checked (true), then 'true' (meaning display the field), else 'false' (if not, hide the field).

  2. Click OK and then Save. Refresh the page and test.

There was also some headache in the field/column name. What you typed in originally for the column name will be the “anchor” or name in the URL.

To get this anchor, do the following:

  1. Navigate to the Sharepoint site, click on Site Contents.

  2. Find the form, click on the three dots, and click Settings.

  3. On the Settings page, click on the column title under the Columns section.

  4. On the Column setting page, check the URL in your browser for anything after &Field= This info will be the “anchor” that you use for the =if([$anchor] == true, 'true', 'false') in the Conditional Format window.

Just putting this here for my future reference.



If you're setting up a phone or faxing system, you're going to need to make test calls and faxes to verify that things are working.

I wanted to write down the test numbers that I've used that are working as of 2021-Nov-12.

Phone numbers with voice utilities

These numbers can be called and have tools that can test functionality or connection issues with your phone.

Initial list from https://shaun.net/resources/test-phone-numbers/ and https://thetestcall.blogspot.com/

Country Number Note
Canada +1 416 342 9562 Voice echo
Canada +1 250 412 5922 Voice echo
Ireland +353 1 687 7776 Voice echo
United Kingdom +44 20 8759 9036 Caller ID check
United Kingdom +44 20 3026 4621 Voice echo
United States +1 800 444 4444 Caller ID check
United States +1 213 621 0002 Test tone
United States +1 631 791 8378 Voice echo
United States +1 510 315 1211 Voice echo and callback
United States +1 802 359 9100 Voice echo and latency check

Phone numbers for simple call placement

These numbers can be used to test a successful call placement, without any utilities.

Phone numbers with texting utilities

These numbers can be used to test texting functionality.

Country Number Note
United States +1 650 456 4556 US to US only – SMS/MMS echo
United States http://www.smseverywhere.com/send.htm Test SMS

Fax numbers with utilities

These numbers can be faxed to or from to test the functionality of your faxing system.

Country Number Note
Australia +61 1300 368 999 Send to and receive receipt confirmation back
Australia +61 0396 400 999 Send to and receive receipt confirmation back
United States +1 888 473 2963 Send to and receive receipt confirmation back
United States +1 855 392 2666 Send to and receive receipt confirmation back
United States +1 650 530 9014 Send to and receive receipt confirmation back
United States +1 855 330 1239 Send to and check quality on https://www.faxtoy.net/
United States +1 213 294 2943 Send to and check quality on https://www.faxtoy.net/
United States https://faxzero.com/ Send fax and test receipt


A company I'm working with is using a Neat Bar [A] and Neat Pad [A] for Zoom calling. They also use Meraki network devices for wireless (MR 42) and switching (MS 250).

As explained in the Neat documentation [A], the Neat Pad and Bar cannot continue through the setup screen when using Meraki devices with default options for DHCP.

In our environment, we have a wireless SSID that is set to bridge clients to a Wireless VLAN subnet. This SID is using a Pre-Shared Key (PSK), it's not hidden, and is using both 2.4ghz and 5ghz bands with band steering. The DHCP server is running on the Switch Virtual Interface (SVI) configured on the Wireless VLAN subnet.

When trying to connect the Neat Pad and Bar to this SSID, the setup screen allows them to connect, but it say that it's not connected to the internet. The workaround for this is to configure the DHCP options in the SVI to include an NTP time server IP.

The steps are as follows:

  1. Open the Meraki dashboard in a browser.

  2. Navigate to Switch > Routing & DHCP:

  3. Click on the row to open up the Switch Interface config:

  4. In the section “DHCP options”, click the “Add a DHCP option” button. Select “NTP Server (42)”. Copy/paste in one of the direct IPs from the NIST Internet Time Servers page: https://tf.nist.gov/tf-cgi/servers.cgi

After that, you might need to reboot the Neat devices, but the Neat Pad screen should say that the wireless connection has internet access and allow you to continue the setup.

#Windows #HyperV

I tried setting up a new Windows 10 VM in Hyper V with default options, but I sometime receive the following error when going thru the installation:

Windows cannot find the Microsoft Software License Terms. Make sure the installation sources are valid and restart the installation.

Screenshot of Windows Setup, error message

I thought it was an issue with my Windows 10 ISO, but the MD5 checked out OK.

The fix:

  1. Power off the VM.

  2. Edit the Settings on the VM.

  3. In the Settings window, navigate to the Memory tab. Change the Minimum Ram setting in the Dynamic Memory option from 512 MB to something like 1024 MB.

  4. Restart the VM.

Screenshot of Hyper-V, Memory setting

Enter your email to subscribe to updates.