Examples/Destroy.ps1

############################################################
# DSC Azure Test Example - DESTROY
#
# NOTES - this script removes everything in the test environment
# from Azure and then makes sure the subscription is no longer
# set as Current for the LocalSystem.
#
# This script is DESTRUCTIVE without a method of restoration
#
# The subscription must be in place in order to access Azure
# and do work, so if this is being run in a new PS session
# you might have to first apply the SetupSubscription.ps1
# script first.
#

# INSTANCE - use this identifier to select the instance
[CmdletBinding()]
param(
[Parameter(Mandatory,ValueFromPipeline)][string]$Instance,
[switch]$Force
)

# Set the folder where your files will live
$workingdir = split-path $myinvocation.mycommand.path

$SetupSubscription = Join-Path $workingdir 'SetupSubscription.ps1'
& $SetupSubscription

# DSC Configuration
Configuration DestroyAzureTestEnvironment
{
    Import-DscResource -Module xAzure

    Node $AllNodes.NodeName 
    {

        xAzureVM TestVM1
        {
            Ensure = 'Absent'
            Name = 'TestVM1'
            ServiceName = $Node.ServiceName
            StorageAccountName = $Node.StorageAccountName
            ImageName = 'a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-R2-201404.01-en.us-127GB.vhd'
        }
        xAzureVM TestVM2
        {
            Ensure = 'Absent'
            Name = 'TestVM2'
            ServiceName = $Node.ServiceName
            StorageAccountName = $Node.StorageAccountName
            ImageName = 'a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-R2-201404.01-en.us-127GB.vhd'
        }
        xAzureService TestVMService
        {
            Ensure = 'Absent'
            ServiceName = $Node.ServiceName
            AffinityGroup = $Node.AffinityGroup
            DependsOn = '[xAzureVM]TestVM1','[xAzureVM]TestVM2'
        }
        xAzureStorageAccount TestVMStorage
        {
            Ensure = 'Absent'
            StorageAccountName = $Node.StorageAccountName
            AffinityGroup = $Node.AffinityGroup
            DependsOn = '[xAzureService]TestVMService'
        }
        xAzureAffinityGroup TestVMAffinity
        {
            Ensure = 'Absent'
            Name = $Node.AffinityGroup
            Location = $Node.AffinityGroupLocation
            DependsOn = '[xAzureStorageAccount]TestVMStorage'
        }
        xAzureSubscription MSDN
        {
            Ensure = 'Absent'
            AzureSubscriptionName = 'Visual Studio Ultimate with MSDN'
            DependsOn = '[xAzureAffinityGroup]TestVMAffinity'
        }        
    }
}

$ConfigData=    @{ 
    AllNodes = @(     
                    @{  
                        NodeName = 'localhost'
                        AffinityGroup = "TestVMWestUS$Instance"
                        AffinityGroupLocation = 'West US'
                        StorageAccountName = "testvmstorage$Instance"
                        ServiceName = "testvmservice$Instance"
                    }
                )
} 

# Create MOF
DestroyAzureTestEnvironment -OutputPath $workingdir -ConfigurationData $ConfigData

if ($Force -eq $True) {$Safety = 'DESTROY'}
else {
    Write-Host ""
    Write-Warning "ARE YOU SURE YOU WANT TO DESTROY THE TEST ENVIRONMENT AND ALL FILES?"
    $Safety = Read-Host "If you are certin please type DESTROY any other response will abort"
    }

Switch ($Safety) {
    'DESTROY' {
        # Apply MOF
        Start-DscConfiguration -ComputerName 'localhost' -wait -force -verbose -path $workingdir
    }
    Default {Exit}
    }