August 30, 2016

SharePoint SP.UserProfiles.PeopleManager GetMyProperties Unknown Error

Problem

When attempting to query SharePoint User Profile using REST at _api/SP.UserProfiles.PeopleManager/GetMyProperties, you get error

<m:error xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<m:code>-1, Microsoft.SharePoint.Client.UnknownError</m:code>
<m:message xml:lang="en-US">Unknown Error</m:message>
</m:error>

Solution

Go to Central Admin –> User Profile Service Application –> Setup My Sites

mysite1

Fill in the MySite Host Location field. It will also work if you have centralized MySite host located on another farm.

mysite2

Done!

June 29, 2016

SQL Server: Log Shipping backup job fails

Problem

After configuring Log Shipping, the first job that runs is the transaction log backup. However, it keeps on failing with very generic error:

Executed as user: DOMAIN\sqlagent1. The step failed.

No matter what you do, it just won’t log anything else, e.g., configuring the Job step to log to file just ends up with empty log file. Also the log table contains no rows for this specific step.

Solution

I finally tried executing the sqllogship.exe command from the failing Job step on the SQL server:

"s:\Program Files\Microsoft SQL Server\130\Tools\Binn\sqllogship.exe" –Backup <GUID> -server SQL-1

and it displayed me dialog that .NET Framework 3.5 was required on the server. After installing that from “Add Roles and Features”, the Job finally executed without issues.

April 22, 2016

How to configure SharePoint + SQL on Azure VM to use Internal Load Balancer

Task

While creating SharePoint 2016 MinRole farm in Azure with altogether 14 servers, it took me a while to understand how to configure SQL Server connection on SharePoint servers. In more simple farms without SQL Server AlwaysOn Availability Groups it was straightforward to simply set SQL Alias using cliconfg tool on each SharePoint server. However now that there would be Internal Azure Load Balancer (ILB) via which all traffic would flow from SharePoint servers to SQL Server, this SQL Alias wasn’t working.

Trying to point SQL Alias prodsql to the IP address of the ILB just didn’t work, but as soon as I pointed prodsql to one single SQL Server everything worked nicely.

Solution

As many times, the solution was simple, but for some reason I was just too stuck to the “always use SQL server alias” thought to realize, that this time I in fact needed to remove the SQL Alias from all SharePoint servers and instead create DNS A record that points from prodsql to the ILB IP address.

Case closed.

April 6, 2016

SharePoint 2016: Distributed Cache cacheHostInfo null

Problem

When setting up MinRole SharePoint 2016 server with 9 SharePoint servers using AutoSPInstaller, one of the Distributed Cache servers was not behaving correctly, and gave error “cacheHostInfo is null”. Also Health checks were saying that “This Distributed Cache host may cause cache reliability problems.“ and referring to the individual server. Fix button on the Services on Server page in Central Admin didn’t do anything.

Solution

Basic cache host repair steps worked fine on SP2016 as well, so did the following on the offending server:

  1. Get the Distributed Cache Service Id of the offending server

    Get-SPServiceInstance | where {$_.TypeName -like '*distributed*'} | select Id, Server
  2. Remove the service instance

    $d = Get-SPServiceInstance <GUID>
    $d.Delete()
  3. Finally recreate the service instance

    Add-SPDistributedCacheServiceInstance

March 17, 2016

New-AzureRmResourceGroupDeployment : A parameter cannot be found that matches parameter name '_artifactsLocationSasToken'

Problem

I was trying to deploy new Azure Resource Group using private storage on Azure instead of GitHub (or some other publicly) hosted templates, but run into error when including artifacts.

With the default Deploy-AzureResourceGroup.ps1 (as it comes with Azure SDK, full file can be found, e.g., here), it throws the following error when UploadArtifacts parameter was set to $true.

New-AzureRmResourceGroupDeployment : A parameter cannot be found that
matches parameter name '_artifactsLocationSasToken'.

Same occurred if I execute Deploy-AzureResourceGroup.ps1 via PowerShell ISE or did Deploy via Visual Studio.

At the end of Deploy-AzureResourceGroup.ps1, there is call to Deploy-AzureResourceGroup.ps1 like this:

New-AzureRmResourceGroupDeployment -Name ((Get-ChildItem $TemplateFile).BaseName + '-' + 
((Get-Date).ToUniversalTime()).ToString('MMdd-HHmm')) ` -ResourceGroupName $ResourceGroupName ` -TemplateFile $TemplateFile ` -TemplateParameterFile $TemplateParametersFile ` @OptionalParameters ` -Force -Verbose

@OptionalParameters was correctly populated with HashTable containing values for _artifactsLocation and _artifactsLocationSasToken, but New-AzureRmResourceGroupDeployment is not accepting them.

 

Solution

Adding the missing parameters to azuredeploy.json solved the original error. What I didn’t know was that (obviously), New-AzureRmResourceGroupDeployment passes the parameters to the TemplateFile (usually called azuredeploy.json).

"_artifactsLocationSasToken": {
  "type": "string",
  "metadata": {
    "description": ""
  }
},
"_artifactsLocation": {
  "type": "string",
  "metadata": {
    "description": ""
  }
},

Solution 2

One final issue was that I needed to include the _artifactsLocation in the configuration variables of the resources like this to append the SAS Token to the URL so that deployment engine can fetch those from our private Azure Storage Account:

"provisioningPrimaryDCURL": "[concat(parameters('_artifactsLocation')
,'/provisioningPrimaryDomainController.json'
,parameters('_artifactsLocationSasToken')
)]",

March 14, 2016

Display error details with custom SharePoint WCF Service

Problem

I always keep forgetting how to configure web.config file in order to display verbose error messages thrown by custom WCF services you create for SharePoint (the ones under _vti_bin).

Solution


In %PROGRAMFILES%\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\web.config within system.serviceModel\behaviors\serviceBehaviors add:

<behavior>
    <serviceDebug includeExceptionDetailInFaults="true" />
</behavior>


This will display verbose / detailed error messages of your WCF service.

March 4, 2016

PowerShell 4.0 GetEnumerator not working if array variable name length > 20 chars

Problem

Was going about my daily PowerShell (4.0) life and run into issue where the following script didn’t output any rows.

$moduleSiteCollections = @{
    'Field Intelligence' = 'fi';
    'News Feeds' = 'nf';
    'Key Developments' = 'kd'
}
foreach ($sitecoll in $moduleSiteCollections.GetEnumerator()) {   
    Write-Host $($sitecoll.Value)
}

Solution

If the length of the name of the variable holding the array is longer than 20 characters, GetEnumerator won’t return any results, so reduce variable name to 20 characters or less. Or use PowerShell 5.0.

The following script works fine.

$moduleSiteCollection = @{
    'Field Intelligence' = 'fi';
    'News Feeds' = 'nf';
    'Key Developments' = 'kd'
}
foreach ($sitecoll in $moduleSiteCollection.GetEnumerator()) {   
    Write-Host $($sitecoll.Value)
}