Apply-Hardening.psm1

function Apply-Hardening {
<#
    .NOTES
    ===========================================================================
    Created by: Markus Kraus
    Twitter: @VMarkus_K
    Private Blog: mycloudrevolution.com
    ===========================================================================
    Changelog:
    2016.11 ver 2.0 Base Release
    ===========================================================================
    External Code Sources:
     
    ===========================================================================
    Tested Against Environment:
    vSphere Version: 5.5 U2
    PowerCLI Version: PowerCLI 6.3 R1, PowerCLI 6.5 R1
    PowerShell Version: 4.0, 5.0
    OS Version: Windows 8.1, Server 2012 R2
    Keyword: VM, Hardening, Security
    ===========================================================================
 
    .DESCRIPTION
    Applys a set of Hardening options to your VMs
 
    .Example
    Get-VM TST* | Apply-Hardening
 
    .Example
    $SampleVMs = Get-VM "TST*"
    Apply-Hardening -VMs $SampleVMs
 
    .PARAMETER VMs
    Specify the VMs
 
 
#Requires PS -Version 4.0
#Requires -Modules VMware.VimAutomation.Core, @{ModuleName="VMware.VimAutomation.Core";ModuleVersion="6.3.0.0"}
#>


[CmdletBinding()]
param( 
    [Parameter(Mandatory=$true,
    ValueFromPipeline=$True,
                Position=0)]
    [VMware.VimAutomation.ViCore.Impl.V1.Inventory.InventoryItemImpl[]]
    $VMs
)

Process { 
#region: Create Options
    $ExtraOptions = @{
        "isolation.tools.diskShrink.disable"="true";
        "isolation.tools.diskWiper.disable"="true";
        "isolation.tools.copy.disable"="true";
        "isolation.tools.paste.disable"="true";
        "isolation.tools.dnd.disable"="true";
        "isolation.tools.setGUIOptions.enable"="false"; 
        "log.keepOld"="10";
        "log.rotateSize"="100000"
        "RemoteDisplay.maxConnections"="2";
        "RemoteDisplay.vnc.enabled"="false";  
    
    }
    if ($DebugPreference -eq "Inquire") {
        Write-Output "VM Hardening Options:"
        $ExtraOptions | Format-Table -AutoSize
    }
    
    $VMConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
    
    Foreach ($Option in $ExtraOptions.GetEnumerator()) {
        $OptionValue = New-Object VMware.Vim.optionvalue
        $OptionValue.Key = $Option.Key
        $OptionValue.Value = $Option.Value
        $VMConfigSpec.extraconfig += $OptionValue
    }
#endregion

#region: Apply Options
    ForEach ($VM in $VMs){
            $VMv = Get-VM $VM | Get-View
        $state = $VMv.Summary.Runtime.PowerState
        Write-Output "...Starting Reconfiguring VM: $VM "
        $TaskConf = ($VMv).ReconfigVM_Task($VMConfigSpec)
            if ($state -eq "poweredOn") {
                Write-Output "...Migrating VM: $VM "
                $TaskMig = $VMv.MigrateVM_Task($null, $_.Runtime.Host, 'highPriority', $null)
                }
        }
    }
#endregion
}