Script 1: Email properties of the target user
The script exports specified properties of the target user to a CSV file and sends the file via email. To execute the script, create a scheduled task, a custom command or a business rule configured for the User object type.
Parameters:
- $csvFilePath - Specifies the path to the CSV file to be created.
- $removeCsvFile - Specifies whether the CSV file will be removed after sending the email notification.
- $propertiesToExport - Specifies the LDAP names of the properties whose values will be present in the CSV file.
- $valueSeparator - Specifies a character that will be used to separate values of multi-valued properties in the CSV file.
- $to - Specifies the recipient email address.
- $subject - Specifies the email notification subject.
- $from - Specifies the email address from which the email notification will be sent.
- $mailServer - Specifies the FQDN of the mail server that will be used to deliver the email notification.
- $body - Specifies the email notification body.
PowerShell
$csvFilePath = "C:\Scripts\Report.csv" # TODO: modify me
$removeCsvFile = $True # TODO: modify me
$propertiesToExport = @("givenName", "middleName", "sn", "title", "co", "mail") # TODO: modify me
$valueSeparator = ";" # TODO: modify me
# Email message settings
$to = "recipient@domain.com" # TODO: modify me
$subject = "Properties of user %fullname%" # TODO: modify me
$from = "noreply@domain.com" # TODO: Modify me
$mailServer = "mail.domain.com" # TODO: Modify me
$body = "Properties of user %fullname%" # TODO: Modify me
$propertyNameToValue = @{}
foreach ($propertyName in $propertiesToExport)
{
try
{
$values = $Context.TargetObject.GetEx($propertyName)
}
catch
{
$values = $NULL
}
$value = $values -join $valueSeparator
$propertyNameToValue.Add($propertyName, $value)
}
$record = New-Object PSObject -Property $propertyNameToValue
@($record) | Export-Csv -Path $csvFilePath -NoTypeInformation
# Send mail
Send-MailMessage -to $to -From $from -Subject $subject -Body $body -SmtpServer $mailServer -Attachments $csvFilePath
if ($removeCsvFile)
{
# Remove CSV File
Remove-Item $csvFilePath -Force
}
Script 2: Export properties of all users
The script exports specified properties of all users to a CSV file. To execute the script, create a scheduled task configured for the Domain object type and add a managed domain to the Activity Scope.
Parameters:
- $csvFilePath - Specifies the path to the CSV file to be created.
- $propertiesToExport - Specifies the LDAP names of the properties whose values will be present in the CSV file.
- $valueSeparator - Specifies a character that will be used to separate values of multi-valued properties in the CSV file.
PowerShell
$csvFilePath = "C:\Scripts\Report.csv" # TODO: modify me
$propertiesToExport = @("givenName", "middleName", "sn", "title", "co", "mail", "userAccountControl") # TODO: modify me
$valueSeparator = ";" # TODO: modify me
function CreateCSVrecord ($searchResult, $propertyNames)
{
$propertyNameToValue = [ordered]@{}
$user = $Context.BindToObjectBySearchResult($searchResult)
foreach ($propertyName in $propertyNames)
{
try
{
$values = $user.GetEx($propertyName)
}
catch
{
$values = $NULL
}
if ($propertyName -eq "userAccountControl")
{
if ($values[0] -band 2)
{
$values = "Disabled"
}
else
{
$values = "Enabled"
}
}
$value = $values -join $valueSeparator
$propertyNameToValue.Add($propertyName, $value)
}
return New-Object PSObject -Property $propertyNameToValue
}
# Search parameters
$searcher = $Context.TargetObject
$searcher.Criteria = New-AdmCriteria "user"
$searcher.SearchScope = "ADS_SCOPE_SUBTREE"
$searcher.PageSize = 500
$searcher.ReferralChasing = "ADS_CHASE_REFERRALS_NEVER"
$searcher.SetPropertiesToLoad($propertiesToExport)
$searcher.VirtualRoot = $True
try
{
# Execute search
$searchResultIterator = $searcher.ExecuteSearch()
$searchResults = $searchResultIterator.FetchAll()
$records = New-Object System.Collections.ArrayList
foreach ($searchResult in $searchResults)
{
$record = CreateCSVrecord $searchResult $propertiesToExport
$records.Add($record)
}
}
finally
{
# Release resources
if ($searchResultIterator){ $searchResultIterator.Dispose() }
}
# Export CSV
$records | Export-Csv -Path $csvFilePath -NoTypeInformation