Examples/Status.ps1

############################################################
# DSC Azure Test Example - Status
#
# This script will show the detailed status of the Virtual
# Machine in Azure.
#
# Before running this script, do the following:
# * Open PowerShell and run Get-AzurePublishSettingsFile
# * Download the .publishsettings file in to $workingdir
#

# INSTANCE - use this identifier to add more test environments
# If you are only adding VM's and don't need a new full environment,
# you only need to add another VM section to this script and run
# it again.
param(
[string]$InstanceID,
[switch]$ConnectionFiles
)

$Status = @()

$VMlist = Get-AzureVM | ? {$_.ServiceName -like "*$InstanceID"}
foreach ($VM in $VMlist) {

    $VMName = $VM.Name
    $ServiceName = $VM.ServiceName

    # Set the folder where your files will live
    $workingdir = split-path $myinvocation.mycommand.path
    if ((test-path $workingdir) -eq $false) {
        Write-Warning 'The working directory does not exist. Exiting script.'
        Exit
        }

    $VMStatus = get-azurevm -name $VMName -servicename $ServiceName
    $fqdn = $ServiceName+'.cloudapp.net'

    $VMDetails = "" | Select CloudServiceName, VirtualMachineName, VirtualMachineIP, RemoteDesktopPort, PowerShellRemotePort, VirtualMachineStatus, GuestAgentStatus, ResourceExtensionStatus
    $VMDetails.CloudServiceName = $fqdn
    $VMDetails.VirtualMachineName = $VMName
    $VMDetails.VirtualMachineIP = $VMStatus.IpAddress
    $VMDetails.RemoteDesktopPort = Get-AzureEndpoint -VM $VMStatus | ? Name -eq RDP | % Port
    $VMDetails.PowerShellRemotePort = Get-AzureEndpoint -VM $VMStatus | ? Name -eq WinRmHTTPs | % Port
    $VMDetails.VirtualMachineStatus = $($VMStatus.Status)
    $VMDetails.GuestAgentStatus = $VMStatus.GuestAgentStatus.Status
    $VMDetails.ResourceExtensionStatus = $VMStatus.ResourceExtensionStatusList.ExtensionSettingStatus.Status

    $Status += $VMDetails

    if ($ConnectionFiles -eq $true -AND ($VM.vm.configurationsets.inputendpoints | % name) -contains 'RDP') {
        write-host "Downloading RDP File to WorkingDir"
        # include this line to automatically download the RDP file for a VM if available
        $VMFolder = if (!(test-path $workingdir\$VMName)) {mkdir $workingdir\$VMName}
        $RDP = Get-AzureRemoteDesktopFile -ServiceName $ServiceName -Name $VMName -LocalPath (Join-Path $workingdir\$VMName 'Connect.rdp')
        }

    $PSPort = $VMDetails.PowerShellRemotePort
    if ($ConnectionFiles -eq $true -AND ($VM.vm.configurationsets.inputendpoints | % name) -contains 'WinRmHTTPs') {
        write-host "Installing certificate in local user store, to trust PowerShell endpoint."
        $Cert = Get-AzureCertificate -ServiceName $ServiceName -Thumbprint $VMStatus.VM.DefaultWinRmCertificateThumbprint -ThumbprintAlgorithm sha1
        $VMFolder = if (!(test-path $workingdir\$VMName)) {mkdir $workingdir\$VMName}
        $CertData = Join-Path $workingdir\$VMName Localhost.cert
        $Cert.data | out-file $CertData
        $CertResult = Import-Certificate -FilePath $CertData -CertStoreLocation Cert:\CurrentUser\Root
        write-host `n
        write-host 'Creating ConnectTo-Demo.ps1 to simplify PS remote connection.'
        "Enter-PSSession -ComputerName $fqdn -Credential (get-credential) -Port $PSPort -UseSSL" | Out-File (join-path $workingdir\$VMName ConnectTo-FullAdmin.ps1)
        "Write-Host 'This script assumes you have setup the demo endpoint.' -ForeGroundColor Green;Enter-PSSession -ComputerName $fqdn -Credential (get-credential) -Port $PSPort -ConfigurationName Demo1EP -UseSSL" | Out-File (join-path $workingdir\$VMName ConnectTo-Demo.ps1)
        }
        $Status
}