PowerShell Automation Example

This PowerShell example demonstrates how to automate the following operations:

  • Submit the following scripts to BarTender Cloud by using the Actions API:

    • PrintBTWAction: Prints a BarTender document to PDF.

    • WriteMessageToLogAction: Writes a message to the message log.

    • DeleteFileAction: Deletes the PDF file from the server.

  • Download the PDF file contents to the local disk by using the Librarian API.

Note: In the following example, you must replace "____PASTE_YOUR_ACCESS_TOKEN_HERE____" with your access token. For more information about your access token, refer to Authentication.

Copy
param (
  [string]$btw_file = "Librarian://main/MyDocuments/Simple1_QR.btw",
  [string]$local_pdf_folder = "d:\",
  [string]$access_token = "____PASTE_YOUR_ACCESS_TOKEN_HERE____"
)

$btc_server_location = "https://bartendercloud.com"

$print_script_template = "
- PrintBTWAction:
    Document: {0}
    Printer: PDF
    QueueAndContinue: false
    VerifyPrintJobIsComplete: true
    MakeUniqueOutputFile: true
    SaveAfterPrint: false    
    ReturnPrintData: true
    ReturnPrintSummary: true
    PrintToFileFolder: Librarian://main/MyDocuments/pdf/
    PrintToFileFileName: Output.pdf
    PrintToFileNameVariable: PrintToFileName

- WriteMessageToLogAction:
    Level: Info
    Message: '%PrintToFileName%'
"

$delete_pdf_script_template = "
- DeleteFileAction:
    File: {0}
"

$script = ($print_script_template -f $btw_file)
Write-Host $script

$content_type = "text/vnd.yaml"
$submit_script_url = "{0}/api/actions?Wait=30s&MessageCount=200&MessageSeverity=Info" -f $btc_server_location
$headers = @{ "Content-Type"=$content_type; "Authorization"=("Bearer {0}" -f $access_token) }

$response = Invoke-WebRequest -Uri $submit_script_url `
                              -Method POST `
                              -Headers $headers `
                              -Body $script
$response

$status = ($response.Content | ConvertFrom-Json).Status
Write-Host ("The script status is {0}." -f $status)

if ($status -eq "RanToCompletion")
{
   # Get the output PDF file path by querying the %PrintToFileName% variable value.
   $status_url = ($response.Content | ConvertFrom-Json).StatusUrl
   $get_pdf_path_url = "{0}/variables/PrintToFileName" -f $status_url
   Write-Host ("Getting output pdf file path from {0}." -f $get_pdf_path_url)

   $headers = @{ "Authorization"=("Bearer {0}" -f $access_token) }
   $response = Invoke-WebRequest -Uri $get_pdf_path_url `
                                 -Method GET `
                                 -Headers $headers
   $pdfpath = $response.Content
   Write-Host ("Output pdf file in the server is '{0}'." -f $pdfpath) -ForegroundColor Yellow -BackgroundColor Blue

   # Download the output PDF file by using the Librarian API.
   $get_pdf_content_url = "{0}/api/librarian/files/path/{1}/content" -f $btc_server_location, [System.Web.HttpUtility]::UrlEncode($pdfpath)

   $output_pdf_filename = $btw_file.Substring($btw_file.LastIndexOf("/") + 1).Replace(".btw", ".pdf")
   $output_pdf_path = ("{0}\{1}" -f $local_pdf_folder, $output_pdf_filename)

   Write-Host ("Downloading pdf from {0}" -f $get_pdf_content_url)

   $response = Invoke-WebRequest -Uri $get_pdf_content_url `
                                 -Method GET `
                                 -Headers $headers `
                                 -OutFile $output_pdf_path

   Write-Host ("Output pdf file is downloaded to {0}" -f $output_pdf_path) -ForegroundColor Yellow -BackgroundColor Blue

   # Delete the PDF file from the server, because it is no longer needed.
   $script = ($delete_pdf_script_template -f $pdfpath)
   Write-Host $script
   $headers = @{ "Content-Type"=$content_type; "Authorization"=("Bearer {0}" -f $access_token) }

   $response = Invoke-WebRequest -Uri $submit_script_url `
                                 -Method POST `
                                 -Headers $headers `
                                 -Body $script
   $response

   Write-Host ("Output pdf file '{0}' in the server has been deleted." -f $pdfpath) -ForegroundColor Yellow -BackgroundColor Blue
}