public/Export-AxisRecording.ps1
<#
.SYNOPSIS Exports an Axis recording to a specified file path. .DESCRIPTION The Export-AxisRecording function exports a recording from an Axis device to a specified file path. .PARAMETER Device The Hostname or IP address of the Axis device. .PARAMETER StartTime The start time of the recording to export. .PARAMETER StopTime The stop time of the recording to export. .PARAMETER FilePath The file path where the exported recording will be saved. A filename must be included. .PARAMETER Format The format in which the recording should be exported. The default format is matroska. Most cameras only support the matroska format. .EXAMPLE Export-AxisRecording -Device 192.168.1.100 -StartTime (Get-Date "2022-01-01 00:00:00") -StopTime (Get-Date "2022-01-01 01:00:00") -FilePath "C:\Recordings\recording.mkv" This example exports a recording from the Axis device that occurred between January 1, 2022, 00:00:00 and January 1, 2022, 01:00:00. The exported recording will be saved as "C:\Recordings\recording.mkv". #> function Export-AxisRecording { [cmdletbinding( SupportsShouldProcess = $true, ConfirmImpact='high' )] Param( [Parameter(Mandatory)] [String]$Device, [Parameter(Mandatory)] [DateTime]$StartTime, [Parameter(Mandatory)] [DateTime]$StopTime, [Parameter(Mandatory)] [String]$FilePath, [Parameter()] [String]$Format="matroska" ) if($FilePath -notmatch "\.[A-Z1-9]{3}") { throw "Invalid Path. Please specify a valid path with a file name and extension." } $DateTimeFormat = "yyyy-MM-ddThh:mm:ss" $begin = $StartTime.ToString($DateTimeFormat) $end = $StopTime.ToString($DateTimeFormat) if($StartTime.Kind -ne 'Utc') { $begin = $StartTime.ToUniversalTime().ToString($DateTimeFormat) } if($StopTime.Kind -ne 'Utc') { $end = $StopTime.ToUniversalTime().ToString($DateTimeFormat) } $Param = @{ Device = $Device StartTime = $StartTime StopTime = $StopTime MaxResults = 1 ThrowErrorOnTimeDifference = $true } Try { $Recording = Get-AxisRecording @Param } catch { #Time is wrong on device. Ask user if we should ignore this and continue. $SPDescription = "Time Difference Warning" $SPWarning = "Do you want to continue?" $SPCaption = "The time difference between the device and the current time is greater than 60 seconds." if(!$PSCmdlet.ShouldProcess($SPDescription,$SPWarning,$SPCaption)) { return } $Param.ThrowErrorOnTimeDifference = $false $Recording = Get-AxisRecording @Param } if($Recording) { $Param = @{ Device = $Device Path = "/axis-cgi/record/export/exportrecording.cgi?schemaversion=1" OutFile = $FilePath } $Param.Path += "&recordingid=$($Recording.recordingid)" $Param.Path += "&diskid=$($Recording.diskid)" $Param.Path += "&exportformat=$Format" $Param.Path += "&starttime=$begin" $Param.Path += "&stoptime=$end" } Write-Warning $Param.Path $OldProgressPreference = $ProgressPreference $ProgressPreference = 'SilentlyContinue' Try{ Invoke-AxisWebApi @Param } Catch { $ProgressPreference = $OldProgressPreference Throw $_ } } |