Sunday, August 27, 2017

SPJS Charts – automatic dashboard builder

In the previous article in this “series” I showed how you can create your own dashboards by manually writing the HTML code and store it in a custom list.

This proved to be a bit to complicated and I have now created a dashboard builder where you can specify a layout from one to four columns and as many rows as you like (please note that adding multiple charts to one page will make the page slower to load).

To use this tool, you must have the SPJS Charts solution already installed, and you must have set up the custom list as described in the previous article – linked in the top of this article.

Create a web part page and add the main SPJS Charts v6 loader web part to the page like described here. Then get the file “DashboardSelectorAndBuilder.zip” from here, and add it to a script editor web part (unzip first)  in the same web part page.

Alternatively you can store this code (after you unzip it) in a document library and link to the file in a ContentEditorWebPart (CEWP).

 Your page should then look like this:

Click “Add new” to name your new dashboard and select the number of columns:

Then add the charts from the collection of charts you have already created in this site:

Build your dashboard by adding charts and optionally inserting a header text / HTML:

Hit “Save” and reload the page. Select your new dash from the dropdown:

Let me know in the comments or in the forum if you have any questions.

Alexander

 


by Alexander Bautz via SharePoint JavaScripts

Friday, August 25, 2017

SPJS Charts – create dashboards that can be selected from a dropdown

By request I have created an example code snippet that can read a list of pre-configured dashboards that are stored in a custom list.

I first thought about letting the user save a dashboards based on the charts selected from the dropdown select in the example file “loadAllChartsFromDropdown.html” that I added to the download package on August 22. I changed my mind and chose to let a super-user add this as HTML in a custom list. The reason for this is that you can put the charts in a table layout to have them side-by-side and possibly add some text / HTML in between the charts.

Step one

First add the main SPJS Charts v6 loader web part to the page like described here.

Then add a custom list named “SPJSChartDasboards” (this name is hard-coded in the example html file so don’t get creative and change the name).

Add one additional field named “HTML”. This field should be of type “Multiple lines of text – Plain text”.

Add your first example dashboard like this:

Add the ID of your chart where I have highlighted in yellow. You find this ID in the chart you have configured in another page in this site like this:

Step two

Create a web part page and add a script editor web part with the code snippet from the file “DashBoardSelector” downloaded here.

Alternatively you can store this code(after you unzip it) in a document library and link to the file in a ContentEditorWebPart (CEWP).

Your page will look like this after you have added the script:

Select your dashboard, and watch the charts being drawn in the page.

Another example dashboard

If you like to have for example four charts in a table, use this format (normal HTML table):

Here is the HTML – replace “ID_CHART_X” with your actual chart ID.

<table cellpadding="10" cellspacing="0" style="width:1000px;">
 <tr>
 <td valign="top">
 <div class="spjs_chartPlaceholder" id="ID_CHART_1">
 </td>
 <td valign="top">
 <div class="spjs_chartPlaceholder" id="ID_CHART_2">
 </td>
 </tr>
 <tr>
 <td valign="top">
 <div class="spjs_chartPlaceholder" id="ID_CHART_3">
 </td>
 <td valign="top">
 <div class="spjs_chartPlaceholder" id="ID_CHART_4">
 </td>
 </tr>
</table>

Let me know in the comments or in the forum if you have any questions.

Alexander

 


by Alexander Bautz via SharePoint JavaScripts

Setting Up Anonymous Registration Auto Approval Using a Domain Policy

Wednesday, August 23, 2017

Running SharePoint on Virtual Machines in Amazon

Amazon Web Services (AWS) cloud provides a suite of infrastructure services that enable you to deploy SharePoint Server securely, affordably, and with high availability. Running SharePoint Server on the AWS cloud gives you flexibility and agility, and you can fully customize and extend SharePoint for your business processes. Running servers within the Amazon cloud, comes at a cost for not just the servers but all processes that you run as part of the infrastructure.

read more


by via SharePoint Pro

SharePoint Vitals Review: Site Usage Reports and Analytics for SharePoint

Tuesday, August 22, 2017

SPJS Charts updated to v6.1.5.9

I have fixed a few bugs and added one new chart type. I have also added a new option to instead of loading the chart, render a button the user can click to show the chart. This may help on load time if you have many charts in one page.

See change log here

Please post any questions in the forum.

Best regards,
Alexander


by Alexander Bautz via SharePoint JavaScripts

Monday, August 21, 2017

Choosing a cloud model: SaaS versus PaaS

Over the past few years, things have changed in the collaboration space. Historically we were all On-premises and behind the corporate firewall, now however we either live in the cloud only world or the hybrid space.

read more


by via SharePoint Pro

Thursday, August 17, 2017

DFFS Package updated

I have released a new version of the DFFS package. You find the change log here and the files in the download section of the user manual.

Please post any comments in the forum.

Thanks to all that has provided feedback and tested the BETA.

Best regards,
Alexander


by Alexander Bautz via SharePoint JavaScripts

Monday, August 7, 2017

Configuring a Partitioned UPA in SharePoint 2016 with Active Directory Import

Introduction

For about a year now I’ve been plagued by people asking me how to configure a partitioned User Profile Application (UPA) in SharePoint Server 2016, and perform successful profile import using Active Directory Import (ADI). Every few weeks someone asks for the configuration, and it basically got to the point where it made sense to post this article to which I can refer folks.

Now, I am not going to provide all up coverage here. I expect you to be familiar with the fundamental concepts of SharePoint Multi-Tenancy. You can head over to my other articles here (2010), here (2013), and on TechNet for that information. All I am going to do in this article is outline the changes in the configuration of the UPA and ADI because of the removal of UPS from SharePoint 2016. I’ll also point out a couple of significant gotchas which are imperative to plan for.

Having said that, it would be remiss to not state categorically that multi-tenancy is absolutely NOT something most customers should be doing. Neither I, or Microsoft, recommend this deployment approach in any way whatsoever because virtually no one has the time, money or expertise to implement all of the things out with the SharePoint product which are necessary to be successful. Indeed, one of the most significant non-Microsoft deployments of multi-tenant SharePoint which used to exist, no longer does – mainly because that vendor decided it was not worth it. You’ve been warned.

 

What’s different about SharePoint 2016?

Only one thing basically, but it’s a significant element. As you will be aware User Profile Synchronization (UPS) is no longer part of SharePoint Server. In 2010 and 2013 UPS was used to perform profile synchronization with a partitioned UPA. This was the canonical and recommended deployment approach.

We set up a directory structure that looked something like this:

image

A “base” OU (in this case Customers) which included a OU per tenant. We then configured UPS to sync with the base OU, and it used the SiteSubscriptionProfileConfig to match up each tenant to the child OUs using a simple string match.

As UPS is no longer available, we must use Active Directory Import to perform synchronization. For a long time during pre-release versions of SharePoint 2016, it was not possible to configure this due to a bug. This lead to statements such as “sync with a partitioned UPA is not supported”. This was never the case, and it was simply a few bugs that were resolved with the RTM of the product.

On the face of it pretty simple. However, there is some “interesting” configuration required in order to get things working correctly, and also extremely important planning considerations around how you manage synchronization operations which were not present in previous versions.

 

What’s the same as previous versions?

Pretty much everything. Creating Site Subscriptions, their Tenant Administration sites and provisioning initial member sites is identical. We don’t need change our tenant provisioning scripts in this respect.

Just like previous versions we need to tell the UPA about these new Subscriptions as they are created. If we browse to a Tenant Administration site, and click the Manage User Profile Application link we will see the following error.

clip_image002

clip_image004

This is totally expected at this point, and is no different from SharePoint 2010 or 2013, except for the rendering of the “modern” access denied experience :). This is basically one of these generic “access denied” exceptions which bubbles up and causes this rather lame UI. What actually is the case at this stage is that the UPA has no Subscriptions (Tenants) and therefore it is impossible to display this page. If we look at the UPA, we can see there are no Subscriptions (Tenants in UPA terminology!) configured.

clip_image006

We add the new Subscription to the UPA in the exact same way we did with previous versions, using Add-SPSiteSubscriptionProfileConfig. It’s worth pointing out that prior to RTM of SharePoint Server 2016 there was a bug which prevented this command from succeeding. This was fixed for RTM. We pass in a
-SynchronizationOU which is a STRING not a DN. In a real deployment, we would also pass in the configuration for the MySites. For example:

# Add this subscription to the Partitioned UPA
$UpaProxyName = "User Profile Service Application Proxy"
$MemberSiteUrl = "http://ift.tt/2uBunQJ"
$TenantSyncOU = "Oracle"

$Sub = Get-SPSiteSubscription $MemberSiteUrl
$UpaProxy = Get-SPServiceApplicationProxy | Where-Object {$_.Name -eq $UpaProxyName}

Add-SPSiteSubscriptionProfileConfig -Identity $Sub -SynchronizationOU $TenantSyncOU `
                                -MySiteHostLocation "$MemberSiteUrl/my" `
                                -MySiteManagedPath "$MemberSiteUrl/my/personal/" `
                                -ProfileServiceApplicationProxy $UpaProxy

Once that is complete, we can see the Subscription (Tenant) has been added to the UPA:

clip_image008

And if we go ahead and click Manage User Profile Application from Tenant Admin, we no longer see the request access screen and we can view the profiles and so forth as expected:

clip_image010

So now we have the Partitioned UPA configured, and added our Subscription to it. We would of course provision more than one subscription. Everything we have done up till now is identical to how it was done with SharePoint 2010 and 2013.

 

Configuring Synchronization Connections

Now we need to actually deal with getting profiles into these “partitions” of the UPA. In theory, we could use the Central Administration UI to add a new synchronization connection, hook that up to the Customers OU, then perform a sync. In theory. In practice, creating Synchronization Connections for a Partitioned UPA does not work, and is 100% unsupported.

If we try to configure using the UI and then go back and edit the connection, we will see that the changes are not persisted within the container selection. Yes, really. This is “by design”.

More importantly however, sync runs won’t work – with no profiles being imported to the UPA. We will see something similar to this in the ULS:

UserProfileADImportJob:ImportDC -- Regular DirSync scan: successes '0', failures '0', ignored '113', total duration '21', external time in Profile '0', external time in Directroy '16' (times in milliseconds)

Check out the spelling of “directroy” at the end of that trace log! :) Wicked!

In order to create our connections, we MUST use the currently undocumented online and rather esoteric Add-SPProfileSyncConnection PowerShell cmdlet. But it’s not that straightforward, as multi tenancy brings along a specific pattern to its usage.

Now, this cmdlet has a chequered history with a lot of problems. Some of those (such as the ability to exclude disabled accounts) have been fixed in SharePoint 2016. But it is important to note the behaviour of the cmdlet – which is counter to all PowerShell naming and best practices – will be confusing.

With UPS we used to add one container to the Sync connection, (e.g. Customers). With ADI we must add one container for each subscription we wish to sync. (e.g. Microsoft, Oracle, Amazon). We can NOT use a single container.

The PowerShell below creates an initial sync connection using the OU for one of the subscriptions.

$UpaName = "User Profile Service Application"
$ForestName = "fabrikam.com"
$DomainName = "FABRIKAM"
$AdImportUserName = "spupi"
$AdImportPassword = Read-Host "Please enter the password for the AD Import Account" -AsSecureString
$SyncOU = "OU=Microsoft,OU=Customers,DC=fabrikam,DC=com"

Add-SPProfileSyncConnection -ConnectionSynchronizationOU $SyncOU `
                            -ConnectionUseDisabledFilter $True `
                            -ProfileServiceApplication $Upa `
                            -ConnectionForestName $ForestName `
                            -ConnectionDomain $DomainName `
                            -ConnectionUserName $AdImportUserName `
                            -ConnectionPassword $AdImportPassword

Note that the -ConnectionSynchronizationOU is a DN. Note also that the -ConnectionUserName must not include DOMAIN\ - it’s merely the username itself.  Don’t ask! It’s what it is.

Once we have done this we can go ahead and perform a Synchronization run and the profiles for the Microsoft subscription will be imported into the Microsoft partition of the UPA.

To add other subscriptions, we repeat the use of Add-SPProfileSyncConnection, once for each additional subscription. Whilst it’s called Add- what is actually happening here is the existing profile connection is being updated to include the additional containers.

$SyncOU = "OU=Oracle,OU=Customers,DC=fabrikam,DC=com"
Add-SPProfileSyncConnection -ConnectionSynchronizationOU $SyncOU `
                            -ConnectionUseDisabledFilter $True `
                            -ProfileServiceApplication $Upa `
                            -ConnectionForestName $ForestName `
                            -ConnectionDomain $DomainName `
                            -ConnectionUserName $AdImportUserName `
                            -ConnectionPassword $AdImportPassword

$SyncOU = "OU=Adobe,OU=Customers,DC=fabrikam,DC=com"
Add-SPProfileSyncConnection -ConnectionSynchronizationOU $SyncOU `
                            -ConnectionUseDisabledFilter $True `
                            -ProfileServiceApplication $Upa `
                            -ConnectionForestName $ForestName `
                            -ConnectionDomain $DomainName `
                            -ConnectionUserName $AdImportUserName `
                            -ConnectionPassword $AdImportPassword

$SyncOU = "OU=Amazon,OU=HR,OU=Customers,DC=fabrikam,DC=com"
Add-SPProfileSyncConnection -ConnectionSynchronizationOU $SyncOU `
                            -ConnectionUseDisabledFilter $True `
                            -ProfileServiceApplication $Upa `
                            -ConnectionForestName $ForestName `
                            -ConnectionDomain $DomainName `
                            -ConnectionUserName $AdImportUserName `
                            -ConnectionPassword $AdImportPassword

Now when we run another Full Import, all subscriptions will get the appropriate profiles imported.

At the end of the day, we get a number of Subscriptions (tenants) and a bunch of profiles in each:

image

And that’s all there is to it…. Kind of… Sort of…

 

Implications

 

There are a couple of BIG considerations with this approach to be aware of. You will have to manage this stuff – or build tooling to manage it. If you get it wrong, then the wrong objects will be in the wrong tenants, and that’s not good.

Firstly, there is no way to easily manage the sync connection. You can’t use the UI to add/remove containers. It’s all PowerShell. Remove-SPProfileSyncConnection works just fine. But you have to match up exactly what you want removed, and you must always include the same connection and credential parameters with every call. If you accidentally mess up the connection, say by removing a container – then those objects will no longer be synced. We don’t have a Get-SPProfileSyncConnection – although you could build one “easily” enough.

Secondly, and more importantly, even thou we are adding a DN of a container to the sync connection – it is only for initial configuration – it serves no purpose during sync operations. Consider the following domain structure. See all those Microsoft OUs scattered around – all three of them? See that Amazon OU which is not within the Customers OU?

image

When we perform a sync, all of the objects within ALL of the Microsoft OUs will be imported to the Microsoft partition of the UPA! Yes, really! And the Amazon OU, even thou it’s not in the customers OU will also be imported. If we had two Amazon OUs, they would both be imported.

The only thing that governs whether a container is parsed is the configuration using Add-SPSiteSubscriptionProfileConfig. If this name matches, wherever it is in the domain, it will be synced. Remember we CANNOT use a DN for this value, it must be a string.

The addition of a DN using Add-SPProfileSyncConnection of one container whose name happens to be the same as that within the SiteSubscriptionProfileConfig is merely the trigger to make ADI aware of it. It doesn’t actually matter where it is as long as one or more CN=Foo matches up to a Foo in the SiteSubscriptionProfileConfig.

This is extremely important.

It means we actually have much more flexibility in our domain structure – something which many hosters asked for – although this is not why it’s like this :).

However, it also means it can get quite confusing and very dangerous. It means that using customer names for OUs might not be the smartest move – you really need to think through which structure best fits your needs, and be totally aware of the implications should you have many OUs with the same name as part of the solution. You must be really on top of planning and governing the AD used for your profile import in hosting scenarios.

None of this is of course how it should be. But it is how it is. And hopefully the explanation above helps those of you whom are looking to implement hosting scenarios with SharePoint 2016.

Ahh, the joys of user profile sync. Peace and B wild. May U live 2 see the dawn.


by Spence via harbar.net

Lanteria HR referral program – will you participate?

Community Blast Provided and Sponsored by Lanteria. This information was provided by vendor for community education on the Lanteria HR referral program

We’ve already told you about Lanteria HR – the SharePoint based software that is helping companies automate their HR management. In short, instead of reinventing the wheel, a company can implement this ready-to-use software tailored to the needs of HR. You can view some of the reviews done by Vlad on his blog:

Right now, Lanteria HR offers a referral partner program. We’ve noticed that most of our new clients want to thank the people who recommended our product, and thus we’ve decided to encourage and motivate our brand advocates to spread the word.

Lanteria HR

How much can you earn?

Let’s take a story about a totally fictional SharePoint consultant named Jeremy. Jeremy is a dedicated reader of this blog and a SharePoint specialist. He is an independent consultant who works with a horticulture goods company from Cleveland. There are five hundred employees in the company providing Ohio with potting soil and various fertilizers. They use SharePoint for almost everything as their seasonal business requires the fastest and the most efficient solution.

So, Jeremy suggests they improve their HR processes by using Lanteria HR. The total cost of the license fee, implementation and first-year maintenance and support for a company of their size is $65,542. The referral commission is 10% of total project cost, which means that Jeremy will get roughly $6,500. Jeremy spends it on a trip to Europe.

So how do I join?

For many companies, choosing a new software solution may take weeks and even months in some cases. But the reason they choose our software was your recommendation, and we respect that. So every time you say “Hey, why don’t you save some time and use Lanteria HR for that?”, don’t forget to submit a lead at the Lanteria partner portal to obtain a referral number for this potential client. Then you can earn big! Click the logo below to go to the new Partner Portal and learn more!

Lanteria HR referral program

The post Lanteria HR referral program – will you participate? appeared first on Absolute SharePoint Blog by Vlad Catrinescu.


by Vlad Catrinescu via Absolute SharePoint Blog by Vlad Catrinescu

Thursday, August 3, 2017

Notes from the field: eDiscovery within Office 365

You may or may not know that recently an update was made to the Data Loss Prevention and eDiscovery features within Office 365.

read more


by via SharePoint Pro

Customize ExCM's Responsive Sign-in Page

Want a great looking extranet portal without hiring a graphic designer and web developer? So do we! If you figure out how, let us in on the secret. Until that is possible, we can give you a few tips on turning your default responsive page into a customized page. If you want something that looks professional, stop now and hire someone. If you just want to personalize the page with custom wording and maybe an image, we can help with that
 ExCM ships with an optional sign in page located here: /_layouts/spsolutions/excm/responsive/signin.aspx


After changing this setting you should see this new log in page if you browse to your extranet site:



Please note that the above image reflects the anonymous feature activated. (See the article on allowing anonymous users access to your extranet for further information.)
The first thing you need to do is make a copy of the existing page and place it in a new folder. We typically call this the "Organization Layout Directory" because it's simply creating a new folder under the "15\TEMPLATE\LAYOUTS" directory that we can use for customized pages.

Important Note:  The instructions below assume you are working in a SharePoint 2013 environment.  As such, the starting point for making the customizations is within the "15" folder at C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions.  If you are working in a SharePoint 2016 environment, everything will be exactly the same, but you will start at the "16" folder instead.
 You will need to navigate to the following:
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\TEMPLATE\LAYOUTS  (or the "16" folder for SharePoint 2016)

Once there, click on "New Folder" and name it, perhaps using your company's name or acronym. For this example, I will be working with ACME Co.


Next, you will need to make a copy of the existing page and place it in your new folder. To do so, navigate to:

C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\TEMPLATE\LAYOUTS\SPSolutions\ExCM\Responsive

Now, find the "SignIn.aspx" page and copy it:
 


After copying the page, paste it in the new Organization Layouts Directory (ACME in our example):
 


Now you can edit your page using Notepad, or another editor. The first thing we are going to change is the wording “sign in using:” To do so we need to search for Text="<%$Resources:excm,AuthProviders_SignInUsing %> 


We simply place the text we wish to appear in between the quotes. For our demo we will use “Acme users click below”
Once saved, we need to change the log in page to point to our new Acme folder

Then, we can browse out to the site and see the change has been made.

If you think that is still not enough and you need to change the wording of the button, you can do so. Just a few more lines down you will find the text Text='<%# DataBinder.Eval(Container.DataItem, "ClaimProviderName") %>'. Replace everything in the quotes with the text you want to appear.

Browse out to the site and see your new button text;

But that is all the simple stuff, what if we want to get fancy with it. Lets add an image or change some colors… where do we go for that? This page was built so that anyone with web design experience could easily work with and build a great looking page. So, if you really want a snazzy portal, I suggest you find yourself a designer and ask them to help. With the way this custom page was built, it should be very easy for them to get you the desired look in no time and it be done the correct way.
For now, we will show you how to add an image with some simple HTML. If you wanted to add an image just above the “Acme users click below” text, you can navigate to the section of the page just above the “Acme users click below” line and add the following line of text;

My image is sitting in the 15/template/images folder and thus my image source points to my desired image.
Now, when I browse out I should see an image

In short, we offer a great page that has been designed so that a professional designer could make quick work with customizing your entry page and it will be able to fit the size of any device that browses out to the page. However, if you want to make some quick edits, you should be able to do so with these instructions.

by noreply@blogger.com (Johnathan Horton) via SharePoint Solutions Blog

The tool was unable to install Web Server (IIS) Role – SharePoint 2016 on Windows Server 2016

While I was doing a SharePoint 2016 install at a customer, I got hit by the The tool was unable to install Web Server (IIS) Role error when trying to install the SharePoint 2016 prerequisites on a Windows Server 2016.

The tool was unable to install Web Server (IIS) Role

I know back in SharePoint 2013 this happened a lot, and there was a support article for it called The Products Preparation Tool in SharePoint Server 2013 may not progress past “Configuring Application Server Role, Web Server (IIS) Role”. This article gave us the following PowerShell cmdlets to run, that would basically install some of the features and roles that SharePoint Needs.

Add-WindowsFeature NET-WCF-HTTP-Activation45,NET-WCF-TCP-Activation45,NET-WCF-Pipe-Activation45

Add-WindowsFeature Net-Framework-Features,Web-Server,Web-WebServer,Web-Common-Http,Web-Static-Content,Web-Default-Doc,Web-Dir-Browsing,Web-Http-Errors,Web-App-Dev,Web-Asp-Net,Web-Net-Ext,Web-ISAPI-Ext,Web-ISAPI-Filter,Web-Health,Web-Http-Logging,Web-Log-Libraries,Web-Request-Monitor,Web-Http-Tracing,Web-Security,Web-Basic-Auth,Web-Windows-Auth,Web-Filtering,Web-Digest-Auth,Web-Performance,Web-Stat-Compression,Web-Dyn-Compression,Web-Mgmt-Tools,Web-Mgmt-Console,Web-Mgmt-Compat,Web-Metabase,Application-Server,AS-Web-Support,AS-TCP-Port-Sharing,AS-WAS-Support, AS-HTTP-Activation,AS-TCP-Activation,AS-Named-Pipes,AS-Net-Framework,WAS,WAS-Process-Model,WAS-NET-Environment,WAS-Config-APIs,Web-Lgcy-Scripting,Windows-Identity-Foundation,Server-Media-Foundation,Xps-Viewer

When trying to run this on Windows Server 2016, we get this error: Add-WindowsFeature : ArgumentNotValid: The role, role service, or feature name is not valid: ‘Application-Server,AS-Web-Support,AS-TCP-Port-Sharing,AS-WAS-Support,AS-HTTP-Activation,AS-TCP-Activation,AS-Named-Pipes,AS-Net-Framework’. The name was not found.

The tool was unable to install Web Server (IIS) Role

That is because the Application-Server role has actually been deprecated from Windows Server 2016. Some of its features have been added to the WAS role. The correct cmdlet you need to run for a Windows Server 2016 installation is :

Import-Module ServerManager

Add-WindowsFeature Net-Framework-Features,Web-Server,Web-WebServer,Web-Common-Http,Web-Static-Content,Web-Default-Doc,Web-Dir-Browsing,Web-Http-Errors,Web-App-Dev,Web-Asp-Net,Web-Net-Ext,Web-ISAPI-Ext,Web-ISAPI-Filter,Web-Health,Web-Http-Logging,Web-Log-Libraries,Web-Request-Monitor,Web-Http-Tracing,Web-Security,Web-Basic-Auth,Web-Windows-Auth,Web-Filtering,Web-Digest-Auth,Web-Performance,Web-Stat-Compression,Web-Dyn-Compression,Web-Mgmt-Tools,Web-Mgmt-Console,Web-Mgmt-Compat,Web-Metabase,WAS,WAS-Process-Model,WAS-NET-Environment,WAS-Config-APIs,Web-Lgcy-Scripting,Windows-Identity-Foundation,Server-Media-Foundation,Xps-Viewer –Source D:\sources\sxs

And make sure to replace the D:\sources\sxs to the actual path of your sources file. The sources file is on your Windows Server 2016 installation media, and you need to specify it and have it mounted on your computer (or copied somewhere) for the prerequisite install to work properly! Everything should work properly afterwards to run the prerequisite installer! In theory, a reboot is not needed, but I always prefer to do one after activating that many features just in case!

The post The tool was unable to install Web Server (IIS) Role – SharePoint 2016 on Windows Server 2016 appeared first on Absolute SharePoint Blog by Vlad Catrinescu.


by Vlad Catrinescu via Absolute SharePoint Blog by Vlad Catrinescu