Instantly share code, notes, and snippets.

Embed
What would you like to do?
Workday Granfeldt PowerShell Management Agent Import Script for Microsoft Identity Manager. Supporting blog post located here https://blog.darrenjrobinson.com/building-a-microsoft-identity-manager-powershell-management-agent-for-workday-hr/
param (
$Username,
$Password,
$Credentials,
$OperationType,
[bool] $usepagedimport,
$pagesize
)
$DebugFilePath = "C:\PROGRA~1\MICROS~2\2010\SYNCHR~1\EXTENS~2\Workday\Debug\WDUsersImport.txt"
if (!(Test-Path $DebugFilePath)) {
$DebugFile = New-Item -Path $DebugFilePath -ItemType File
}
else {
$DebugFile = Get-Item -Path $DebugFilePath
}
"Starting Import as : " + $OperationType + " - " + (Get-Date) | Out-File $DebugFile -Append
"Paged Import : " + $usepagedimport | Out-File $DebugFile -Append
"PageSize : " + $pagesize | Out-File $DebugFile -Append
# Workday Powershell Module
import-module -name "WorkdayAPI"
# Setup WorkdayAPI Module
$creds = New-Object System.Management.Automation.PSCredential ($Username, $Password)
Set-WorkdayCredential -Credential $creds
Set-WorkdayEndpoint -Endpoint Human_Resources -Uri 'https://SERVICE.workday.com/ccx/service/TENANT/Human_Resources/v30.2'
Save-WorkdayConfiguration
if (!$global:tenantObjects) {
# *********************** IMPORT **********************************
# Get Workday Users
$WDayRecordsBase = Get-WorkdayWorker -WorkerType WID
"Retrieved Base Workday Records for $($WDayRecordsBase.Count) Users" | Out-File $DebugFile -Append
# ***************************************************************
# Counter to know where we are up to processing the Import
# Starting at minus 1 as our first object is 0 and I'm incrementing at the start of the loop.
[int]$global:objectsImported = -1
# An Array for the retuned objects to go into
$global:tenantObjects = @()
# Add in our first objects
$global:tenantObjects += $WDayRecordsBase
# Set last object ID
$global:lastsourceObjectID = "randomstringthatwillnevermatchaGUIDforthefirstiteration"
}
# ********************* Process users into the MA *******************
[int]$objectpagecount = 0
foreach ($global:user in $global:tenantObjects) {
$global:user = $global:tenantObjects[$global:objectsImported + 1]
if (!$global:user -or ($global:objectsImported + 1 -eq $global:tenantObjects.count)) {
# nothing left to process
$global:MoreToImport = $false
break
}
if ($global:user.WorkerWid) {
# Get Full Record
$userRecord = $null
$userRecord = Get-WorkdayWorker -WorkerType WID $global:user.WorkerWid -IncludeWork -IncludePersonal
if ($userRecord) {
$obj = @{}
$obj.Add("WorkerWid", $userRecord.WorkerWid)
$obj.Add("objectClass", "WDUser")
$obj.Add("BusinessTitle", $userRecord.BusinessTitle)
$obj.Add("FirstName", $userRecord.FirstName)
$obj.Add("JobProfileName", $userRecord.JobProfileName)
$obj.Add("LastName", $userRecord.LastName)
$obj.Add("Location", $userRecord.Location)
$obj.Add("PreferredName", $userRecord.PreferredName)
$obj.Add("UserId", $userRecord.UserId)
$obj.Add("WorkerDescriptor", $userRecord.WorkerDescriptor)
$obj.Add("WorkerId", $userRecord.WorkerId)
$obj.Add("WorkerType", $userRecord.WorkerType)
$obj.Add("WorkerTypeReference", $userRecord.WorkerTypeReference)
$obj.Add("WorkSpace", $userRecord.WorkSpace)
"UserObjectID: " + $userRecord.WorkerId | Out-File $DebugFile -Append
# Pass the User Object to the MA
$obj
$objectpagecount++
$global:objectsImported++
"Paged Import User count: " + $objectpagecount | Out-File $DebugFile -Append
"Objects Imported count: " + $global:objectsImported | Out-File $DebugFile -Append
"Objects Remaining count: " + ($global:tenantObjects.count - $global:objectsImported - 1) | Out-File $DebugFile -Append
}
if ($objectpagecount -eq $pagesize) {
$global:MoreToImport = $true
"More to Import: " + $objectpagecount | Out-File $DebugFile -Append
break
}
}
}
# ***********************************************************
#endregion
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment