PowerShell Script to backup Windows Azure Mobile Services scripts

Listing for a PowerShell Script to backup Windows Azure Mobile Services scripts and configuration information.  I will get something more complete up on the Script Repository this next month!  This also assumes you have set your subscription active using Windows Azure PowerShell.  See How to install and configure Windows Azure PowerShell for more information.

  function main()
{
    $startDir = Get-Location;
    $MobileServices =  ListMobileServices ;

    $MobileServices | foreach{
        # for every service create a directory 

        $MobileServiceName = $_.name;  
        $MobileServiceName;
        $MobileServiceDir = CreateMobileServiceDirectory($MobileServiceName);
        
        # and move to that directory
        Set-Location $MobileServiceDir;
         
        $ScriptList = ListScripts $MobileServiceName;
        $ScriptList;
        if ($ScriptList.table)
        {
            $tblScriptLoc = CreateMobileServiceDirectory("scripts");   
            Set-Location $tblScriptLoc;
            $ScriptList.table | foreach{
                $ScriptName = "table/{0}.{1}" -f $_.table, $_.operation;
                azure mobile script download $MobileServiceName $ScriptName;
                }
                #end foreach table
            Set-Location $MobileServiceDir;
        }
        if($ScriptList.scheduler)
        {
            $tblScriptLoc = CreateMobileServiceDirectory("scripts");   
            Set-Location $tblScriptLoc;
            $ScriptList.scheduler | foreach{
                $ScriptName = "scheduler/{0}" -f $_.name;
                azure mobile script download $MobileServiceName $ScriptName;
                }#end foreach scheduler
            Set-Location $MobileServiceDir;
        }
        if($ScriptList.api)
        {
            $tblScriptLoc = CreateMobileServiceDirectory("scripts");   
            Set-Location $tblScriptLoc;
            $ScriptList.api | foreach{
                $ScriptName = "api/{0}" -f $_.name;
                azure mobile script download $MobileServiceName $ScriptName;
                }
                #end foreach api
            Set-Location $MobileServiceDir;
        }
        if($ScriptList.shared)
        {
            $tblScriptLoc = CreateMobileServiceDirectory("scripts");   
            Set-Location $tblScriptLoc;
            $ScriptList.shared | foreach{
                $ScriptName = "shared/{0}" -f $_.name;
                azure mobile script download $MobileServiceName $ScriptName;
                }
                #end foreach shared
            Set-Location $MobileServiceDir;
        }

        #dump config to a json file:
        $tmp=""; azure mobile config list --json $MobileServiceName |  foreach{  $tmp += $_ };  New-Item "config.json" -ItemType file -Value $tmp;
        $tmp=""; azure mobile show --json $MobileServiceName |  foreach{  $tmp += $_ };  New-Item "details.json" -ItemType file -Value $tmp;
        $tmp=""; azure mobile job list --json $MobileServiceName |  foreach{  $tmp += $_ };  New-Item "job.json" -ItemType file -Value $tmp;
          

    Set-Location $startDir.Path;
    }; 
    #end foreach Service
}


function CreateMobileServiceDirectory()
{
    param( 
        [Parameter(Mandatory=$true)]
        $ServiceName
        )

    $loc = Get-Location;
    [string]$fullPath = "{0}\{1}" -f $loc.Path, $ServiceName;
    
    if(Test-Path $fullPath)
    {
        if ( Test-Path $fullPath -pathType Container)
        {
        }
        else
        {
            #error
        }
    }
    else
    {
        $newObj= New-Item $fullPath -ItemType directory;
    }

    return $fullPath;
}

function ListTables()
{
    param(
        [Parameter(Mandatory=$true)]
        $ServiceName
        )

    $TableTemp = "";
    
    $TMPP=azure mobile table list --json $ServiceName |  foreach{ 
        $TableTemp += $_;
        };  
    return ConvertFrom-Json($TableTemp);
}

function ListScripts()
{
    param(
        [Parameter(Mandatory=$true)]
        $ServiceName
    )
    $TableTemp = "";
    
    $TMPP=azure mobile script list --json $ServiceName |  foreach{ 
        $TableTemp += $_;
        };  
    return ConvertFrom-Json($TableTemp);
}

function ListMobileServices()
{
    $TempJsonString= ""; 
    # Get a list of Services as Json objects
    # since it is a bunch of Line feeds have to concatonate the string
    azure mobile list --json |  foreach{ $TempJsonString += $_  }; 
    return ConvertFrom-Json($TempJsonString);
}

#call Main!
main;