SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

PowerShell - SharePoint Server - Benutzerprofile - Zugriff verweigert

bewertet von 0 Usern
Beantwortet Dieser Beitrag hat 1 Geprüfte Antwort | 5 Antworten | 2 Followers

Top-200-Beitragsschreiber
71 Beiträge
Ladislav erstellt in 13 Aug 2021 17:16

Sehr geehrte Kollegen,

 

Ich kann die Benutzerprofile aus dem SharePoint 2019 on Premise durch PowerShell nicht erreichen.

 

Ich bin DB Owner an der Benutzerprofilen Datenbank, lokaler Administrator auf dem Windows Servern für SharePoint Frontend und Datenbank. Ich bin Administrator an den Benutzerprofile Services.

 

Ich kann die Benutzerprofile mit einem identischen Code in einer Farm Solution erreichen.

 

Hier ist der Code:

 

Param (

[string]$WebUrl

)

 

Add-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue

 

$Assemblies = ("System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c", "Microsoft.Office.Server, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c", "Microsoft.Office.Server.UserProfiles, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c")

 

$Code = @"

 

using System;

using System.Collections;

using System.Collections.Generic;

using Microsoft.Office.Server.UserProfiles;

using Microsoft.SharePoint;

 

namespace TestGetAllUserProfilesWithElevatedPrivileges

{

public static class Utility

{

public static List<string> GetAccountNames(string webUrl)

{

List<string> accountNames = new List<string>();

 

if (!string.IsNullOrEmpty(webUrl))

{

SPSecurity.RunWithElevatedPrivileges(delegate () {

 

try

{

using (SPSite site = new SPSite(webUrl))

{

SPServiceContext serviceContext = SPServiceContext.GetContext(site);

 

if (serviceContext != null)

{

UserProfileManager userProfileManager = new UserProfileManager(serviceContext);

 

if (userProfileManager != null)

{

IEnumerator userProfiles = userProfileManager.GetEnumerator();

 

if (userProfiles != null)

{

while (userProfiles.MoveNext())

{

UserProfile userProfile = userProfiles.Current as UserProfile;

 

if (userProfile != null)

{

string accountName = userProfile.AccountName;

 

if (!string.IsNullOrEmpty(accountName))

{

accountNames.Add(accountName);

}

}

}

}

}

}

}

}

catch (Exception ex)

{

string errorMessage = ex.Message + " " + ex.ToString();

 

accountNames.Add(errorMessage);

}

});

}

 

return accountNames;

}

}

}

"@

 

Add-Type -TypeDefinition $Code -Language CSharp -ReferencedAssemblies $Assemblies

 

$accountNames = [TestGetAllUserProfilesWithElevatedPrivileges.Utility]::GetAccountNames($WebUrl)

 

if ($accountNames) {

 

foreach($accountName in $accountNames) {

 

if ($accountName) {

 

Write-Host $accountName

}

}

}

 

Und hier ist die Fehlermeldung:

 

at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)

 

   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)

 

   at Microsoft.Office.Server.UserProfiles.IProfileDBCacheService.GetUserData(UserSearchCriteria searchCriteria)

 

   at Microsoft.Office.Server.UserProfiles.ProfileDBCacheServiceClient.<>c__DisplayClass3.<GetUserData>b__0(IProfileDBCacheService channel)

 

   at Microsoft.Office.Server.Infrastructure.ChannelInvoke`1.ExecuteOnChannel(String operationName, Action`1 codeBlock, ChannelInvokeSettings channelInvokeSettings)

 

   at Microsoft.Office.Server.UserProfiles.MossClientBase`1.ExecuteOnChannelWithRetries(String operationName, Action`1 codeBlock)

 

   at Microsoft.Office.Server.UserProfiles.ProfileDBCacheServiceClient.ExecuteOnChannel(String operationName, CodeBlock codeBlock)

 

   at Microsoft.Office.Server.UserProfiles.ProfileDBCacheServiceClient.GetUserData(UserSearchCriteria searchCriteria)

 

   --- End of inner exception stack trace ---

 

   at Microsoft.Office.Server.UserProfiles.ProfileDBCacheServiceClient.GetUserData(UserSearchCriteria searchCriteria)

 

   at Microsoft.Office.Server.UserProfiles.UserProfileCache.GetBulkUserData(UserProfileManager objManager, String searchColumn, IList searchList)

 

   at Microsoft.Office.Server.UserProfiles.UserProfileCache.GetBulkUserProfiles(UserProfileManager objManager, String searchColumn, IList searchList, Boolean includeNullsForUnresolvableUsers, Int64& lFai

 

ledCount)

 

   at Microsoft.Office.Server.UserProfiles.UserProfileCache.GetBulkUserProfiles(UserProfileManager objManager, List`1 userIdList, Boolean includeNullsForUnresolvableUsers, Int64& lFailedCount)

 

   at Microsoft.Office.Server.UserProfiles.ProfileEnumerator`1.PopulateUserProfileQueue(IList userSearchList)

 

   at Microsoft.Office.Server.UserProfiles.ProfileEnumerator`1.PopulateQueue()

 

   at Microsoft.Office.Server.UserProfiles.ProfileEnumerator`1.MoveNext()

 

   at TestGetAllUserProfilesWithElevatedPrivileges.Utility.<>c__DisplayClass2.<GetAccountNames>b__0()

 

Ich danke Ihnen.

 

Mit freundlichen Grüssen

Ladislav Stupak

Beantwortet Geprüfte Antwort

Top-200-Beitragsschreiber
71 Beiträge

Danke Derby für den Hinweis.

1. Add-SPShellAdmin

Ich habe Add-SPShellAdmin ausgeführt:

Get-SPDatabase | ?{$_.Name -eq "UserProfile Database Name"} | Add-SPShellAdmin -Username Domäne\LoginName

2. User Profile Service Application – Permissions

Ich habe mir in der Zentraladministration Full Control Rechte in der User Profile Service Application unter Sharing – Permissions vergeben.

(Als Administrator hatte ich mich schon vorher in der User Profile Service Application gesetzt. Das hat nicht gereicht.) 

 

Jetzt kann ich die Skripte über die Benutzerprofile durchführen.

 

 

 

 

Alle Antworten

Top-10-Beitragsschreiber
19.239 Beiträge

Hast Du die PowerShell als Administrator gestartet?

Viele Grüße
Andi
af @ evocom de
Blog
Top-10-Beitragsschreiber
19.239 Beiträge

Tut mir leid, eine andere Idee hab ich auch nicht :-(

Viele Grüße
Andi
af @ evocom de
Blog
Top-25-Beitragsschreiber
501 Beiträge

Könnte noch an den PowerShell Berechtigungen für die DB liegen. Bin mir nicht sicher ob man die dafür separat braucht.

Add-SPShellAdmin "UserLogin" "UserProfileDBName"

Top-200-Beitragsschreiber
71 Beiträge

Danke Derby für den Hinweis.

1. Add-SPShellAdmin

Ich habe Add-SPShellAdmin ausgeführt:

Get-SPDatabase | ?{$_.Name -eq "UserProfile Database Name"} | Add-SPShellAdmin -Username Domäne\LoginName

2. User Profile Service Application – Permissions

Ich habe mir in der Zentraladministration Full Control Rechte in der User Profile Service Application unter Sharing – Permissions vergeben.

(Als Administrator hatte ich mich schon vorher in der User Profile Service Application gesetzt. Das hat nicht gereicht.) 

 

Jetzt kann ich die Skripte über die Benutzerprofile durchführen.

 

 

 

 

Seite 1 von 1 (6 Elemente) | RSS