Functions/ConvertTo-UTC.ps1
function ConvertTo-UTC { <# .SYNOPSIS Converts a datetime from local time to UTC .DESCRIPTION Converts a datetime from local time to UTC. Can optionally include the original datetime entered. .PARAMETER Date The datetime that you wish to be converted to UTC. Can be a single datetime or an array. Can be passed from the pipeline. This parameter has an alias of 'DateTime'. .PARAMETER IncludeOriginal A switch which controls if you wish to see the original inputted date in the output. .EXAMPLE ConvertTo-UTC -Date '1/25/2018 8:34:31 AM' Assuming that your local time zone is EST, and your region/culture is EN-US this would return the string Thursday, January 25, 2018 1:34:31 PM .EXAMPLE ConvertTo-UTC '2/1/2018 4:27:59 PM' Assuming that your local time zone is EST, and your region/culture is EN-US this would return the string Thursday, February 01, 2018 9:27:59 PM .EXAMPLE "3/15/2018 12:00:00 PM" | ConvertTo-UTC Assuming that your local time zone is EST, and your region/culture is EN-US this would return the string Thursday, March 15, 2018 4:00:00 PM .EXAMPLE "3/15/2018 12:00:00 PM" | ConvertTo-UTC -IncludeOriginal Assuming that your local time zone is EST, and your region/culture is EN-US this would return the string Original UTC -------- --- 3/15/2018 12:00:00 PM 3/15/2018 4:00:00 PM #> [CmdletBinding(ConfirmImpact = 'None')] [OutputType('datetime')] Param ( [Parameter(Mandatory, HelpMessage='Enter a datetime string', ValueFromPipeline, Position = 0)] [Alias('DateTime')] [datetime[]] $Date, [switch] $IncludeOriginal ) begin { Write-Verbose -Message "Starting [$($MyInvocation.Mycommand)]" $strCurrentTimeZone = (Get-CimInstance -ClassName win32_timezone).Description Write-Verbose -Message "Your local timezone is '$strCurrentTimeZone'" } process { foreach ($currentDate in $Date) { Write-Verbose -Message "You entered a Local Time of: '$currentDate'" $ReturnVal = $currentDate.ToUniversalTime() Write-Verbose -Message "The UTC time is: '$ReturnVal'" if ($IncludeOriginal) { New-Object -TypeName 'psobject' -Property ([ordered] @{LocalTime = $currentDate; UTC = $ReturnVal }) } else { Write-Output -InputObject $ReturnVal } } } end { Write-Verbose -Message "Ending [$($MyInvocation.Mycommand)]" } } #EndFunction ConvertTo-UTC |