Making a GUI with Powershell Studio to run cmrcviewer.exe with logging

 

 

I did a blog post few weeks back talking about how to do logging with Cmrcviewer and powershell (Here)

That works great but if you intend to give it to someone else for example help desk you might wanna consider to make GUI for it instead of having a powershell-prompt running all the time and that’s exactly what i want to showcase on how to do a simple GUI with the help of Powershell Studio 2016 from SAPIEN. I’ve been using Powershell studio for almost a year now when i need to make a GUI and i really like how simple it is as soon as you understand how its works. They have a 45-day trial version where you can try it out with some limitations but i highly recommend you try it out.

 

 

 

Until next time, cheers Timmy !

You can find me over at

#cmrcviewer-exe, #gui, #powershell, #powershell-studio, #sapien

Cmrcviewer logging with powershell

 

 

A while back a user on reddit in the/R/SCCM section asked a question regarding Cmrcviewer.exe and if it was possible to see the history of the connections you had made since the user always forgot to write down which IP or Computer name he was connecting to. You can find the post here tho the users question has been deleted, the answers are still there. The user also wanted it to be persistent so he didn’t had to open a new powershell session every time so thanks to /U/BIGINIME for answering that.

 

A simple solution i came up with for solving this problem was to write a powershell script that launched Cmrcviewer.exe and which also created a .log file with Date/Time and computer name for each connection.

 

The Script

 

While (1 -eq 1)
{

$Computername = read-host "Enter Computer name"
$logpath = "C:\cmrcviewer.log"
$CmRcViewer = "C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe"  

if ($Computername -ne $Null) 
{ 
    & $CmRcViewer $Computername $date = Get-Date Out-File -FilePath $logpath -InputObject "$date - $Computername" -Append 
}   
} 

The only changes you need to do is to the 2 variables $logpath if you want another path and to $Cmrcviewer where you need to specify where the Cmrcviewer.exe is located.

 

Process

 

First of all save the powershell script to a .ps1 file and start with right clicking on it and choose “Run with powershell”

 

3

 

Enter computer name or IP to which computer you want to connect to in to the powershell window and press enter

 

4

 

From there cmrcviewer.exe will start and the log file will update

5

6

 

Until next time, cheers Timmy !

 

You can find me over at

 

 

#todo

Beginner Guide – How to populate device collection with the help of AD groups

 

I’ve wanted to try out and make guides in a video format for some time and mainly because some things is easier to show in a video and takes less time to prepare compared to writing a full blog post about it. So this is my first attempt and i will definitely changes some things for the next ones. It’s all trial and error and my first youtube video ever.

 

What do we want achieve?

We want to be able to link Active directory groups directly to Device collections so if we add a computer to a Active Directory group it will sync and then be added to the Device collection we linked the AD group with. It’s very simple and here’s how its done:

 

 

here’s the WQL-query mentioned in the guide

 


select SMS_R_SYSTEM.ResourceID,SMS_R_SYSTEM.ResourceType,SMS_R_SYSTEM.Name,SMS_R_SYSTEM.SMSUniqueIdentifier,SMS_R_SYSTEM.ResourceDomainORWorkgroup,SMS_R_SYSTEM.Client

from SMS_R_System

where SMS_R_System.SecurityGroupName = "COMPANY\\Special group"

 

 

Don’t forget to follow me on

Cheers,  Timmy

 

Event – SCUG.SE Enterprise client day Oct 2016

scug-se

 

On the 27th of October, System Center user group Sweden (www.scug.se) organized a day filled with great speakers with the focus on Clients. The day before they also had an event but with focus on Cloud and Datacenter with MVP speakers like Mikael Nyström, Stefan Schörling, Markus Lassfolk and more. I wasn’t able to join on the 26th because i was in London at the time and since i wasn’t there i can’t really talk about how it was on the Cloud and Datacenter day but I’m betting it was as awesome the Enterprise Client day 😉

 

The event was held at Microsoft’s Kista office in Stockholm, Sweden.  at 08:00 MS opened there doors and registration began for all the attendees.
20161027_080816

 

The day started out with Stefan Schörling and Jörgen Nilsson greeted everyone welcome, I’m not sure how many there attendees there were but my guess would be around 30-40 people in total.

After the introduction a short discussion about the new Windows update patch model was brought up and the importance of starting to test it out asap since that model will be applied for more products then just Windows 7 in the near future. If you aren’t aware of the new patch model with cumulative updates  you can find more info about it over at

https://blogs.technet.microsoft.com/windowsitpro/2016/08/15/further-simplifying-servicing-model-for-windows-7-and-windows-8-1/

 

1

2

 

Next up was one of the Sponsors Shavlik. Guido talked about 3rd party Patch Management and there and their plugin to ConfigMgr that will help you deploy 3rd party SUP’s from ConfigMgr.

http://www.shavlik.com/

 

3

 

 

Jörgen Nilsson and Johan Schrewelius was next and they showed off how they do Windows 10 deployments for customers and what pitfalls one should try to avoid. Windows 10 update analytics on how to use this free tool from MS. They also showed off a neat OSD background application that Johan created to be able to keep track of the deployment on the machine and being able to access variables and logs without having “Enabled command support” enabled on your boot image in a production state since its only supposed to be used in testing and not during rollout because it makes it possible to get access to variables that contains certain passwords in plane text. You can find more about that tool over at http://ccmexec.com/2016/10/configuration-manager-osdbackground/

 

They also talked about how they are using webservices for certain tasks in the Task sequence instead of having a script in side the TS. More info here http://ccmexec.com/2016/10/web-service-for-os-deployment-sccm-configuration-manager-current-branch/
4 5 6

 

Next speaker to the stand was Microsofts own Björn Axell who talked about “Building Secure Mobility with conditional Access”. He showed off some examples on what you could do like having certain rules being applied depending if a users was on premise or not.

 

7 8

 

Jörgen Nilsson was back again and talked about what the most important features and changes made since the 1602 release and onward.

 

9

 

T-shirts and powerbanks were handed out as well, either to people who asked good questions or gave the correct answer to a question aimed for the audience. And after that it was time for Lunch.

 

10

 

After lunch it was another sponsors turn and that was Flexera Software, Patrick Jaspers talked about Patch Management integration with ConfigMgr and vulnerabilities. I wrote about Flexera or previously Sectunia in my blog post about Scug.no Client Management day back in august you can read it here https://timmyit.com/2016/08/24/event-scug-nos-enterprise-client-management-event-at-microsoft-in-norway/

One interesting side note which i didn’t know was that Flexera was the one who created InstallShield http://www.flexerasoftware.com/producer/products/software-installation/installshield-software-installer/

 

 


11 12

 

And guess who entered the stage yet again, Mr Jörgen Nilsson who this time talked about “Customizing Windows 10 for the enterprise”. Working with new GPO’s, DISM and XML-files  to be able to achieve different results. He also mentioned the importance of configuring Event forwarding” in Win10 to ConfigMgr and also brought up that enterprises need to get away from IE11 since all the new features only applies to Edge from now on.

 

13 14 15

 

Nicolaj Andersen was next with the talk about “Device and application Management in a modern world” with the focus on mobile devices and Intune. He talked about MAM-Policies and also a bit about how he think Application management will be in the future when more and more gets in to the cloud.

 

16

 

Last but not least was Stefan Schörling and Mattias Borg talked and showed off “Securing your Clients against modern Threats” where they showed how an attack could look like and how hackers would be able to get credentials to your environment. They also talked about how one can mitigate threats like that and what things to think about.

17 18

 

It was a long day over at Microsoft for sure but it was a blast.  It’s always fun to listen to people who are very passionate about what they do and also people who has very deep knowledge in their area of expertise. I have probably forgot to mention a bunch of stuff that happen that day but hopefully this will give you a short summery. Thanks to all the sponsors, Microsoft, All the awesome speakers and of course SCUG.SE for making this event happen and i hope there’s lots more to come.

 

Until next time, Cheers Timmy

 

Alternative workaround if SUP Endpoint definition deployment fails

 

There will come a day when something isn’t working as it should any more, when that day arrives  we have to be able to estimate the situation and also preparing to do the necessary action to solve it. A big part of our job as administrators is to solve problems and come up with solutions. One important thing to always consider when troubleshooting something is if there’s another way to achieve the same result but in a different way then what just broke, finding a temporary workaround until you figured out what the actual cause of the problem is and how to fix it.

In this scenario we are playing with the idea that ADR is broke or just that Endpoint protection definitions aren’t being deployed successfully any more and after some brief troubleshooting one realize that i will probably take some time until the cause of the problem is found. What do you do in the mean time?

 

Goal

We wan’t to have a alternative way of being able to get the latest Endpoint Protection definitions and deploy them to all the machines needed on a set schedule so we can get the same result as if the ordinary Definition deployment was working properly.  We will do this with the help of ConfigMgr, Powershell and Schedule Task’s.

 

In ConfigMgr we will make a package containing the latest definition being deploy and with Powershell we will get the latest definitions and then update the package source files when there’s new one and we will make a Schedule task for this Powershell script to 3 times a day, every 8 hours.

 

The Script


# Configuration and variables 

[String]$SourcePath = "D:\Packages\Endpoint Definitions"
$DeploymentPackage = ("Endpoint Definition Delta x64" ,"Endpoint Definition Delta x86")

[String]$FullDefExe = "mpam-fe.exe"
[String]$DeltaDefExe = "mpam-d.exe"
[String]$NisDefExe = "nis_full.exe"

[String]$SCCMmodule = "D:\program Files\Microsoft Configuration Manager\AdminConsole\bin\ConfigurationManager.psd1"
Import-Module $SCCMmodule
# Creating folder structure 

$Allpaths = "$Sourcepath\x64\Full", "$Sourcepath\x64\Delta", "$Sourcepath\x64\Nis", "$Sourcepath\x86\Full", "$Sourcepath\x86\Delta", "$Sourcepath\x86\Nis"
Foreach ($Paths in $Allpaths)
{
If (Test-Path "$Paths")
{}
Else
{New-Item -Path $Paths -ItemType Directory}
}

# Downloading Updates

$Fullx64 = ("http://go.microsoft.com/fwlink/?LinkID=121721&clcid=0x409&arch=x64", "$($SourcePath)\x64\Full\$FullDefExe")
$Deltax64 = ("http://go.microsoft.com/fwlink/?LinkId=211054", "$($SourcePath)\x64\Delta\$DeltaDefExe")
$Nisx64 = ("http://go.microsoft.com/fwlink/?LinkId=197094", "$($SourcePath)\x64\Nis\$NisDefExe")

$Fullx86 = ("http://go.microsoft.com/fwlink/?LinkID=121721&clcid=0x409&arch=x86", "$($SourcePath)\x86\Full\$FullDefExe")
$Deltax86 = ("http://go.microsoft.com/fwlink/?LinkId=211053", "$($SourcePath)\x86\Delta\$DeltaDefExe")
$Nisx86 = ("http://go.microsoft.com/fwlink/?LinkId=197095", "$($SourcePath)\x86\Nis\$NisDefExe")

$WebClient = New-object System.Net.WebClient

$WebClient.DownloadFile($Fullx64[0], $Fullx64[1])
$WebClient.DownloadFile($Fullx86[0], $Fullx86[1])

$WebClient.DownloadFile($Deltax64[0], $Deltax64[1])
$WebClient.DownloadFile($Deltax86[0], $Deltax86[1])

$WebClient.DownloadFile($Nisx64[0], $Nisx64[1])
$WebClient.DownloadFile($Nisx86[0], $Nisx86[1])

#Update distrubution point with latest patches, don't forget to modify the Set-location to the correct Site code 

Set-Location TS1: 

Foreach ($Package in $DeploymentPackage)
{
Update-CMDistributionPoint -PackageName $Package
}

WordPress is messing with me and I’m not sure why. WP is adding what it looks like HTML characters to the variables containing URL’s “<a href=“but that’s only when i post the full script. Under the dissecting part it doesn’t. The characters does not appear in the in the Text editor at all. This is not the first time WP is adding unwanted characters in the code snippets but generally they appear while editing and can be removed manually but this time the chars doesn’t show up until its published and i cant remove it. If anyone have an idea how to fix this please let me know.

 

Here’s the code in plain text

 

$Fullx64 = ("http://go.microsoft.com/fwlink/?LinkID=121721&clcid=0x409&arch=x64", "$($SourcePath)\x64\Full\$FullDefExe")
$Deltax64 = ("http://go.microsoft.com/fwlink/?LinkId=211054", "$($SourcePath)\x64\Delta\$DeltaDefExe")
$Nisx64 = ("http://go.microsoft.com/fwlink/?LinkId=197094", "$($SourcePath)\x64\Nis\$NisDefExe")

$Fullx86 = ("http://go.microsoft.com/fwlink/?LinkID=121721&clcid=0x409&arch=x86", "$($SourcePath)\x86\Full\$FullDefExe")
$Deltax86 = ("http://go.microsoft.com/fwlink/?LinkId=211053", "$($SourcePath)\x86\Delta\$DeltaDefExe")
$Nisx86 = ("http://go.microsoft.com/fwlink/?LinkId=197095", "$($SourcePath)\x86\Nis\$NisDefExe")

 

Dissecting the script

 

We start out with these 2 variable’s you need to modify-

$DeploymentPackage you need change to the name of the Package you created that will be deployed (but you need to download the files before you create your package. More on that in the examples section)

$SourcePath is the actual path the source files. You just need to create the root folder and the script will create the rest.

 


$DeploymentPackage = ("Endpoint Definition Delta x64" ,"Endpoint Definition Delta x86")
[String]$SourcePath = "D:\Packages\Endpoint Definitions"

 

Next section needs only 1 change and thats

$SCCMmodule and that’s the path where you have installed SCCM and point to the ConfigurationManager.psd1 file that contains all the SCCM 2012 Powershell cmdlets.

 


[String]$FullDefExe = "mpam-fe.exe"
[String]$DeltaDefExe = "mpam-d.exe"
[String]$NisDefExe = "nis_full.exe"

[String]$SCCMmodule = "D:\program Files\Microsoft Configuration Manager\AdminConsole\bin\ConfigurationManager.psd1"
Import-Module $SCCMmodule

 

Next up is the creation of the sub folders in the source path you specified earlier in the $SourcePath variable and here’s no need for modification.

 


# Creating folder structure

$Allpaths = "$Sourcepath\x64\Full", "$Sourcepath\x64\Delta", "$Sourcepath\x64\Nis", "$Sourcepath\x86\Full", "$Sourcepath\x86\Delta", "$Sourcepath\x86\Nis"
Foreach ($Paths in $Allpaths)
{
If (Test-Path "$Paths")
{}
Else
{New-Item -Path $Paths -ItemType Directory}
}

 

The following section downloads the definitions to the correct folder.

 


$Fullx64 = ("http://go.microsoft.com/fwlink/?LinkID=121721&clcid=0x409&arch=x64", "$($SourcePath)\x64\Full\$FullDefExe")
$Deltax64 = ("http://go.microsoft.com/fwlink/?LinkId=211054", "$($SourcePath)\x64\Delta\$DeltaDefExe")
$Nisx64 = ("http://go.microsoft.com/fwlink/?LinkId=197094", "$($SourcePath)\x64\Nis\$NisDefExe")

$Fullx86 = ("http://go.microsoft.com/fwlink/?LinkID=121721&clcid=0x409&arch=x86", "$($SourcePath)\x86\Full\$FullDefExe")
$Deltax86 = ("http://go.microsoft.com/fwlink/?LinkId=211053", "$($SourcePath)\x86\Delta\$DeltaDefExe")
$Nisx86 = ("http://go.microsoft.com/fwlink/?LinkId=197095", "$($SourcePath)\x86\Nis\$NisDefExe")

$WebClient = New-object System.Net.WebClient

$WebClient.DownloadFile($Fullx64[0], $Fullx64[1])
$WebClient.DownloadFile($Fullx86[0], $Fullx86[1])

$WebClient.DownloadFile($Deltax64[0], $Deltax64[1])
$WebClient.DownloadFile($Deltax86[0], $Deltax86[1])

$WebClient.DownloadFile($Nisx64[0], $Nisx64[1])
$WebClient.DownloadFile($Nisx86[0], $Nisx86[1])

 

and the last step will update the distribution point with the latest files that’s been downloaded. Dont for get to modifie the Set-location to your sitecode.

 


Set-Location TS1:

Foreach ($Package in $DeploymentPackage)
{
Update-CMDistributionPoint -PackageName $Package
}

 

 

Example

 

Here i will go through all the steps necessary to setup and make this work.

 

Start with creating your empty source folder

2-3

 

Then Run this part of the script and modify the $SourcePath variable to the empty source folder you just created and dont forget to change the $SCCMmodule variable to the path where you have ConfigMgr installed

 

If you want to see which the latest definitions are you can do that here https://www.microsoft.com/security/portal/definitions/whatsnew.aspx

 

# Configuration and variables
$DeploymentPackage = ("Endpoint Definition Delta x64" ,"Endpoint Definition Delta x86")
[String]$SourcePath = "D:\Packages\Endpoint Definitions"

[String]$FullDefExe = "mpam-fe.exe"
[String]$DeltaDefExe = "mpam-d.exe"
[String]$NisDefExe = "nis_full.exe"

[String]$SCCMmodule = "D:\program Files\Microsoft Configuration Manager\AdminConsole\bin\ConfigurationManager.psd1"
Import-Module $SCCMmodule



# Creating folder structure and downloading files 

$Allpaths = "$Sourcepath\x64\Full", "$Sourcepath\x64\Delta", "$Sourcepath\x64\Nis", "$Sourcepath\x86\Full", "$Sourcepath\x86\Delta", "$Sourcepath\x86\Nis"
Foreach ($Paths in $Allpaths)
{
If (Test-Path "$Paths")
{}
Else
{New-Item -Path $Paths -ItemType Directory}
}
# Downloading Updates
$Fullx64 = ("http://go.microsoft.com/fwlink/?LinkID=121721&clcid=0x409&arch=x64", "$($SourcePath)\x64\Full\$FullDefExe")
$Deltax64 = ("http://go.microsoft.com/fwlink/?LinkId=211054", "$($SourcePath)\x64\Delta\$DeltaDefExe")
$Nisx64 = ("http://go.microsoft.com/fwlink/?LinkId=197094", "$($SourcePath)\x64\Nis\$NisDefExe")

$Fullx86 = ("http://go.microsoft.com/fwlink/?LinkID=121721&clcid=0x409&arch=x86", "$($SourcePath)\x86\Full\$FullDefExe")
$Deltax86 = ("http://go.microsoft.com/fwlink/?LinkId=211053", "$($SourcePath)\x86\Delta\$DeltaDefExe")
$Nisx86 = ("http://go.microsoft.com/fwlink/?LinkId=197095", "$($SourcePath)\x86\Nis\$NisDefExe")

$WebClient = New-object System.Net.WebClient

$WebClient.DownloadFile($Fullx64[0], $Fullx64[1])
$WebClient.DownloadFile($Fullx86[0], $Fullx86[1])

$WebClient.DownloadFile($Deltax64[0], $Deltax64[1])
$WebClient.DownloadFile($Deltax86[0], $Deltax86[1])

$WebClient.DownloadFile($Nisx64[0], $Nisx64[1])
$WebClient.DownloadFile($Nisx86[0], $Nisx86[1])


 

When that’s done the source folder should me populated with the different Definitions

 

2-5

 

If you want both x86 and x64 definitions create 2 packages and in this example I’m just planing to deploy the delta definitions

 

1-4

 

Next step is to make a Custom interval under scheduling to this packages will run every 12 hours.

 

1-5

 

Next up is to create a schedule task that will run the powershell script so we can get the latest definitions and update the package in SCCM, but before we do that we will create a .BAT script that we will let the schedule task trigger that will trigger the powershell script this is because in my own experience, trigger a powershell script directly from schedule task is a bit iffy and it’s just more reliable to trigger a bat script that triggers the powershell script.

 

I will create the BAT script in C:\temp where i aslo have my Powershell script and make it execute the following command

 


powershell.exe -ExecutionPolicy Bypass -Command "C:\temp\SCEPDef.ps1"

 

2-7

 

Now lets go to the Task scheduler and create an advanced task that will run every 8 hours so we always have the latest definitions since Microsoft releases new definitions 3 times a day.

 

2-9

 

Triggers will be

 

2-8

 

And Actions will trigger the .Bat script we created earlier


3-0

 

after that we are pretty much set, don’t forget to point the source files on the package to the correct directory of the definition you want to deploy and you do this by right clicking on the package and choose properties.

 

3-2

 

3-1

 

After all of this you can just Run the schedule task for the first time and it will download the latest definitions and update the distribution points with the latest files and it will continue to do that every time the schedule task runs.  If you have the Configuration Manager R2 toolkit installed you can check this with the content library explorer as seen below and if you look at the Time modified column you can compare that date on the actual files in the Source folder and you can see which file is on the distribution point.

 

1-8 1-9

 

This is all for now and i hope this can come in handy for someone out there. If you liked this post or might now someone who might would then feel free to share this post.

Cheers Timmy.

 

You can find me over at

 

 

 

 

 

 

 

 

 

 

 

 

#update

SCCM Client Setting – Powershell Execution policy bypass not working on POSH v1.0

 

Edit,

Mystery solved, thanks to Eskonr over at /r/sccm

Just turns out that Posh 1.0 doesnt support the Bypass parameter

as stated in link below: PowerShell 1.0 does not support Undefined and Bypass execution policies.

https://technet.microsoft.com/en-us/library/hh846237.aspx?f=255&MSPPError=-2147217396#BKMK_RunPowerShellScript

And bypass ins’t included in the documentation for the Cmdlet Set-executionpolicy for V1.0

https://technet.microsoft.com/en-us/library/ee176961.aspx

 

 

So i experienced a interesting scenario recently during an deployment, this deployment was aimed for machines running Windows XP and a bunch of clients were failing. So my next step was to try to install the deployment manually on one of the nodes that failed and i was reminded about the execution policy and the install was successful as soon as the execution policy was changed.

So i thought was that there was some kind of problem with the Policy on the local client but running policy evaluation didn’t show any errors worth noting.

 

client

 

That lead me to take a look at the AppEnforce.log to find out whats happening when the installation is about to get invoked and found the following line which seemed suspicious

 

  Prepared command line: “C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe” -NoLogo -NonInteractive C:\WINDOWS\ccmcache\12l\Install.ps1

 

ccmlog

 

there was something missing here, wheres the -ExecutionPolicy Bypass parameter ?

 

It was after this i started to look at which version of Powershell the different clients were running, all of them should me be running 2.0 but found out that all the systems who failed was actually running 1.0.

Next step was to install Powershell 2.0 (KB968930) and forcing a policy evaluation refresh (without the policy refresh it still tried to run the command without the -ExecutionPolicy parameter) the executing command line included the correct parameter -ExecutionPolicy Bypass and everything worked perfectly.

 

  Executing Command line: “C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe” -NoLogo -NonInteractive -ExecutionPolicy Bypass C:\WINDOWS\ccmcache\157\Install.ps1 with user context

ccmlog2

So by the looks of things it seems that the client setting can’t apply the Execution policy without having Powershell 2.0 installed.

Has anyone else experienced anything similar before? I find this very interesting and let me know if you have. I will continue to investigate this and see if i can replicate it in other scenarios.

 

Until next time, Cheers Timmy

 

 

ConfigMgr related videos from MS Ignite 2016

 

If you’re an IT Pro and are somewhat active on social media i don’t think you missed that MS Ignite just finished up last week and with that MS has released a bunch of videos from the event.

Here is a few of the videos I’ve watched and recommend you watch if you’re an SCCM admin.

The sheer amount of videos that came out the last few days is insane and will keep one busy for a while if one want to watch them all haha, i guarantee there’s something for everyone. Hopefully one day i will  have the opportunity to be at Ignite in person and experience it for my self but in the mean time i will be indulging in the videos they put up.

You can go to either https://myignite.microsoft.com/videos to watch the videos or to MS Ignites youtube channel https://www.youtube.com/channel/UCrhJmfAGQ5K81XQ8_od1iTg

To start out we have a presentation from my fellow countrymen Johan Arwidmark and Mikael Nyström talking about depolying Windows 10.

Master Windows 10 Deployments – Expert Level

https://myignite.microsoft.com/videos/2970

 

Learn what’s new with OSD in System Center Configuration Manager and Microsoft Deployment Toolkit

https://myignite.microsoft.com/videos/2968

 

Manage your mobile devices and apps with System Center Configuration Manager and Microsoft Intune

https://myignite.microsoft.com/videos/2814

 

Deploy Microsoft Office 365 Client using Configuration Manager

https://myignite.microsoft.com/videos/1244

 

and last but not least if you haven’t checked out Windows Server 2016 and all the new features yet this video is a great start.

 

Learn the top 10 reasons why you’ll like Windows Server 2016

https://myignite.microsoft.com/videos/1244

 

Until next time, cheers Timmy