Private/Format-ATRestDates.ps1
<#
.SYNOPSIS Changes all datetime fields in a given object into a UTC String for Autotask. .DESCRIPTION The datetime String will be in the Autotask Rest API Format "yyyy-MM-ddThh:mm:ss.fffZ". Every field of type "System.DateTime" will turn into a string. .PARAMETER InputObject PSCustomObject intended to post or patch an Autotask Resource. .EXAMPLE Format-ATRestDates -InputObject $Object Does not return anything, it changes the datetime values within the given Object itself. #> function Format-ATRestDates { [CmdletBinding()] param ( [Parameter(ValueFromPipeline = $true, Mandatory = $true)]$InputObject ) $DateFormat = "yyyy-MM-ddTHH:mm:ss.fff" if ($InputObject.GetType() -eq [hashtable]) { $Dates = $InputObject.GetEnumerator() | Where-Object { $_.Value.GetType() -eq [System.DateTime] } } else { $Dates = $InputObject.PSObject.Properties | Where-Object -Property TypeNameOfValue -eq "System.DateTime" } foreach ($Date in $Dates) { $ConvertedDate = $InputObject."$($Date.Name)".ToUniversalTime().ToString($DateFormat) $InputObject."$($Date.Name)" = $ConvertedDate } } |