GetUserProfileByIndex: Server was unable to process request. ---> Attempted to perform an unauthorized operation

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/226730

  •  02-01-2021
  •  | 
  •  

Question

I am trying to fix an issue with one of my power shell scripts. I am getting this error.

    Exception calling "GetUserProfileByIndex" with "1" argument(s): "Server was unable to process request. ---> Attempted to perform an unauthorized operation."
At line:1 char:1
+ $UserProfileService.GetUserProfileByIndex($UserProfileResult.NextValue)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : SoapException

I believe it has something to do with rights, but that does not make sense... I have sharepoint rights and part of the user management role. Please help. The code I am having trouble with is with actually getting the list of onedrive accounts. I have modified the code to fit my needs.

function One_drive_Lists ($username , $password)
{
    # Specifies the URL for your organization's SPO admin service
    $AdminURI = "https://hfu-admin.sharepoint.com"

    # Specifies the User account for an Office 365 global admin in your organization
    $AdminAccount = $username
    $AdminPass =   $password
    # Specifies the location where the list of MySites should be saved
    $LogFile = 'C:\Onedrive_reports\Reports\ListOfMysites.txt'


    # Begin the process

    $loadInfo1 = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client")
    $loadInfo2 = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime")
    $loadInfo3 = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.UserProfiles")

    # Convert the Password to a secure string, then zero out the cleartext version ;)
    $sstr = ConvertTo-SecureString -string $AdminPass -AsPlainText -Force
    $AdminPass = ""

    # Take the AdminAccount and the AdminAccount password, and create a credential

    $creds = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($AdminAccount, $sstr)


    # Add the path of the User Profile Service to the SPO admin URL, then create a new webservice proxy to access it
    $proxyaddr = "$AdminURI/_vti_bin/UserProfileService.asmx?wsdl"
    $UserProfileService= New-WebServiceProxy -Uri $proxyaddr -UseDefaultCredential False
    $UserProfileService.Credentials = $creds

    # Set variables for authentication cookies
    $strAuthCookie = $creds.GetAuthenticationCookie($AdminURI)
    $uri = New-Object System.Uri($AdminURI)
    $container = New-Object System.Net.CookieContainer
    $container.SetCookies($uri, $strAuthCookie)
    $UserProfileService.CookieContainer = $container

    # Sets the first User profile, at index -1
    $UserProfileResult = $UserProfileService.GetUserProfileByIndex(-1)

    wl -value "Starting- This could take a while."

    $NumProfiles = $UserProfileService.GetUserProfileCount()
    $i = 1

    # As long as the next User profile is NOT the one we started with (at -1)...
    "email" | Out-File $LogFile  -Force
    While ($UserProfileResult.NextValue -ne -1) 
    {
        wl -value "Examining profile $i of $NumProfiles"

        # Look for the Personal Space object in the User Profile and retrieve it
        # (PersonalSpace is the name of the path to a user's OneDrive for Business site. Users who have not yet created a 
        # OneDrive for Business site might not have this property set.)
        $Prop = $UserProfileResult.UserProfile | Where-Object { $_.Name -eq "UserName" } 
        $Url= $Prop.Values[0].Value
        wl -value $url
        # If "PersonalSpace" (which we've copied to $Url) exists, log it to our file...
        if ($Url) 
        {
            $Url | Out-File $LogFile -Append -Force
        }

        # And now we check the next profile the same way...
        $UserProfileResult = $UserProfileService.GetUserProfileByIndex($UserProfileResult.NextValue)
        $i++
    }

}
Was it helpful?

Solution

You need to be a "SharePoint administrator". By this, I mean you need to have this role assigned in the manage user screen in the O365 admin portal.

Licensed under: CC-BY-SA with attribution
Not affiliated with sharepoint.stackexchange
scroll top