This post was first published at Linkedin

Have you heard about the DevOpsification of Windows, the projection about Cloud adoption? Just listen to Jeffrey Snover at the WinOps Conference this year How to enter in this new era you could ask. If you are a Windows Server Admin these new concepts can be difficult. This is not another post about how Devops or cloud infra that will transform the IT world or how bad is traditional IT. This post is about how to enter in the era in the Windows world when you are Windows Server Admin.

First a refresh on what is an Operating System. It may seem obvious, but a good understanding on how computer work is essential. You may not need to know what is a thread or a process when you run a files server, but to run, maintain and debug fabric and workload this skill is important.

Second Network. This is not about how to manipulate router or switch from a particular vendor. It is about learning how networks work. Understanding VLAN, L2/L3, advance routing, proxy … is a key for successful cloud based projects. And because you also need to learn who you can use network inside public cloud, you should be familiar with Azure networking.

Then what’s about Devops. If you never hear about Devops, welcome in 2016 Marty! But if you are not a time traveler here where to start :

It’s just a general introduction, but in the Windows world I suggest you to follow some meetups, forums et the WinOps Conf. In the Windows server world, the most important tool for Devops is PowerShell. Of course you can try to do cloud enabled solution using VBscript but it will be inefficient. But, when I say PowerShell, is not about to be able to type a small set of command. It’s about writing scripts and modules. It can be difficult but it payoff, with little effort you can have big success. Take look at this small scripts

$VMparamHash = @{
VMName = 'MyVm'
VlanWan ='10'
VlanLan ='11'
VhdPath ='e:\vm\MyVm\MyVM.vhdx'
VMPath ='e:\vm\MyVm\'
new-vm -name $VMparamHash.VMName -Generation 1 -MemoryStartupBytes 4GB -path $VMparamHash.VMPath
set-vm -name  $VMparamHash.VMName -ProcessorCount 2
New-VHD -Path $VMparamHash.VhdPath -SizeBytes 200GB -Dynamic
Add-VMHardDiskDrive -VMName $VMparamHash.VMName -path $VMparamHash.VhdPath
Get-VMNetworkAdapter -VMName $VMparamHash.VMName | Remove-VMNetworkAdapter
Add-VMNetworkAdapter -VMName $VMparamHash.VMName -Name "Wan" -SwitchName "Fabric"
Add-VMNetworkAdapter -VMName $VMparamHash.VMName -Name "Lan" -SwitchName "Fabric"
Set-VMNetworkAdapterVlan -VMName $VMparamHash.VMName -VMNetworkAdapterName "Wan" -Access -VlanId $VMparamHash.VlanWan
Set-VMNetworkAdapterVlan -VMName $VMparamHash.VMName -VMNetworkAdapterName "Lan" -Access -VlanId $VMparamHash.VlanLan
Set-VMNetworkAdapter -VMName $VMparamHash.VMName -VMNetworkAdapterName "Wan"  -VmqWeight 0
Set-VMNetworkAdapter -VMName $VMparamHash.VMName -VMNetworkAdapterName "Lan"  -VmqWeight 0  -MacAddressSpoofing On

It just creates a VM with 2 net adapters and apply vlan and other network parameters. Doing this with the GUI, it took several minutes to finish the same tasks and it is error prone, only few seconds in powershell. Doing Powershell is may be not enough. Cloud infrastructure and Devops culture relay a lot on automation. It’s the purpose of DSC, Desired State of Configuration, a declarative model for system configuration. It ensures that server is configure in the ways you want. The key concept here is idempotent. The configuration is changed only if the state is not in the desired state. If the configuration is in the desired state, DSC will do nothing. A DSC configuration can be applied hundred time it will do nothing if the configuration is already applied. DSC check the current state of a server, and change the state in the desired way only if there is a difference between the current state and a state described in the DSC resource. DCS is based on resources, writing in Powershell, as module (or class in PowerShell v5). It’s the power of DSC, you can create your own resources that will check if the state you want for your server is ok and how to put the configuration of the server the way you want.

But if you need to deal with a lot of Powershell files and ensure that you can come back to an old version and work in a team you will need a version control system. One of the mostly used in the Windows community is Git. There is also Github, it’s a public version control system. With a lot of Powershell scripts and modules, you need to find a way to test and correct error. Scripts can be complexes and interact with many part of one computer or several servers. In the programming world, it means Unit Testing. It’s a part of continuous integration. For Powershell you can use Pester. For more information on Unit Testing check this course

The next step is to define a deployment pipeline, you have your scripts and your modules in a source control system, you have a tools for testing, you need to automate the next step, not just execution but also reporting when something is wrong and keeping an history of code execution. It’s the purpose of Jenkins. Jenkins is a Continuous Integration and Continuous Delivery server.

Where to apply this knowledge? First you have Hyper-V, virtualization is the essential brick in the cloud world. In Windows world, virtualization mean Hyper-V.

Hyper-v run on Windows 2016 with enhancements that permit to build hyper converged platform, Compute, storage and Network. It’s called S2D and Network Virtualization. Windows 2016 introduce also a new way to install Server, Nano server. With Nano Server you can install 2 type of servers, physical for infra (Storage or Hyper-V) and VM for workload with a small foot print. It’s the perfect tool for some application that need to scale out, as it easy to install in mass. Nano Server is just the Windows Kernel, without GUI or local console.

Another tools that make Windows 2016 an engine for agility is Containers. Containers are not just VM inside in VM, it’s a new way to deliver applications by using layer. Then you have Docker. Docker for Windows, with all the ecosystem, meaning that you can use Docker Engine, Swarm … in the same way you can use it on Linux. You can now use Windows Core and Nano Server as base image for your containers. How deploy application in large scale in Nano Server and Container. Having an OS you can deploy in a minute with no local GUI or console mean that you need a new way to install application (no more screenshot remember?). One option is to use Windows Server App, it supports offline and remote installation Another option to deploy application and service on server is to use a packages manager. If you use Ubuntu, you are familiar with APT-GET. Powershell 5 as a similar tool, the PackageManagement module. It works on client computer (Windows 10) and Server (including NanoServer)

Windows 2016 can help you to build your private cloud, for public cloud you should try to learn Azure or AWS. Even if it’s just for prototype or test. It will give you some ideas on how to run you own services on your private cloud. Azure contain tools and services that can be time consuming to implement on premise. Orchestration and deployment in Azure is down with an API called Azure Resources Manager or ARM. With Azure and Windows 2016 come Azure Stack, the hybrid cloud solution from Microsoft. It work in a similar way as Azure and you can use what you learn on ARM in Azure Stack. Orchestration is a central concept in the cloud era. It can be seen as an automated and ordered operations on a group of server to produce a service. Thinks about a service that require a Database server, one or more web server and one Load Balancer. With DSC and Powershell we have the tools to configure each server one by one. But What if I need to setup the complete solution or if I need to add a web server. This is the purpose of orchestration. There is a lot of orchestration products, ARM is one of them, but it works on Azure and Azure Stack. There are some other Ansible, SlatStack, Pupet, Chef …

In a cloud world, Windows SysAdmin, cloud admin and architect should be worry about security. It’s not only about security inside Windows, but also outside your server. Windows 2016, Azure, Powershell 5 come with a lot of tools to prevent malicious comportment and monitor activity. Take a look at Just Enough Administration, you can allow user to do specific administration task without giving them an Admin account.

Monitoring and metering is an essential part of the cloud era. It permits to detect error and bug, performance management, ensure that resources are correctly used by scaling UP/DOWN/OUT resources really needed.

IT people should start to learn some programming language and API. It’s not to become programmer, but more to know what is the needs of de developer teams and how to monitor, install and troubleshot system. It can be the tools used by your clients or in house programmers. It can be Nod.js, .net core, Python, Go or anything else. You don’t need to be an expert, just enough culture to monitor, install, maintain and debug installation of this tools.

In this new era, Windows Sysadmin need to change the way they work, it’s all about culture; skills, process and team collaboration. This is only some elements to learn, I forgot some. Most of them come from the Open Source world, other from Microsoft. Some tools are already used for a long time, look at PowerShell, Hyper-V, some are not ready for production today. But more and more these skills will be needed in a daily basic. Cloud, WinOps, Automation, PowerShell skills and others will be essential to all Windows IT Professional in the next years. The most important skill to have is the ability