static void Main(string[] args) { using (SPSite site = new SPSite(args[0])) { foreach (SPWeb web in site.AllWebs) { try { if (web.HasUniqueRoleAssignments) { Console.WriteLine(web.ServerRelativeUrl); var col = web.RoleAssignments; foreach (SPRoleAssignment item in col) { string[] roles = item.RoleDefinitionBindings.Cast<SPRoleDefinition>().Where(b => b.Name != "Beperkte toegang").Select(b => b.Name).ToArray(); if (roles.Length > 0) { if (item.Member is SPGroup) { SPGroup g = (SPGroup)item.Member; if (g.Users.Count > 0) { Console.WriteLine("Groep: {0} - Role(s): {1} ({2} members)", item.Member.LoginName, string.Join(", ", roles), g.Users.Count); } } else { SPUser user = (SPUser)item.Member; if (!user.IsSiteAdmin) { Console.WriteLine("User: {0} - Role(s): {1}", item.Member.LoginName, string.Join(", ", roles)); } } } } Console.WriteLine(); } } finally { web.Dispose(); } } } }Note. Roles "Beperkte toegang", Dutch name for the role "Limited access" is filtered out, and users that are SiteCollection administrators are excluded from the results to create a more readable result.
donderdag 27 november 2014
List assigned right for a site collection
vrijdag 21 maart 2014
Powershell selecting web propertie bag
$web = Get-SPWeb
$web.AllProperties.GetEnumerator() | Where-Object { $_.Name -like "tresoar.story.pre*"} | Sort-Object {$_.Name}
donderdag 6 februari 2014
Sharepoint 2013 Failed to create a mysite, trusted domain
My Site creation failure for user 'domain\user03' for site url 'https://my.site.nl/personal/user03'. The exception was: Microsoft.Office.Server.UserProfiles.PersonalSiteCreateException: A failure was encountered while attempting to create the site. ---> Microsoft.SharePoint.SPException: Kan de gegevens voor de sleutel voor de toepassingsreferenties niet ophalen. at Microsoft.SharePoint.Administration.SPCredentialManager.DecryptWithApplicationCredentialKey(Byte[] rgbEncryptedPassphrase) at Microsoft.SharePoint.Administration.SPPeoplePickerSearchActiveDirectoryDomain.get_Password() at Microsoft.SharePoint.Utilities.SPActiveDirectoryDomain..ctor(SPPeoplePickerSearchActiveDirectoryDomain peoplePickerDomain) at Microsoft.SharePoint.Utilities.SPUserUtility.GetWindowsPrincipalResolvers(SPWebApplication webApp, String userAccountDirectoryPathRestriction, SPPrincipalResolver bySidResolver) at Microsoft.SharePoint.Utilities.SPUserUtility.CreatePrincipalResolvers(SPWebApplication webApp, ICollection`1 urlZones, Nullable`1 currentZone, SPPrincipalResolver bySidResolver, String userAccountDirectoryPathRestriction, Boolean alwaysAddWindowsResolver) at Microsoft.SharePoint.Utilities.SPUtility.ResolveWindowsPrincipal(SPWeb web, SPWebApplication webApp, String input, SPPrincipalType scopes, Boolean inputIsEmailOnly) at Microsoft.SharePoint.Administration.Claims.SPActiveDirectoryClaimProvider.FillResolve(Uri context, String[] entityTypes, Boolean inputIsEmailOnly, String resolveInput, List`1 resolved) at Microsoft.SharePoint.Administration.Claims.SPActiveDirectoryClaimProvider.FillResolve(Uri context, String[] entityTypes, SPClaim resolveInput, List`1 resolved) at Microsoft.SharePoint.Administration.Claims.SPClaimProvider.Resolve(Uri context, String[] entityTypes, SPClaim resolveInput) at Microsoft.SharePoint.Administration.Claims.SPClaimProviderOperations.Resolve(Uri context, SPClaimProviderOperationOptions mode, String[] providerNames, String[] entityTypes, SPClaim resolveInput) at Microsoft.SharePoint.Utilities.SPUtility.ResolvePrincipalClaims(SPWeb web, SPWebApplication webApplication, Nullable`1 urlZone, String input, SPPrincipalType scopes, SPPrincipalSource sources, SPPrincipalInfo user, Boolean inputIsEmailOnly) at Microsoft.SharePoint.Utilities.SPUtility.ResolvePrincipalInternal(SPWeb web, SPWebApplication webApp, Nullable`1 urlZone, String input, SPPrincipalType scopes, SPPrincipalSource sources, SPUserCollection usersContainer, Boolean inputIsEmailOnly, Boolean alwaysAddWindowsResolver) at Microsoft.SharePoint.Utilities.SPUtility.ResolvePrincipal(SPWebApplication webApp, Nullable`1 urlZone, String input, SPPrincipalType scopes, SPPrincipalSource sources, Boolean inputIsEmailOnly) at Microsoft.SharePoint.Administration.SPSiteCollection.Add(SPContentDatabase database, SPSiteSubscription siteSubscription, String siteUrl, String title, String description, UInt32 nLCID, Int32 compatibilityLevel, String webTemplate, String ownerLogin, String ownerName, String ownerEmail, String secondaryContactLogin, String secondaryContactName, String secondaryContactEmail, String quotaTemplate, String sscRootWebUrl, Boolean useHostHeaderAsSiteName, Boolean overrideCompatibilityRestriction) at Microsoft.SharePoint.SPSite.SelfServiceCreateSite(String siteUrl, String title, String description, UInt32 nLCID, Int32 compatibilityLevel, String webTemplate, String ownerLogin, String ownerName, String ownerEmail, String contactLogin, String contactName, String contactEmail, String quotaTemplate, SPSiteSubscription siteSubscription) at Microsoft.Office.Server.UserProfiles.UserProfile.<>c__DisplayClass2.The exception shows that something is wrong with the application encryption key. The application encryption key is used to secure the credentials used to connect to the trusted domain. To fix this issue you have to use STS-ADM, there is no powershell command for this:b__0() - -- End of inner exception stack trace --- at Microsoft.Office.Server.UserProfiles.UserProfile.<>c__DisplayClass2. b__0() at Microsoft.SharePoint.SPSecurity.<>c__DisplayClass5. b__3() at Microsoft.SharePoint.Utilities.SecurityContext.RunAsProcess(CodeToRunElevated secureCode) at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(WaitCallback secureCode, Object param) at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(CodeToRunElevated secureCode) at Microsoft.Office.Server.UserProfiles.UserProfile.CreateSite(String strRequestUrl, Boolean bCollision, Int32 overrideCompatLevel, Int32 lcid).
sts-adm -o setapppassword -password SomeVeryStrongPassword
vrijdag 21 september 2012
devNetNoord #3: Een succes
20 September werd alweer het 3e devNetNoord event gehouden. devNetNoord is een platform voor en door de Noord Nerdelandse .NET developers. Er waren 3 sprekers te gast met een aantal interessante onderwerpen.
De eerste spreker was Kees Dijk die ons in een korte tijd het hele asynchrone dotNet landschap liet zien. Van de historische componenten uit dotNet 1.0 en 2.0 tot de relatief nieuwe toevoegingen in dotNet 4.5. Asynchroniteit is een onmisbaar component in moderne toepassing, dit heeft verschillende oorzaken: toegenomen belang van een responsive UI. Voor moderne applicaties, denk aan apps op een tablet, is het dodelijk als de UI niet vlot reageert op de user input. Dit heeft als gevolg dat alle operaties asynchroon afgehandeld moeten worden zodat de UI thread niet geblokkeerd wordt.
Een ander gebruik van asynchroniteit is het beter kunnen benutten van de meerdere cores van moderne CPU’s. Door je werk te verdelen over meerdere core’s kan er een behoorlijke performance winst behaald worden.
Gelukkig wordt het door verschillende toevoegingen aan dotNet steeds eenvoudiger om asynchroniteit in te bouwen. Vooral de introductie van Task<T>, async/await, Parallel Ling (plinq) maken het eenvoudig(er) om asynchroon/parallel te programmeren. Ook toevoegingen de Reactive Extensions (RX) maken het eenvoudig om bijvoorbeeld events van sensoren (denk aan GPS, touch input) eenvoudig af te handelen.
De tweede spreker, Pieter Joost van de Sande, had een heel ander, onderwerp: Command Query Responsibility Segregation (CQRS) architectural pattern. Een verfrissende kijk op het opzetten van een applicatie architectuur. De CQRS werd vergeleken met de traditionele drie lagen architectuur van Presentatie, Business logica en data acces. Bij CQRS is de architectuur opgesplitst in een lees kant, geoptimaliseerd voor het presenteren van de gevraagde data. De data wordt zoveel mogelijk hap klaar en ge-pre-rendered voor de UI klaargezet, voor maximale responsiveness en schaalbaarheid. De andere kant van de architectuur is de schrijf/actie kant, waar die de gebruikers acties afhandelt. De acties worden als commands door gegeven een command handler welke er events van genereerd. Al deze events worden afgehandeld door de domein laag en opgeslagen in een repository. Door verschillende ‘inspectors’ op de events worden lees data bijgewerkt .
Grote voordelen van de architectuur:
- Schaalbaar en snel. De read kant is geoptimaliseerd voor presentatie en kan eenvoudig geschaald worden.
- Doordat alles wat gebeurd door de applicatie geregistreerd is het ook achteraf mogelijk business logica en business value uit de data te halen. Er kan waardevolle marketing informatie uit de historische data gehaald worden!
Nadelen:
- Specialistische hardware voor het afhandelen van de IO’s
- Er moet veel data gemanaged worden
Als laats liet Gerard van der Pol ons de nieuwe features van Visual Studio 2012 en TFS 2012 zien. Wat vooral interessant is zijn de nieuwe toevoegingen aan TFS om het werken in teams beter te ondersteunen. De scrum dashboard hebben bijvoorbeeld een update gekregen zodat deze ook goed te gebruiken zijn als vervanger van het vertrouwde papieren scrum dashboard met de gekeurde post-its. Vooral handige als je team fysiek over meerdere locaties verdeeld is.
Als met al weer een geslaagd event! Tot de volgende devNetNoord.
woensdag 22 augustus 2012
Compiler warning: There was a mismatch between the processor architecture of the project being
There was a mismatch between the processor architecture of the project being built "MSIL" and the processor architecture of the reference "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL", "AMD64". This mismatch may cause runtime failures. Please consider changing the targeted processor architecture of your project through the Configuration Manager so as to align the processor architectures between your project and references, or take a dependency on references with a processor architecture that matches the targeted processor architecture of your project.
Since I do not want to change the deployment target platform, the most simple solution is to suppress the error message.
Unload the project en edit the project file.
Add the following to the (first) propertygroup element
<ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>None</ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
maandag 20 augustus 2012
No ULS log for web applications with a custom application pool account
dinsdag 20 april 2010
"The filename or extension is too long." when accessing MOSS CrawlRules FIX
Error when accessing the crawl rules with the SharePoint API:
Unhandled Exception: System.IO.PathTooLongException: The filename or extension is too long.
at Microsoft.Office.Server.Search.Administration.SearchApi.RunOnServer[T](CodeToRun`1 remoteCode, CodeToRun`1 localCode, Boolean useCurrentSecurityContext, Int32 versionIn)
at Microsoft.Office.Server.Search.Administration.SearchApi.RunOnServer[T](CodeToRun`1 remoteCode, CodeToRun`1 localCode, Int32 versionIn)
at Microsoft.Office.Server.Search.Administration.SearchApi.GetCrawlRuleList(Int32 versionIn)
at Microsoft.Office.Server.Search.Administration.CrawlRuleCollection..ctor(Content parent)
at Microsoft.Office.Server.Search.Administration.Content.get_CrawlRules()
You can fix this error by deleting the crawl rule from the registry. Check the following registry key
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office Server\12.0\Search\Applications\90604ba8-1a0b-448d-87b6-9b5c04a69c9b\Gather\Portal_Content\Sites\*\Paths\0
and delete it.
After a reboot the crawl rules are accessible again.
Arnold thanks 4 the tip.