Get-VETimeSpanTimestamps.ps1
|
function Get-VETimeSpanTimestamps { <# .SYNOPSIS Return start and end timestamps for a timespan .DESCRIPTION Return start and end timestamps for a timespan .INPUTS The VE timespan object can be piped to the function .EXAMPLE $VETimeSpan | Get-VEDateTimeOffsets Example of how to get start and end timestamps for a timespan .NOTES Author: Decembry Quentin #> [CmdletBinding(DefaultParameterSetName='TimeSpan')] [OutputType([PSCustomObject])] [Alias()] param( # The VE timespan # Default: Last24Hours [Parameter(Mandatory=$false,ValueFromPipeline=$true,ParameterSetName='TimeSpan')] [VictronEnergy.TimeSpan] $TimeSpan = [VictronEnergy.TimeSpan]::Last24Hours, # Start time # Default: (Get-Date -Second 0 -Millisecond 0).AddDays(-1) -> Yesterday [Parameter(Mandatory=$false,ParameterSetName='DateTime')] [DateTime] $StartTime = (Get-Date -Second 0 -Millisecond 0).AddDays(-1), # End time # Default: (Get-Date -Second 0 -Millisecond 0) -> Now [Parameter(Mandatory=$false,ParameterSetName='DateTime')] [DateTime] $EndTime = (Get-Date -Second 0 -Millisecond 0) ) begin { if ($PSBoundParameters['Debug']) { $DebugPreference = 'Continue' } if ($MyInvocation.MyCommand.ModuleName) { $Private:ThisFunction = '{0}::{1}' -f $MyInvocation.MyCommand.ModuleName, $MyInvocation.MyCommand.Name } else { $Private:ThisFunction = '{0}::{1}' -f (Get-PSCallStack)[0].ScriptName, $MyInvocation.MyCommand.Name } Write-Debug "[$Private:ThisFunction] Begin" } process { Write-Debug "[$Private:ThisFunction] Process timespan $TimeSpan" switch ($PSCmdlet.ParameterSetName) { 'TimeSpan' { switch ($TimeSpan) { 'LastHour' { $EndTime = Get-Date -Second 0 -Millisecond 0 $StartTime = $EndTime.AddHours(-1) } 'Last3Hours' { $EndTime = Get-Date -Second 0 -Millisecond 0 $StartTime = $EndTime.AddHours(-3) } 'Last6Hours' { $EndTime = Get-Date -Second 0 -Millisecond 0 $StartTime = $EndTime.AddHours(-6) } 'Last12Hours' { $EndTime = Get-Date -Second 0 -Millisecond 0 $StartTime = $EndTime.AddHours(-12) } 'Last24Hours' { $EndTime = Get-Date -Second 0 -Millisecond 0 $StartTime = $EndTime.AddHours(-24) } 'Last2Days' { $EndTime = Get-Date -Second 0 -Millisecond 0 $StartTime = $EndTime.AddDays(-2) } 'Last7Days' { $EndTime = Get-Date -Second 0 -Millisecond 0 $StartTime = $EndTime.AddDays(-7) } 'Last30Days' { $EndTime = Get-Date -Second 0 -Millisecond 0 $StartTime = $EndTime.AddDays(-30) } 'Last90Days' { $EndTime = Get-Date -Second 0 -Millisecond 0 $StartTime = $EndTime.AddDays(-90) } 'Last6Months' { $EndTime = Get-Date -Second 0 -Millisecond 0 $StartTime = $EndTime.AddMonths(-6) } 'LastYear' { $EndTime = Get-Date -Second 0 -Millisecond 0 $StartTime = $EndTime.AddYears(-1) } 'Today' { $EndTime = Get-Date -Second 0 -Millisecond 0 $StartTime = Get-Date -Hour 0 -Minute 0 -Second 0 -Millisecond 0 } 'Yesterday' { $EndTime = Get-Date -Hour 0 -Minute 0 -Second 0 -Millisecond 0 $StartTime = $EndTime.AddDays(-1) } 'TheDayBefore' { $EndTime = (Get-Date -Hour 0 -Minute 0 -Second 0 -Millisecond 0).AddDays(-1) $StartTime = $EndTime.AddDays(-1) } 'ThisDayLastWeek' { $EndTime = (Get-Date -Hour 0 -Minute 0 -Second 0 -Millisecond 0).AddDays(-6) $StartTime = $EndTime.AddDays(-1) } 'ThisWeek' { $EndTime = Get-Date -Hour 0 -Minute 0 -Second 0 -Millisecond 0 $StartTime = $EndTime.AddDays(-$EndTime.DayOfWeek+1) } 'PreviousWeek' { $EndTime = (Get-Date -Hour 0 -Minute 0 -Second 0 -Millisecond 0) $EndTime = $EndTime.AddDays(-$EndTime.DayOfWeek+1) $StartTime = $EndTime.AddDays(-7) } 'ThisMonth' { $EndTime = Get-Date -Hour 0 -Minute 0 -Second 0 -Millisecond 0 $StartTime = $EndTime.AddDays(-$EndTime.Day+1) } 'PreviousMonth' { $EndTime = (Get-Date -Hour 0 -Minute 0 -Second 0 -Millisecond 0) $EndTime = $EndTime.AddDays(-$EndTime.Day+1) $StartTime = $EndTime.AddMonths(-1) } 'ThisYear' { $EndTime = Get-Date -Hour 0 -Minute 0 -Second 0 -Millisecond 0 $StartTime = $EndTime.AddDays(-$EndTime.DayOfYear+1) } 'PreviousYear' { $EndTime = (Get-Date -Hour 0 -Minute 0 -Second 0 -Millisecond 0) $EndTime = $EndTime.AddDays(-$EndTime.DayOfYear+1) $StartTime = $EndTime.AddYears(-1) } default { throw "Unsupported timespan '$_'" } } } 'DateTime' { Write-Debug "[$Private:ThisFunction] Dates validation" Write-Debug "[$Private:ThisFunction] Strip seconds and milliseconds" $StartTime = Get-Date $StartTime -Second 0 -Millisecond 0 $EndTime = Get-Date $EndTime -Second 0 -Millisecond 0 if ($EndTime -eq $StartTime) { Write-Warning "[$Private:ThisFunction] Start and end time are equal" } elseif ($EndTime -lt $StartTime) { Write-Warning "[$Private:ThisFunction] End date is before start date. Running automatic correction." $tmp = $EndTime $EndTime = $StartTime $StartTime = $tmp } } default { throw "Unsupported parameter set name '$_'" } } [PSCustomObject] @{ PSTypeName = 'VictronEnergy.TimeSpanTimestamps' Start = ([System.DateTimeOffset]$StartTime.ToUniversalTime()).ToUnixTimeSeconds() End = ([System.DateTimeOffset]$EndTime.ToUniversalTime()).ToUnixTimeSeconds() } } end { Write-Debug "[$Private:ThisFunction] End" } } # SIG # Begin signature block # MIIIbQYJKoZIhvcNAQcCoIIIXjCCCFoCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUUYFGDL5hUlK3wg2AhzxNzu37 # ZzOgggX4MIICYjCCAgigAwIBAgITXwAAAAITcsrrTJecaQAAAAAAAjAKBggqhkjO # PQQDAjAkMQswCQYDVQQGEwJCRTEVMBMGA1UEAxMMSG9tZSBSb290IENBMB4XDTIy # MDUwNTE0MDMxOFoXDTMyMDUwNTE0MTMxOFowJzELMAkGA1UEBhMCQkUxGDAWBgNV # BAMTD0hvbWUgSXNzdWluZyBDQTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDOT # aIIU+QU7LfsmyPqGkCf53SrJuaBPpb5iVILCvG3cQxL6vgIZaGRaKlzYO+lq3CnN # b4rtJW2d7rlTeehXtpWjggEUMIIBEDAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4E # FgQUYf1/nMEp3Df+Nzi+Hvk7FymPsrMwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBD # AEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUfSS6 # P6qin/3ibmvelGJQhV1r1VgwOwYDVR0fBDQwMjAwoC6gLIYqaHR0cDovL3BraS5x # ZWRpbnV4LmJlL0hvbWUlMjBSb290JTIwQ0EuY3JsMEYGCCsGAQUFBwEBBDowODA2 # BggrBgEFBQcwAoYqaHR0cDovL3BraS5xZWRpbnV4LmJlL0hvbWUlMjBSb290JTIw # Q0EuY3J0MAoGCCqGSM49BAMCA0gAMEUCIERRzfMu3vx9vb+Apud4sDkOEKhKrCEl # gSsedbjZRJ+YAiEA8BBaOqhnbnsUBIX2nty77euunwoAHrCuWzab5xJiy0UwggOO # MIIDM6ADAgECAhNRAAAAMJpCm89a8zgYAAAAAAAwMAoGCCqGSM49BAMCMCcxCzAJ # BgNVBAYTAkJFMRgwFgYDVQQDEw9Ib21lIElzc3VpbmcgQ0EwHhcNMjIwNzExMDc0 # NzQ3WhcNMjQwNzExMDc1NzQ3WjAbMRkwFwYDVQQDExBEZWNlbWJyeSBRdWVudGlu # MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjALWtmJ1AQG77y9rUBbT # HXR9FZokTP01bBWfNzk4Kenr/Xpm7Jt09PqLoNS8ToWWKRz9EkM+jg7lnLljWKcO # G+fT1TbaEwxOpncugnbrioQQonbdWpyn0P7PxlqjUQdWd5Z7xQ0Z8RO3vvERWtDA # L9QH0VBHNK4WqdWh3ElV6ogJUsy5hYxVTIU0K5VEYkIT4qvqq0RdajKavGWIr57R # EsYv52Jcyh9FNgZKGdu9NwSKZUvkwHxGsI8zmwfP1I6QRkzsqPXlpk7A8NTD3+h+ # 4Y5AprRFyAWrVNYH+UQQe2D/PjjbKtfsU9xzG9EnqJF09pVRchapis+8DbfWnoC8 # iQIDAQABo4IBfTCCAXkwOgYJKwYBBAGCNxUHBC0wKwYjKwYBBAGCNxUIhorlOcPr # DIadiwndkzuHjPAAPqb1CYWVxXgCAWQCAQowEwYDVR0lBAwwCgYIKwYBBQUHAwMw # DgYDVR0PAQH/BAQDAgeAMBsGCSsGAQQBgjcVCgQOMAwwCgYIKwYBBQUHAwMwHQYD # VR0OBBYEFAkUh200U2U2epAoy2ZvT7nwAYGBMB8GA1UdIwQYMBaAFGH9f5zBKdw3 # /jc4vh75Oxcpj7KzMD4GA1UdHwQ3MDUwM6AxoC+GLWh0dHA6Ly9wa2kucWVkaW51 # eC5iZS9Ib21lJTIwSXNzdWluZyUyMENBLmNybDBJBggrBgEFBQcBAQQ9MDswOQYI # KwYBBQUHMAKGLWh0dHA6Ly9wa2kucWVkaW51eC5iZS9Ib21lJTIwSXNzdWluZyUy # MENBLmNydDAuBgNVHREEJzAloCMGCisGAQQBgjcUAgOgFQwTRGVjZW1icnkuUUBo # b21lLmxhbjAKBggqhkjOPQQDAgNJADBGAiEAh39vHCgqIDL4XazyHPiChMbu0by+ # aFP7rdzlJmM0K6ACIQCaP4CXolxlzdfkJsoIoDIJUrunYIlZ0yxs9OSnG1qmCjGC # Ad8wggHbAgEBMD4wJzELMAkGA1UEBhMCQkUxGDAWBgNVBAMTD0hvbWUgSXNzdWlu # ZyBDQQITUQAAADCaQpvPWvM4GAAAAAAAMDAJBgUrDgMCGgUAoHgwGAYKKwYBBAGC # NwIBDDEKMAigAoAAoQKAADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor # BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQUKXabaDsm # JV8ra9qNvJSsk8p/JVQwDQYJKoZIhvcNAQEBBQAEggEADPUgPQwg2445Colk2ni1 # Jxx8aanMvpn/k+mYw9luvFENMW3IhdeIwLiWdwQd0MIaNX08lIC6Qa3dOHZFXYeR # Xd5t2zZLOaHl9uL4h2jHRT4YvmdkEnLJMbcKyFTBHGkZ3QE4FYXn9xHjdSnUXKSk # V2L5Z+IqesfDCrQEKbCH7jSpYluTGAaRT+aESmPD7U50LBttCAQ33hcbnnpg2Lcw # uaVSn8FDo6joTqvDPVQkwj5iH+mbUu9BX1hP+lrBufRtJobd5Dd9kY52D6DG2xfm # Q+oRsHOiXjYBEZ5uQ4FrKLyVMFVlb/pwCuz98Ii2K7HrkVB0tp5L7eGqVd7iSFle # 0w== # SIG # End signature block |