Public/Convert-DwAPIDeptFromServiceNowSys_User.ps1

function Convert-DwAPIDeptFromServiceNowSys_User {
    [OutputType([System.Data.DataTable])]
    Param(
        [Parameter(Mandatory=$True)]
        [System.Data.DataTable] $UserDataTable,
        [Parameter(Mandatory=$false)]
        [string] $UserFeedId = 1
    )

    <#
    .Synopsis
    Return a datatable in the DWAPI department data format from the Get-ServiceNowTable for cmn_department

    .Description
    Takes in a datatable returned from the Get-ServiceNowTable and strips the fields required for insertion into the Dashworks Department API.

    .Parameter ServiceNowDataTable
    A System.Data.DataTable object returned from the Get-ServiceNowTable function

    .Outputs
    Output type [System.Data.DataTable]
    A table with the schema as used in the DW Users API calls populated with the provided data from serviceNow cmn_department.

    .Example
    # Convert the data for use in the DWAPI
    $dtDashworksInput = Convert-DwAPIDeptFromServiceNowCMN_Department -SerivceNowDataTable $dtDepartment
    #>

    Write-Debug ("INFO: Starting conversion for cmn_department to DWAPI format.")

    $dataTable = New-Object System.Data.DataTable
    $dataTable.Columns.Add("uniqueIdentifier", [string]) | Out-Null
    $dataTable.Columns.Add("name", [string]) | Out-Null
    $dataTable.Columns.Add("parentUniqueIdentifier", [string]) | Out-Null
    $dataTable.Columns.Add("Users", [array]) | Out-Null

    foreach ($Row in $UserDataTable.Rows | where-object{$_.company_link -ne [DBNull]::Value -and $null -ne $_.company_link} | Select-Object company,company_link -unique)
    {
        $NewRow = $null
        $NewRow = $dataTable.NewRow()
        $NewRow.uniqueIdentifier = $Row.company_link
        $NewRow.name = $Row.company
        $dataTable.Rows.Add($NewRow)
    }

    foreach ($Row in $UserDataTable.Rows | Select-Object department, company_link, department_link -unique)
    {
        if ($Row.department_link -ne [DBNull]::Value)
        {
            $NewRow = $null
            $NewRow = $dataTable.NewRow()
            $NewRow.uniqueIdentifier = $Row.department_link
            $NewRow.name = $Row.department
            $NewRow.parentUniqueIdentifier = $Row.company_link
            $dataTable.Rows.Add($NewRow)
        }
    }

    foreach ($Row in $dataTable.Rows)
    {
        $AddUsers = @()
        if ($Row.parentUniqueIdentifier -ne [dbnull]::value) {
            #Has department
            foreach($user in $UserDataTable.Select("department_link = '$($Row.uniqueIdentifier)'"))
            {
                $AddUsers += ("/imports/users/{0}/items/{1}" -f $UserFeedId, $user.user_name)
            }
        }
        else
        {
            if ($UserDataTable.Columns.Contains("company_link"))
            {
                if ($UserDataTable.Columns.Contains("department_link"))
                {
                    #Add those with no listed department against the company
                    foreach($user in $UserDataTable.Select("company_link = '$($Row.uniqueIdentifier)' AND department_link is null"))
                    {
                        $AddUsers += ("/imports/users/{0}/items/{1}" -f $UserFeedId, $user.user_name)
                    }
                    #Add those with a department
                    foreach($user in $UserDataTable.Select("department_link = '$($Row.uniqueIdentifier)'"))
                    {
                        $AddUsers += ("/imports/users/{0}/items/{1}" -f $UserFeedId, $user.user_name)
                    }
                }else{
                    #Has a company only
                    foreach($user in $UserDataTable.Select("company_link = '$($Row.uniqueIdentifier)' AND department_link is null"))
                    {
                        $AddUsers += ("/imports/users/{0}/items/{1}" -f $UserFeedId, $user.user_name)
                    }
                }
            }else{
                if ($UserDataTable.Columns.Contains("department_link"))
                {
                    #Add those with a company but no department
                    foreach($user in $UserDataTable.Select("department_link = '$($Row.uniqueIdentifier)' AND department_link is not null"))
                    {
                        $AddUsers += ("/imports/users/{0}/items/{1}" -f $UserFeedId, $user.user_name)
                    }
                }
            }
        }
        $Row.Users = $AddUsers
    }

    Write-Debug ("INFO: Finished conversion for cmn_department to DWAPI format.")
    Return ,$dataTable
}