We use cookies to improve your experience.
By your continued use of this site you accept such use.
For more details please see our privacy policy and cookies policy.

Script repository

Approval requests approved during the last X days

November 23, 2023 Views: 3065

This script e-mails a report on approval requests approved during a predefined number of days.

To generate such a report upon request, you can create a custom command that runs the script. To schedule the reports, you need to create a scheduled task configured for the Domain object type and run it against any of your AD domains.

To add the script to a custom command or scheduled task, use the Run a program or PowerShell script action.


  • $numDays - Specifies the number of days to include in the report.
  • $to - Specifies email addresses of the recipient(s) of the report.
  • $subject - Specifies the email message subject.
  • $reportHeader - Specifies the email message header.
  • $reportFooter - Specifies the email message footer.
Edit Remove
$numDays = 7 # TODO: modify me
$to = "recipient@example.com" # TODO: modify me
$subject = "Requests approved during the last $numDays days" # TODO: modify me
$reportHeader = "<b>Approved operations:</b><br/><br/>" # TODO: modify me
$reportFooter = "<hr /><p><i>Please do not reply to this e-mail, it has been sent to you for notification purposes only.</i></p>" # TODO: modify me

# Bind to the Approval Requests container
$approvalsPath = $Context.GetWellKnownContainerPath("ApprovalRequests")
$aprovalsContainer = $Context.BindToObject($approvalsPath)

# Get approved Approval Requests
$requests = $aprovalsContainer.GetApprovalRequests("ADM_APPROVALSTATE_APPROVED")

# Get default web interface address
$webInterfaceAddress = "%adm-WebInterfaceUrl%"
if ([System.String]::IsNullOrEmpty($webInterfaceAddress))
    $Context.LogMessage("Default web interface address not set for Adaxes service.", "Warning") # TODO: Modify me

$sendMail = $False
$modificationDate = (Get-Date).AddDays(-$numDays)
$approvedTasks = "<ol>"

# Find recently modified requests
foreach ($requestID in $requests)
    $guid = New-Object "System.Guid" (,$requestID)
    $guid = $guid.ToString("B")
    $requestPath = "Adaxes://<GUID=$guid>"
    $request = $Context.BindToObject($requestPath)
    $requestModificationDate = ($request.Get("whenChanged")).ToLocalTime()

    if ($requestModificationDate -lt $modificationDate)
        continue # Approved earlier
    # Add requests to the message
    $requestOperation = $request.DescriptionOfOperationToApprove
    $processedBy = [Softerra.Adaxes.Utils.ObjectNameHelper]::GetObjectName($request.ProcessedBy, 'IncludeParentPath')
    $approvedTasks += "<li>Operation: $requestOperation<br/> Processed By: $processedBy<br/> Date: $requestModificationDate<br/><a href='$webInterfaceAddress`#/Browse/$guid'>Details</a></li>"
    $sendMail = $True
$approvedTasks += "</ol>"

if (-not($sendMail))
    $Context.LogMessage("No requests matching the criteria.", "Information") # TODO: Modify me

# Build report
$report = $reportHeader + $approvedTasks + $reportFooter

# Send mail
$Context.SendMail($to, $subject, $NULL, $report)

Comments 0
Leave a comment

Got questions?

Support Questions & Answers