#Use exception message

}

if ($isSilent) { throw $errorMessage

}

elseif ($global:interactiveMode -eq 1)

{

Write-Host $errorMessage

}

else

{

Write-EventLog -EventId 100 -LogName Application -Source backup.ps1 -Message $errorMessage

}

#No need to rethrow since already recorded error return

}

}

##### Start of function calls #####

#gets the credentials from user, either manual entry or from file $savedLoginJson = queryfor-credentials $args[0]

if ($savedLoginJson -eq $null)

{

#if an error occurs, it has already been logged in the queryfor-credentials function return

}

#extracts needed information from the credential json try

{

$savedLoginJson = "[" + $savedLoginJson + "]"

$savedloginVals = $savedLoginJson convertFrom-Json

$SecStrLoginname = $savedloginVals.userName ConvertTo-SecureString -ErrorAction stop $loginname =

[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecStrLoginName))

$hostname = $savedloginVals.hostname

$SecStrPassword = $savedloginVals.password ConvertTo-SecureString -ErrorAction stop $password =

[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecStrpassword))

}

catch [System.Exception]

{

if ($global:interactiveMode -eq 1)

{

Write-Host "Failed to get credentials: " + $error[0].Exception.Message

}

else

{

Write-EventLog -EventId 100 -LogName Application -Source backup.ps1 -Message "Failed to get credentials: "

+$error[0].Exception.Message

}

}

#determines the active Api version

$global:scriptApiVersion = getApiVersion $global:scriptApiVersion $hostname if ($global:scriptApiVersion -eq $null)

{

if ($global:interactiveMode -eq 1)

{

Write-Host "Could not determine appliance Api version"

}

Write-EventLog -EventId 100 -LogName Application -Source backup.ps1 -Message "Could not determine appliance Api version"

return

}

#sends the login request to the machine, gets an authorized session ID if successful $authValue = login-appliance $loginname $password $hostname

if ($authValue -eq $null)

{

if ($global:interactiveMode -eq 1)

{

Write-Host "Failed to receive login session ID."

}

Write-EventLog -EventId 100 -LogName Application -Source backup.ps1 -Message "Failed to receive login session ID."

return

}

#sends the request to start the backup process, returns the taskResource object $taskResource = backup-Appliance $authValue.sessionID $hostname

if ($taskResource -eq $null)

{

if ($global:interactiveMode -eq 1)

{

C.1 Sample backup script 281