msgraph-sdk-powershell icon indicating copy to clipboard operation
msgraph-sdk-powershell copied to clipboard

[Support Setting Fields to null] Unable to set BusinessPhones or MobilePhone fields to $null

Open haneef95 opened this issue 4 years ago • 17 comments

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

haneef95 avatar Aug 31 '21 04:08 haneef95

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.

Machsol-Usman avatar Jun 23 '22 04:06 Machsol-Usman

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.

yllekz avatar Jul 22 '22 19:07 yllekz

Any updates to this?

tyteen4a03 avatar Oct 27 '22 19:10 tyteen4a03

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 avatar Oct 27 '22 21:10 rui0122

@rui0122, the workaround works well for me in v1.14.0: image

The issue is with the spelling of users in the -Uri.

peombwa avatar Nov 02 '22 18:11 peombwa

When will this issue be fixed?

testtesttaro avatar Feb 20 '23 08:02 testtesttaro

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 avatar Feb 20 '23 14:02 yllekz

@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.

testtesttaro avatar Feb 20 '23 23:02 testtesttaro

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.

yllekz avatar Feb 21 '23 13:02 yllekz

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.

peombwa avatar Feb 21 '23 22:02 peombwa

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 avatar Feb 22 '23 13:02 nathankascopgr

@nathankascopgr, please open a question at https://developer.microsoft.com/en-us/graph/support to get assistance from the API owner.

peombwa avatar Feb 22 '23 17:02 peombwa

https://learn.microsoft.com/en-us/answers/questions/1183332/extension-attributes-for-devices-should-be-but-are

nathankascopgr avatar Feb 22 '23 18:02 nathankascopgr

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?

DougChandler avatar Apr 19 '23 09:04 DougChandler

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"
                }
            }

DougChandler avatar Apr 19 '23 11:04 DougChandler

We really need this!

worldsdream avatar Dec 01 '23 08:12 worldsdream

+1

jpawlowski avatar Dec 09 '23 13:12 jpawlowski