If you’ve ever had the pleasure of working with the built-in O365 cmdlets for viewing and modifying licenses you’ve probably come across:
Set-MsolUserLicense : Unable to assign this license because it is invalid. Use the Get-MsolAccountSku cmdlet to retrieve a list of valid licenses.
In every instance I ran across this “error” it was because the license I was attempting to set was already active for the account. Instead of a notice that no changes have been made, like we had with on-prem Exchange, you get complete misdirection about the root cause. I made a Powershell module to help identify that condition along with providing console feedback. Each cmdlet can stand on it’s own assuming you provide a properly formatted UPN and are connected to MSOnline.
Currently Add-365License and Remove-365License don’t return any values because the O365 account validation happening within the cmdlet along with the actual task of adding/removing a license means there could be two points of failure. If you separate the O365 account validation from the cmdlets I found you lose some flexibility when it comes to live account changes. To each their own, mod away, throw some return true|false if ya get the urge.