Milestone XProtect VMS configuration and automation powered by the Milestone MIP SDK

Minimum PowerShell version


Installation Options

Copy and Paste the following command to install this package using PowerShellGet More Info

Install-Module -Name MilestonePSTools

You can deploy this package directly to Azure Automation. Note that deploying packages with dependencies will deploy all the dependencies to Azure Automation. Learn More

Manually download the .nupkg file to your system's default download location. Note that the file won't be unpacked, and won't include any dependencies. Learn More


Joshua Hendricks


(c) 2020 Milestone Systems. All rights reserved.



Windows Milestone ConfigApi ConfigurationApi XProtect MIPSDK


Add-Bookmark Add-DeviceGroup Add-DeviceGroupMember Add-EvidenceLock Add-FailoverServer Add-GenericEvent Add-Hardware Add-RecordingServer Add-RegisteredService Add-Role Add-Stream Add-User Add-UserDefinedEvent Connect-ManagementServer Copy-EvidenceLock Disconnect-ManagementServer Get-AlarmDefinition Get-AlarmLine Get-AlarmStatistics Get-Bookmark Get-Camera Get-CameraSetting Get-ConfigurationItem Get-ConnectionString Get-DeviceAcl Get-DeviceGroup Get-Diagnostics Get-EventLine Get-EvidenceLock Get-FailoverServer Get-FailoverServerGroup Get-GenericEvent Get-GenericEventDataSource Get-Hardware Get-HardwareDriver Get-HardwarePassword Get-HardwareSetting Get-IAlarmClient Get-IConfigurationService Get-Input Get-InputSetting Get-IServerCommandService Get-IServerProxyService Get-ItemState Get-Kind Get-LicenseDetails Get-Log Get-LoginSettings Get-ManagementServer Get-ManagementServerConfig Get-Metadata Get-MetadataSetting Get-MethodInfo Get-Microphone Get-MicrophoneSetting Get-MipMessageIdList Get-MipSdkEula Get-Output Get-OutputSetting Get-OverallSecurity Get-PlatformItem Get-PlaybackInfo Get-PublicViewGroup Get-RecorderConfig Get-RecorderStatusService2 Get-RecordingServer Get-RegisteredService Get-Role Get-SequenceData Get-Site Get-Snapshot Get-Speaker Get-SpeakerSetting Get-Stream Get-Token Get-Translations Get-User Get-UserDefinedEvent Get-VideoSource Get-VmoClient Get-WhoIsOnline Invoke-Method Invoke-MipSdkEula New-Alarm New-AlarmCondition New-AlarmOrder New-FailoverServerGroup New-PublicViewGroup Remove-Bookmark Remove-DeviceGroup Remove-EvidenceLock Remove-FailoverServer Remove-GenericEvent Remove-Hardware Remove-PublicViewGroup Remove-RegisteredService Remove-Role Remove-Stream Remove-User Remove-UserDefinedEvent Select-Site Send-Alarm Send-GenericEvent Send-MipMessage Send-UserDefinedEvent Set-CameraSetting Set-ConfigurationItem Set-DeviceAcl Set-HardwarePassword Set-HardwareSetting Set-InputSetting Set-License Set-ManagementServerConfig Set-MetadataSetting Set-MicrophoneSetting Set-OutputSetting Set-OverallSecurity Set-RecorderConfig Set-SpeakerSetting Set-Stream Start-Export Test-Playback Trace-Events Update-AlarmLine Update-Bookmark Update-EvidenceLock Update-License Update-RegisteredService


Export-HardwareCsv Import-HardwareCsv Get-MobileServerInfo Remove-MobileServerCertificate Set-MobileServerCertificate Get-CameraReport Get-BankTable Get-ConfigurationItemProperty Install-StableFPS Invoke-ServerConfigurator Select-Camera Select-VideoOSItem Set-ConfigurationItemProperty




Release Notes

## 1.0.86
* Add Invoke-ServerConfigurator to assist with automating server registration and enabling/disabling encryption for versions 2020 R3 and later.

## 1.0.85
* Upgrade to use MIP SDK 2020 R3
* Add StorageRetentionMinutes column to Get-CameraReport and if -IncludePlaybackInfo is used, a column named MeetsRetentionPolicy will be added with a boolean value indicating whether the oldest image is at least as old as the retention policy for the camera's storage configuration.
* Remove the empty parameter set validation on Trace-Event's EventHeaderMessage parameter. Previously it did not accept any value except an empty string due to accidental copy/paste.

## 1.0.84
* Update Trace-Events to support EventHeaderType and EventHeaderMessage parameters for better filtering of NewEventIndication messages.
* Fix hardware/device property key parsing issue where the previous regex did not anticipate special characters like - and + in device property names.
* Fix case sensitivity bug where Get-BankTable failed to return folders/tables where the ID in the name did not exactly match the supplied device id GUID.

## 1.0.83
* Updated Trace-Events to include stop conditions: MaxEvents, Timeout, MaxInterEventDelay
* Updated Trace-Events so Raw output is wrapped in a container which includes the timestamp representing the time the event was received from the Event Server. This can be useful to determine whether a delay is between you and the Event Server or the cmdlet and your pipeline.
* Added help info to the Trace-Events cmdlet
* Fixed a bug with Set-RecorderConfig so we handle when the ClientId guid is empty in RecorderConfig.xml. This can happen if you installed Recording Server without a connection to the Management Server and you have not yet registered the server.

## 1.0.82
* Minor update to remove upper limit on compatible product versions for Set-RecorderConfig and Set-ManagementServerConfig commands.

## 1.0.81
* Added a suite of new cmdlets for working with Alarms and Events. Get-AlarmLines can be used to retrieve existing alarms with an optional conditional filter. New-Alarm and Send-Alarm can be used to generate new alarms. Update-AlarmLine can be used to change properties or add comments to existing alarms. Get-EventLines can be used to retrieve event records.

## 1.0.80
* Improve the way local DateTime values are interpreted in the following cmdlets: Get-Snapshot, Get-Log, Get-Bookmark, Add-Bookmark, Add-EvidenceLock, Start-Export and Test-Playback. Previously a non-utc DateTime value was converted to UTC incorrectly which yielded unexpected results.
* Fix Add-EvidenceLock bug where evidence locks are created with an incorrect RetentionOption.RetentionUnits value. A value of -1 is expected for Indefinite and User-defined retention options and a value of 0 was used previously. This resulted in the warning message 'The expiry option originally selected for this lock is not available anymore' to be displayed when the evidence lock details were displayed in Smart Client.'
* Removed LocalTimestamp switch parameter from Test-Playback to simplify the parameter set as a part of the improvements to DateTime local/utc timestamp handling
* Using Remove-EvidenceLock now requires you to add a -Force switch parameter. Omitting this switch will result in an InvalidOperationException error.
* Using Remove-Hardware without the -Force switch parameter now results in an InvalidOperationException error. Previously only a warning was thrown, and an error is more in line with other cmdlets such as ConvertTo-SecureString for example.
* Added Write-Progress to the Get-Snapshot cmdlet to provide visual progress reporting for long image sequence retrievals.
* Fixed bug with Get-CameraSetting where one or more null values could be written to the pipeline instead of returning nothing. Also will now throw an error when a named setting key could not be found.
* Added Reference parameter to Add-Bookmark to support user-supplied Bookmark IDs. Omitting this parameter will result the same behavior as prior versions where an autogenerated id like 'no.012345' is used.
* Added SkipConfiguration switch to Add-Hardware which, when supplied, will mean Add-Hardware completes faster on devices with many channels. This is useful if you already plan to iterate through and configure all the channels anyway.
* Added Raw switch to Trace-Events so that the original object is written to the pipeline instead of a pscustomobject derived from the event. This makes it possible to extract more detail, for example from analytic events.
* Add-Hardware parameter 'GroupPath' is now optional, with a default value of '/New Cameras/'
* Added Get and Set-ConfigurationItemProperty cmdlets to simplify the retrieval and modification of properties based on a key name. Previously you had to find the property yourself using a Where-Object. The new cmdlets makes this more concise.
* Experimental: Added Get and Set-ManagementServerConfig. Similar to Set-RecorderConfig, the Set-ManagementServerConfig cmdlet can help with automating Management Server registration with the authorization or IDP server. Note that these cmdlets are somewhat experimental and not supported by MIP SDK.

## 1.0.79
* Update Get-ConfigurationItem to allow user to provide a path without the Path parameter name
* Update Set-MobileServerCertificate to eliminate the use of netsh http update sslcert since the update command is not present on all Windows installations
* Modify behavior of Get-Bookmark to improve ease of use. Bookmarks will now be enumerated from StartTime to EndTime instead of requiring the user to determine whether there are more results available.
* Breaking change to Get-SequenceData to improve ease of use. The cmdlet's parameter signature and behavior is now similar to the new Get-Bookmark cmdlet such that you can specify the StartTime and EndTime and regardless of the number of results, all results will be returned - even if it exceeds the PageSize.
* Add CropToTimeSpan switch to Get-SequenceData so that you don't have to manually check the start or end times of the sequences in your results if you're only interested in a specific period of time.
* Fix IncludePlaybackInfo behavior on Get-CameraReport to ensure the associated columns are added to every row, even if the camera is unreachable or there are no recordings. Previously if one or more cameras lacked playback info data, Out-GridView would not show the columns at all because the property was not present in all rows of data.

## 1.0.78

* Update MipSdkRedist reference to 2020 R2 (20.2)
* Remove Initialize-RecordingServer cmdlet as it was obsoleted in MIP SDK 2020 R2
* Replace incorrect examples in Select-Camera and Select-VideoOSItem
* Minor change to Select-Camera and Select-VideoOSItem to remove the -NoEnumerate parameter from the Write-Object calls

## 1.0.77

* Minor change to Get-RecordingServer and Get-Hardware to access the /RecordingServerFolder object directly instead of getting the ManagementServer object and accessing the .RecordingServerFolder property.
* Add IncludeNetworkState to Get-CameraReport to optionally test whether devices are reachable using Test-NetConnection using the host and port from the hardware address.
* Fix Get-User bug where filtering with UserName parameter doesn't work unless you also provide a RoleName parameter.
* Add Select-Camera and the more generic Select-VideoOSItem cmdlets which launch a user interface for selecting one or more items from the VMS.

## 1.0.76

* Fix bug in Send-MipMessage where an exception was thrown unless -UseEnvironmentManager switch was present

## 1.0.75

* Add Get-MipMessageIdList to retrieve a list of known MessageId's
* Add Send-MipMessage to provide easy access to low level MIP SDK messaging functionality

## 1.0.74

* Add Get-WhoIsOnline

## 1.0.73

* Update DiagnosticsTool to 2020 R1 for Get-Diagnostics cmdlet
* Add EndTime and Interval parameters to Get-Snapshot for an easy to way to retrieve a series of jpegs between -Timestamp and -EndTime values
* Fix an invalid cast in Add-DeviceGroupMember when DeviceCategory is Output ([Issue 3](

## 1.0.72

* Require MipSdkRedist version 20.1.0
* Update FQID parameter of Get-PlatformItem to take FQID from pipeline by property name for better use in the pipeline after Get-ItemState
* Update documentation for Get-Bookmark where Timestamp was used instead of StartTime as a parameter name
* Update Autofac reference to to match the version included in MIP SDK 2020 R1
* Fix Set-Stream to allow easier modification of Name, LiveMode and StreamReferenceId properties via parameters

## 1.0.71

* Expand capabilities of Get-PlatformItem to enable retrieving some or all items from the configuration.
* Add MessageId to Trace-Events output for easier identification of the source event MessageId

Version History

Version Downloads Last updated
1.0.86 (current version) 137 11/24/2020
1.0.85 52 11/18/2020
1.0.84 183 11/5/2020
1.0.83 49 10/30/2020
1.0.82 159 10/10/2020
1.0.81 1 9/18/2020
1.0.80 12 9/16/2020
1.0.79 388 8/4/2020
1.0.78 374 6/16/2020
1.0.77 303 5/8/2020
1.0.76 301 4/7/2020
1.0.74 16 4/7/2020
1.0.73 51 3/30/2020
1.0.72 142 3/12/2020
1.0.71 358 1/28/2020
1.0.70 89 1/11/2020
1.0.69 118 12/11/2019
1.0.68 14 12/10/2019
1.0.67 8 12/9/2019
1.0.66 8 12/9/2019
1.0.65 215 11/8/2019
1.0.64 87 11/1/2019
1.0.62 118 10/18/2019
1.0.61 24 10/17/2019
1.0.60 83 10/8/2019
1.0.58 52 10/1/2019
1.0.57 11 10/1/2019
1.0.56 67 9/27/2019
1.0.55 319 8/15/2019
1.0.54 17 8/13/2019
1.0.53 6 8/13/2019
1.0.52 8 8/13/2019
1.0.51 110 7/28/2019
1.0.50 6 7/27/2019
1.0.49 8 7/27/2019
1.0.48 15 7/25/2019
1.0.47 28 7/20/2019
1.0.46 20 7/19/2019
1.0.45 7 7/19/2019
1.0.44 33 7/9/2019
1.0.43 9 7/8/2019
1.0.42 29 7/1/2019
1.0.41 66 6/18/2019
1.0.40 54 6/11/2019
1.0.39 25 6/10/2019
1.0.38 8 6/8/2019
1.0.37 17 6/6/2019
1.0.36 9 6/5/2019
1.0.35 12 6/4/2019
1.0.34 19 5/28/2019
1.0.33 34 5/16/2019
1.0.32 8 5/16/2019
1.0.31 8 5/16/2019
1.0.30 20 5/13/2019
1.0.29 17 5/9/2019
1.0.28 8 5/9/2019
1.0.27 10 5/8/2019
1.0.26 7 5/8/2019
1.0.25 11 5/8/2019
1.0.24 12 5/4/2019
1.0.23 6 5/3/2019
1.0.22 11 5/1/2019
1.0.21 13 5/1/2019
1.0.20 11 4/30/2019
1.0.19 7 4/30/2019
1.0.18 6 4/30/2019
1.0.17 17 4/27/2019
1.0.16 9 4/26/2019
1.0.15 7 4/26/2019
1.0.14 7 4/25/2019
1.0.13 8 4/25/2019
1.0.12 8 4/23/2019
1.0.11 13 4/19/2019
1.0.10 9 4/18/2019
1.0.9 10 4/18/2019
1.0.8 10 4/17/2019
1.0.7 6 4/16/2019
1.0.6 17 4/15/2019