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