[Support Setting Fields to null] Unable to set BusinessPhones or MobilePhone fields to $null
Hi,
When trying to set BusinessPhones or MobilePhone values to $null, like so:
Update-MgUser -UserId $MgUser.UserPrincipalName -MobilePhone $null -BusinessPhones $null
It throws an error:
Update-MgUser_UpdateExpanded: Invalid value specified for property 'mobilePhone' of resource 'User'.
I've fixed this for now by using an alternative command:
Invoke-GraphRequest -Method PATCH -Uri "https://graph.microsoft.com/v1.0/Users/$($MgUser.UserPrincipalName)" -Body '{"businessPhones": [],"mobilePhone": null}'
Hope this helps someone else in a similar need and more so, the Update-MgUser cmdlet is fixed.
Thanks, AB#10944
Please push this on top of requirement list, $null should be supported as we have in Set-MSOLUser. The workaround needs extra handling and additional calls.
It would be good if an ETA is shared.
This needs to be updated/fixed such that the "OtherMails" attribute can also be set to null.
This module needs to be at parity with MSOnline before it is retired. Please expedite.
Any updates to this?
Invoke-GraphRequest fails on the latest module version 1.14.0. You can use Invoke-MgGraphRequest instead.
Invoke-MgGraphRequest -Method PATCH -Uri "https://graph.microsoft.com/v1.0/uers/<UPN> -Body "{ "mobilePhone": null }"
As multiple customers are facing this issue, please fix this asap.
@rui0122, the workaround works well for me in v1.14.0:

The issue is with the spelling of users in the -Uri.
When will this issue be fixed?
While this doesn't excuse the lack of progress on this, This is a decent workaround:
$mguser = get-mguser -userid "[email protected]"
Invoke-GraphRequest -Method PATCH -Uri "https://graph.microsoft.com/v1.0/Users/$($MgUser.UserPrincipalName)" -Body '{"OtherMails": []}'
@yllekz , Thanks for the workaround guide. However, this workaround requires an extra command to be executed. It would be great if you could set $null in Update-MgUser like in the MSOL module without leaving this problem.
It's only one command. The first line is just a variable assignment for convenience. You don't have to write it that way if you don't want to.
We currently do not support setting properties to null due to a design limitation with the code generator - https://github.com/Azure/autorest.powershell/issues/961.
As a workaround, please use the Invoke-GraphRequest as suggested above.
Unfortunately Invoke-GraphRequest doesn't seem to work to null values either. It appears to be the same through Graph Explorer. Can someone help get this info to the Graph API team?
@nathankascopgr, please open a question at https://developer.microsoft.com/en-us/graph/support to get assistance from the API owner.
https://learn.microsoft.com/en-us/answers/questions/1183332/extension-attributes-for-devices-should-be-but-are
Seriously I am shocked that the APIs do not handle nulls, with this and the deleted items call failing to work at all, it calls into question the quality of this module. I wrote my own interface class a couple of year back because of the deleted items thing but this time I am attempting to use the new module, but come on guys, this is basic stuff. Now we have to have a special case for any null (and deleted items), how many more will I find?
This is my workaround, I have a hashtable of values to update... there might be a more efficient way of setting up the hashtables, I've not had time to look yet.
$nullProperties = @{}
$notNullProperties = @{}
# Nulls require special processing, so need to split the values that are null and not null into a separate hashtables
$properties.GetEnumerator() | foreach {
if ([string]::IsNullOrEmpty($_.Value)) {
$nullProperties.add($_.name, $_.value)
} else {
$notNullProperties.add($_.name, $_.value)
}
}
# (aadUser is a user object from Get-MgUser)
# Not null properties
if ($notNullProperties.count -gt 0) {
if ((Update-MgUser -UserId $aaduser.Id -BodyParameter $notNullProperties -PassThru) -eq $false) {
throw "Update user failed"
}
}
# Null properties
if ($nullProperties.count -gt 0) {
$response = Invoke-MgGraphRequest -Method PATCH -Uri "v1.0/Users/$($aaduser.id)" -Body $nullProperties -StatusCodeVariable ResponseStatusCode
if ($responsestatuscode -ne 204) {
throw "Clearing user properties failed"
}
}
We really need this!
+1