 
    
    Creating a portable virtual server lab
	Presentation for the Singapore PowerShell User Group
		8. April 2017				
		
	
 
	
		Peter Hahndorf
		Solution Architect
		Hahndorf Consulting
		https://hahndorf.eu
 
Agenda
- Intro
- The host
- Creating new VMs
- Using custom scripts
- DSC Resources
- Using DSC push and pull configurations
- Alternatives
  
Motivation
  
    
|   | 
I quit my day job in London in 2005 and started travellingNo Laptop to work with (too heavy)USB drive to store photos onOften no network connectivityStill needed to get some work doneSecure way to connect to servers and online banking | 
  
 
Around the world
 
 
The host
    
Hardware
I am using Windows Server 2016 as a host OS, it boots like a Windows To Go system from an external USB (2 or 3) drive.
We can use any normal SATA SSD drive and an USB-3 adapter, we could also connect the drive internally via SATA. 
The host PC needs to have a 64bit CPU with Hyper-V support, the more memory the better.
New Installation
Using a PowerShell script, I can set up a new Windows To Go installation with basic setup is about an hour. 
As this is for testing and evaluation purposes, we can use the 180 day trial version of Windows server.
Posh Profiles
Using a command line interface to start my Windows programs since the early 1990s, now using PowerShell profiles.
  
ex, um, dm, vm, ev, ser, word, n, code, ise, vs, sql, su
 
Creating new VMs
 
    Hyper-V and Hyper-Cmdlets
    
        Using custom scripts to quickly set create new VMs from scratch. A single one:
        
        
New-LabVM -id 1 -os 2016GUI
or several
          
New-vLab -count 5 -os 2016Core
       I can also control them all with single commands
       
Start-vLab.ps1
 
       Save-vLab.ps1
 
       CheckPoint-vLab.ps1
 
       Remove-LabVM.ps1 -ids 1,2,5
 
     
Using custom scripts
    
     Automate common tasks
        
        Before DSC was around I created many custom scripts to set up servers.
        
       
Setup-OS.ps1
 
       Setup-iis.ps1 -role -hacon
 
       Setup-DemoWebServer.ps1 -iis -sites 5
 
       Setup-AD.ps1 -prepare -forest -SiteName Singapore
 
    Mysore Project
    I created scripts to completely automate the setup of my productions servers:
    Web-Server, web-sites, SQL-Server, database restore, custom apps and services. certificates, security settings.
 
    
      
  
 
    Desired State Configuration
    What is PowerShell DSC?
    
       You define the desired configuration of your servers in configuration files using a PowerShell like syntax.
    
Configuration MyServer {
    Node Localhost {
        File BinFolder
        {
            Ensure = "Present"
            Type = "Directory"
            DestinationPath = "C:\bin"
        }
    }
}
 
    DSC Resources
DSC is using resources to be configured to define the state of the server.
    
Get-DscResource | Select Name
 
    Included in Windows (23)
Out of the box in Windows, the newer the OS, the more resources you will have.
    
DSC Resource Kit
    Many more resources, now open source but strongly controlled by the Microsoft PowerShell team
    
    
Community Resources
    Even more resource written by the community, before writing your own, Bing around a bit.
 
    Using DSC locally
    Using the push mode
    
        We create a DSC configuration and execute it manually on a local or different server.
    
 
    
 
    Using a DSC Pull Server
    Server Setup
    
- Using a web server (SMB share is possible)
- Installing the pull server components
- Providing configurations to be distributed
  
    
    Client Setup
    
- Tell the LC about the pull server 
- Sit back and relaxed
  
 
    
Alternatives to DSC
    chef.io
puppet.com
powershellgallery.com/packages/Carbon/
Using your own scripts
How to choose?
    
Authoring DSC Resources
    Need your own resources?
    There are still some things you can not do with the existing DSC resources, so you can/have to write your own.
    But a topic for a different day.
    Things DSC can't do!
    
- Make sure things are NOT there.