I noticed that accidentally that by default CM application uses http not https – at least when we use installation scripts for on-premise XP0 topology.
Because I wanted to add https to my website I asked myself – “how can I do that EASILY?” I do not know how about you – but I hate to play with certificates on my local machine – very often it means many lost hours which I could spend on development of new features.
To achieve that I checked how Sitecore create and install certificates inside their scripts and I found the following task:
It took me few minutes to find final list of attributes which should be set to add certificate acceptable by services like identity server or xconnect. Final version is here:
Invoke-AddWebFeatureSSLTask -Hostname sc910.sc -SiteName sc910.sc -Port 443 -ClientCertLocation LocalMachine -OutputDirectory "C:\certificates" -RootDnsName "DO_NOT_TRUST_SitecoreRootCert" -RootCertName "root-authority"
HostName and SiteName should be values used by your website (check it in IIS configuration if you are not sure). Output directory is a place where you store your certificates. The rest of the parameters I would leave unchanged because they use default values from Sitecore’s installation scripts.
As a result of this task you should see:
- new certificate file
- new certificate registered in IIS
- new binding added to your website
Because Identity Server uses http by default – please remember to update its configuration. If you do not do that – you will not be able to log in into Sitecore instance.
More details about that you will find here.
In this part of PowerShell topic I will show you how to create IIS website and unzip Sitecore into the new site directory.
Set site name
Before we will do a real job we have to define name of our new site. We can ask user in console to set the value. This code will prompt for name:
As result we will have name saved in variable $nameProvidedByUser.
Because we have to add new ApplicationPool, create new IIS Site, sometimes also override some values in confiugration – it is better to stop our local instance of IIS before we will start.
We can do this with script:
After that definition we have to just call our function with command “IIS–Stop”
Do some real work – define/copy/run
Ok, for now we have defined name and stopped IIS instance. We are ready to do some real work.
Run following command and at the end you will have ready to work IIS site and copied Sitecore files inside web root.
We have here code for:
- unpacking ZIP files
- changing the structure of unpacked files
- creation of IIS AppPool
- creation of IIS Site
- creation of settings for bindings
But what exactly this command will do? Here you have explanation.
Inside this block of code we use some functions which were prepared before.
Add host to Windows file
If we want to define new site in our environment we also should add new definition in windows hosts file. We can do this with following script:
Because we have in plan to stop our IIS we also should have a script to start it again.
We can do this with following function:
Select version of Sitecore
Probably you will have more than one version of Sitecore in your files system – it means that would be nice to have an option to select which version of Sitecore should be copied into our web root. We can provide that feature with code:
In next part of PowerShell fun I am going to refactor code and set some settings like:
- database connection strings
If you want to check how current version works you can checkout (and later also participate) code from my public repository on GitHub : PowerShell-automation
I have decided to prepare some PowerShell scripts to automatize my work with Sitecore. In this and next articles with PowerShell in the name, you will find some resolved issues and some useful scripts as well.
As you can noticed in the title – I wrote PowerShell not Powershell or powershell or anything else. You should also remember about correct name.
I do not know if you noticed how people very often write Sitecore in the wrong way. I mean examples like “SiteCore” – looks strange right?
That is why we should care about details.
Prepare your system to run PowerShell scripts
After some fun with inline PowerShell scripts you probably will decide to create your first file with PowerShell script. Then probably you will have following error:
File XXX cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=135170.
It means that you do not have enough permissions to run PowerShell scripts. You have to change that, for instance with following command (remember to open PowerShell Terminal in Administrator mode):
More about options you can find here: https://msdn.microsoft.com/powershell/reference/5.1/Microsoft.PowerShell.Core/about/about_Execution_Policies
To write/manage your PowerShell scripts you can use many tools. I have chosen Visual Studio Code. It’s simple, it’s for free and when you install PowerShell Extension it will have IntelliSense.