vmmanager.psm1

<#
.Synopsis
   Löscht alle Snapshorts und erstellt einen Snapshot "base"
.DESCRIPTION
   Löscht alle Snapshorts und erstellt einen Snapshot "base"
.EXAMPLE
   Init Block for the named VM
   init-block -vmname "linux"
.EXAMPLE
   Init Block for a List of VM's
   Import-Csv C:\Users\jtutt_000\Temp\test.csv | init-block
#>

function init-block
{
    Param
    (
        # Name der Virtuellen Maschine
        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   ValueFromPipeline=$true,
                   Position=0)]
        [Alias('VM')]
        $vmname

    )

    Begin
    {
       
    }
    Process
    {
       
             try {
                Write-Host "Löschen Snapshots für "$vmname.VM 
                Remove-VMSnapshot -VMName $vmname.VM -ErrorAction Stop -ErrorVariable $e
                Write-Host "Erstelle base Snapshot"
                Checkpoint-VM -Name $vmname.VM -SnapshotName 'base' -ErrorAction Stop
            }
            catch {
                Write-Host "Fehler beim initialisieren des VM $vmname : $_" -BackgroundColor red
            }
      
    }
    End
    {
    }
}

<#
.Synopsis
   Erstellt einen Snapshot unter base mit dem namen block
.DESCRIPTION
   Erstellt einen Snapshot unter base mit dem namen block
.EXAMPLE
   create-block -vmname "linux" -block "rot"
.EXAMPLE
   Create Block for a List of VM's
   Import-Csv C:\Users\jtutt_000\Temp\test.csv | create-block -block "rot"
 
#>

function create-block
{
    Param
    (
        # Name der Virtuellen Maschine
        [Parameter(Mandatory=$true,
                    ValueFromPipeline=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=0)]
        [Alias('VM')]
        $vmname,
        # Name des Blocks
        [Parameter(Mandatory=$true)]
        $block

    )

    Begin
    {
    }
    Process
    {
       
            try {
                $sn = Get-VMSnapshot -VMName $vmname.VM -Name $block -ErrorAction SilentlyContinue
                if ($sn) {
                    Write-Host "Fehler beim Erzeugen des Block $block für die VM"$vmname.VM": Der Block existiert schon!" -BackgroundColor red
                }
                else {
                    Write-Host "aktiviere Snapshot 'base' für "$vmname.VM
                    Restore-VMSnapshot -VMName $vmname.VM -Name 'base' â€“confirm:$False -ErrorAction Stop
                    Write-Host "Erstelle Snapshot $block"
                    Checkpoint-VM -Name $vmname.VM -SnapshotName $block -ErrorAction Stop
                }
             }
             catch {         
                Write-Host "Fehler beim Erzeugen des Block $block für die VM $vmname : $_" -BackgroundColor red
             }
       
    }
    End
    {
    }
}

<#
.Synopsis
   Schaltet zwischen zwei Snapshots um
.DESCRIPTION
   Schaltet zwischen zwei Snapshots um
.EXAMPLE
    Schaltet die VM "linux" zwischen den Blöcken "rot" und "gelb" um!
   switch-block -vmname "linux" -fromblock "rot" -toblock "gelb"
.EXAMPLE
   Switch Blocks for a List of VM's
   Import-Csv C:\Users\jtutt_000\Temp\test.csv | switch-block -fromblock "rot" -toblock "gelb"
 
#>

function switch-block
{
    Param
    (
        # Name der Virtuellen Maschine
        [Parameter(Mandatory=$true,
                    ValueFromPipeline=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=0)]
        [Alias('VM')]
        $vmname,
        # Name des from Blocks
        [Parameter(Mandatory=$true)]
        $fromblock,
        # Name des from Blocks
        [Parameter(Mandatory=$true)]
        $toblock
    )

    Begin
    {
    }
    Process
    {
       
        try {
            $sn = Get-VMSnapshot -VMName $vmname.VM -Name $fromblock -ErrorAction Stop            
            $machine = Get-VM -Name $vmname.VM
            if ($machine.ParentCheckpointName -ne $fromblock) {
                Write-Host "$fromblock is not the current block! Current block is"$machine.ParentCheckpointName -BackgroundColor Red
            }
            else {
                Write-Host "Lösche Snapshot '$fromblock' (Merge) für "$vmname.VM
                Remove-VMSnapshot -VMName $vmname.VM -Name $fromblock -ErrorAction Stop
                Write-Host "Erstelle Snapshot (Merge) '$fromblock' für "$vmname.VM
                Checkpoint-VM -Name $vmname.VM -SnapshotName $fromblock  -ErrorAction Stop 
                Write-Host "Aktiviere Snapshot $toblock für "$vmname.VM
                Restore-VMSnapshot -VMName $vmname.VM -Name $toblock â€“confirm:$False -ErrorAction Stop
            }
            }
        catch {                
            Write-Host "Fehler beim Switchen des Blockes von $fromblock nach $toblock für die VM "$vmname.VM": $_" -BackgroundColor red
        }            
                   
    }
    End
    {
       
    }
}

Export-ModuleMember -Function init-block
Export-ModuleMember -Function create-block
Export-ModuleMember -Function switch-block