ChangeLog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
Versioning is based on the first two parts of Milestone's latest MIP SDK version (major and minor) with a build number incrementing from 0 for each new module update made between official Milestone MIP SDK releases.
[22.3.2] unreleased
[22.3.1] 2023-02-09
Added
- Introduced
Set-VmsHardwareDriver
which can be used to perform a "hardware replacement" on XProtect VMS versions 2023 R1 and later. This is an exciting and long awaited capability that has been made available in the Configuration API.
Fixed
- Fixed issue #77 - error thrown by
Remove-VmsDeviceGroup
when used with-Recurse
on 2019 or older. - Fixed snapshot timeout issues in
Get-VmsCameraReport
by adding aSnapshotTimeoutMS
parameter with a default value of 10 seconds.
Changed
- The previous code signing certificate has expired and a new one has been
issued to Milestone Systems, Inc. with the subject 'CN="Milestone Systems, Inc.", OU=Custom Development Americas, O="Milestone Systems, Inc.", L=Lake Oswego, S=Oregon, C=US',
issued by 'CN=SSL.com Root Certification Authority RSA, O=SSL Corporation, L=Houston, S=Texas, C=US'.
In order to upgrade from a previous version, you will need to run
Install-Module MilestonePSTools -SkipPublisherCheck
. Clear-VmsCache
will now also invokeVideoOS.Platform.SDK.Environment.ReloadConfiguration
which will make it possible to access stream and status information for devices that have been added since the start of the PowerShell session.- Improved
Get-VmsCameraStream
andSet-VmsCameraStream
to minimize the number of times the configuration is saved server-side when changing multiple settings, and to reduce the risk that the state of the settings in a local stream reference don't match the updated state of the stream on the server. Get-HardwareDriver
has been renamed toGet-VmsHardwareDriver
and an alias for the old name has been added to prevent breaking changes.
Removed
[22.3.0] 2022-11-29
Summary
This version introduces significantly improved cmdlets for managing device groups and roles, making room for the removal (and aliasing) of many older cmdlets. In addition to these changes, this module makes use of the 2022 R3 MIP SDK binaries.
Most parameters in the new cmdlets implement two very useful features for
interactive PowerShell use: argument completers, and argument transformers. The
completers make it possible to tab-complete or list-complete using CTRL+Space. For
example, try Get-VmsRole -Name
then press TAB after ensuring there is a space
after "-Name". You should see a list of the names of your existing roles.
Combining these argument completers with argument transformers makes it possible
for a function that expects a "Role" object to receive a role "name" instead, and
then go retrieve the role object for you in the background and substitute the
string value you provided with the associated role object. For example, the
Set-VmsRole
cmdlet expects a Role
object, but you can do Set-VmsRole -Role Administrators -Description "Foo"
and it will work anyway.
Here is a quick summary of the cmdlet additions/removals. In almost all cases,
the cmdlets removed have replacement *-Vms*
cmdlets and the new cmdlets are
aliasing the old cmdlet names with very few breaking changes in terms of
parameters.
Cmdlet Changes
Name | Status | Comment |
---|---|---|
Get-VmsConnectionString | Added | Replaces Get-ConnectionString |
Set-VmsConnectionString | Added | |
Get-VmsDeviceGroup | Added | Replaces Get-DeviceGroup |
New-VmsDeviceGroup | Added | Replaces Add-DeviceGroup |
Remove-VmsDeviceGroup | Added | Replaces Remove-DeviceGroup |
Set-VmsDeviceGroup | Added | |
Add-VmsDeviceGroupMember | Added | Replaces Add-DeviceGroupMember |
Get-VmsDeviceGroupMember | Added | |
Remove-VmsDeviceGroupMember | Added | |
Join-VmsDeviceGroupPath | Added | |
Split-VmsDeviceGroupPath | Added | |
Get-VmsHardware | Added | Replaces Get-Hardware |
Get-VmsRecordingServer | Added | Replaces Get-RecordingServer |
Set-VmsRecordingServer | Added | |
Get-VmsRole | Added | Replaces Get-Role |
New-VmsRole | Added | Replaces Add-Role |
Remove-VmsRole | Added | Replaces Remove-Role |
Set-VmsRole | Added | |
Add-VmsRoleMember | Added | Replaces Add-User |
Get-VmsRoleMember | Added | Replaces Get-User |
Remove-VmsRoleMember | Added | Replaces Remove-User |
Get-VmsRoleOverallSecurity | Added | |
Set-VmsRoleOverallSecurity | Added | |
Get-VmsToken | Added | Replaces Get-Token |
Get-CameraReport | Removed | |
Get-ConnectionString | Removed | Now aliased to Get-VmsConnectionString |
Add-DeviceGroup | Removed | Now aliased to New-VmsDeviceGroup |
Get-DeviceGroup | Removed | Now aliased to Get-VmsDeviceGroup |
Remove-DeviceGroup | Removed | Now aliased to Remove-VmsDeviceGroup |
Add-DeviceGroupMember | Removed | Now aliased to Add-VmsDeviceGroupMember |
Add-Hardware | Removed | |
Get-Hardware | Removed | Now aliased to Get-VmsHardware |
Export-HardwareCsv | Removed | |
Import-HardwareCsv | Removed | |
Remove-MobileServerCertificate | Removed | |
Set-MobileServerCertificate | Removed | |
Get-RecordingServer | Removed | Now aliased to Get-VmsRecordingServer |
Add-Role | Removed | Now aliased to New-VmsRole |
Get-Role | Removed | Now aliased to Get-VmsRole |
Remove-Role | Removed | Now aliased to Remove-VmsRole |
Get-Token | Removed | Now aliased to Get-VmsToken |
Add-User | Removed | Now aliased to Add-VmsRoleMember |
Get-User | Removed | Now aliased to Get-VmsRoleMember |
Remove-User | Removed | Now aliased to Remove-VmsRoleMember |
Added
- New
VmsDeviceGroup*
cmdlets for adding, removing, and changing device groups and device group members for all device types. - New
VmsRole*
cmdlets for getting, adding, setting, and removing roles, role members, and overall security permissions. - New
Get-VmsRecordingServer
andSet-VmsRecordingServer
cmdlets.
Fixed
Import-VmsHardware
did not apply hardware and device names after adding hardware which uses a DNS name instead of an IP or URI format.Get-VmsLog
usesWrite-Progress
to provide a progress bar, but did not "complete" the progress when finished, leaving a progress bar up until the script completes.Connect-ManagementServer -ShowDialog
opens a login dialog but that dialog did not always have keyboard focus. Now, hopefully, the dialog always shows on top of the shell, and has keyboard focus.Import-VmsLicense
failed due to missing$ms = Get-VmsManagementServer
. So unless you had already done that in your own global or local scope, this cmdlet did not work.Set-VmsCameraStream
incorrectly attempted to save changes to stream settings even if the key for the setting didn't exist on the camera. This did not result in an error, but did cause an unnecessary API call and a confusing verbose message.- After removing hardware, the removed hardware could still be returned by Get-Hardware. Now the HardwareFolder cache is cleared to prevent this.
- Fixed a stale cache issue when adding or removing hardware causing new hardware to be undiscoverable and removed hardware to still be present in the cache.
- Calling
Get-VmsStorage
without parameters threw an error instead of returning all storages from all recording servers. Get-VmsCamera
returned cameras that were enabled even though their parent hardware device was disabled. Now if you want enabled cameras, you only get cameras that would normally show up as enabled in Management Client.Get-PlaybackInfo
threw a null reference exception when called with a camera that is either disabled or not a member of a camera group. Now a more useful error is displayed.- Fixed missing "Online Help" links so that
Get-Help command-name -Online
should work for all cmdlets in the module again.
Changed
- Updated to 2022 R3 MIP SDK libraries.
- Added Shortcut and ShortName properties to
Get-VmsCameraReport
. - Application icon for
Connect-ManagementServer -ShowDialog
user interface replaced with plain Milestone diamond logo without the "milestone" wordmark. The title bar is too small an area for an icon with a word in it, and it didn't render well. Get-ConnectionString
has been renamed toGet-VmsConnectionString
and it now supports 2022 R3 where the connection strings are now all placed in a new registry key together.Set-VmsCameraStream
will now apply changes to all streams before callingSave()
. This reduces the number of API calls made while saving changes, and makes it easier to fix rare validation issues where you have to change the value of a stream property across more than one stream at the same time.
Removed
Remove-MobileServerCertificate
andSet-MobileServerCertificate
- useSet-XProtectCertificate
, or if your Milestone version is not old enough to use the server configurator CLI, use an older version of MilestonePSTools.Export-HardwareCsv
andImport-HardwareCsv
- useExport-VmsHardware
or alternative import/export samples to be made available online.Get-CameraReport
- useGet-VmsCameraReport
instead.
[22.2.0] 2022-07-22
Fixed
- Typo in documentation for
Import-VmsHardware
. Get-Snapshot -Live
sometimes returned very old, definitely not live, images. Fixed by settingSendInitialImage
tofalse
.Add-DeviceGroup
threw an exception when attempting to create the same group twice in the same session, or when creating a subgroup after creating the parent group. Now theClearChildrenCache()
method is called on the parent device group to ensure the cache is updated with newly created groups.
Changed
- Removed default description "Added using PowerShell at [date]" applied to devices added with
Import-VmsHardware
. Export-VmsHardware
now overwrites the CSV atPath
if it exists already, and theAppend
switch has been added.- Added
Culture
switch to theGet-VmsLog
cmdlet to make it possible to request log entries in a specific language. - Improved error messages for licensing cmdlets when they are used against a VMS version released before server-side support of those commands.
- Removed noisy verbose logging for cmdlets associated with snapshot and export retrieval.
- Added
MotionThreshold
column toGet-VmsCameraReport
output, and theManualSensitivity
value is now reported the same as the Management Client UI - the internal value from configuration API is now divided by 3.
[22.1.0] 2022-04-19
Fixed
- Fixed an issue with
Import-VmsHardware
where cameras on one recording server could not be imported into another recording server. - Fixed an issue with
Import-VmsHardware
where cameras were not enabled or renamed after importing. - Fixed an uncommon issue with
Get-VmsCameraReport
where the errorCannot index into a null array
is returned when at least one camera lacks any stream settings in the Settings tab for the camera in Smart Client.
Added
- New cmdlets for getting, setting, and clearing site information properties like company name, address, and contact information.
- Get-VmsSiteInfo
- Set-VmsSiteInfo
- Clear-VmsSiteInfo
Changed
- Changed RequiredModules entry for MipSdkRedist in module manifest from 21.2.0 to 22.1.0.
[21.2.7] 2022-02-23
Fixed
- Fixed an issue with
Get-RecorderStatusService2
throwing a null reference exception when attempting to get a status service instance for a Recording Server when that recording server, for some reason, has a null FQID.ServerId.Uri value. Now a regular error should be returned viaWrite-Error
. - Fixed an error in
Get-VmsCameraReport
where cameras without multi-stream support would result in errors being passed to the pipeline. - Fixed an error in
Get-VmsCameraReport
where recording servers without cameras could cause an error when using the-IncludeRetentionInfo
switch.
Added
- Several cmdlets for working with ViewGroup and View objects, including cmdlets for copying, exporting, and importing ViewGroups, and modifying permissions.
- Clear-VmsView
- Copy-VmsView
- Copy-VmsViewGroup
- Export-VmsViewGroup
- Get-VmsView
- Get-VmsViewGroup
- Get-VmsViewGroupAcl
- Import-VmsViewGroup
- New-VmsView
- New-VmsViewGroup
- Remove-VmsView
- Remove-VmsViewGroup
- Set-VmsView
- Set-VmsViewGroup
- Set-VmsViewGroupAcl
Changed
- Replaced all internal references to
Get-ManagementServer
withGet-VmsManagementServer
to eliminate deprecation warning messages when running built-in cmdlets.
[21.2.6] 2022-02-08
Added
Clear-VmsCache
can be used to clear the child items from the cached ManagementServer object (see the caching reference in changes below). This will also dispose of cached WCF proxy clients generated byGet-IServerCommandService
andGet-IConfigurationService
. Previously, you would useGet-Site | Select-Site
or reconnect to the Management Server to clear those cached proxy clients.
Fixed
- Fixed an issue where functions were not correctly exported and made available to users of some OS's like Server 2012 R2.
ConvertTo-GisPoint
was, in some cases, outputing "POINT (0 0)" instead of the given coordinates. This behavior is fixed, and the cmdlet has been improved with support for altitude/elevation.Start-VmsHardwareScan
produced an empty[VmsHardwareScanResult]
even when the scan returned no entries. Now, when the request for a scan returns an error, no results will be returned and aWrite-Error
will show the error returned by the VMS.
Changed
- Updated
Get-Log
- Renamed to
Get-VmsLog
and added alias for old name,Get-Log
- Implemented a "windowing" strategy to improve performance when reading logs for a broad time period. In testing, a 24-hour audit log request completed three times faster using the new cmdlet.
- Renamed to
- Caching: Added caching of the current site's ManagementServer configuration api object. All cmdlets that previously instantiated a new ManagementServer object when needed have been updated to use the cached reference, which in turn caches child items when they are accessed through it. This dramatically improves the performance when multiple enumerates of configuration items are performed during the same PowerShell session. For example, accessing general settings for all cameras on a test system took 29 seconds the first time. Subsequent requests took 0.15 seconds.
[21.2.5] 2022-01-27
Added
Get-VmsDeviceStatus
offers very fast streaming device status information through the use of the MIP SDK RecorderStatusService2 API and the GetCurrentDeviceStatus method.
[21.2.4] 2022-01-20
Fixed
Get-VmsCameraGeneralSetting
was returning an unexpected$null
value that was missed during a refactoring.
[21.2.3] 2022-01-20
Added
- Spanish language translations.
Get-VmsCamera
replacedGet-Camera
and adds the ability to search by name.Set-VmsCamera
adds an easy method of changing all properties directly attached to camera objects.Get-VmsCameraGeneralSetting
adds a quick and easy way to access general settings and defaults to "display values" instead of "raw values".Set-VmsCameraGeneralSetting
adds an easy way to change several general settings at once.Get-VmsCameraStream
adds a much easier way to retrieve stream properties including how they're used (live, recording), and the associated settings like FPS, Resolution, and Codec.Set-VmsCameraStream
is a simple cmdlet for adding new streams and configuring properties of streams like FPS, Resolution, Codec, and multi-stream properties like LiveMode and stream display name.
Changed
- MilestonePSTools is now signed with the Milestone code signing certificate.
Get-Camera
is now aliased toGet-VmsCamera
.
Deprecated
Get-Camera
is deprecated in favor ofGet-VmsCamera
.Get-CameraSetting
is deprecated in favor ofGet-VmsCameraGeneralSetting
andGet-VmsCameraStream
.Set-CameraSetting
is deprecated in favor ofSet-VmsCameraGeneralSetting
andSet-VmsCameraStream
.Get-Stream
is deprecated in favor ofGet-VmsCameraStream
.Set-Stream
is deprecated in favor ofSet-VmsCameraStream
.
[21.2.2] 2021-11-04
Added
Add-VmsFailoverGroup
,Get-VmsFailoverGroup
, andRemove-VmsFailoverGroup
which is supported for XProtect Expert and XProtect Corporate 2021 R2 and newer.
Fixed
Get-VmsCameraReport
failed with the errorException calling "FillChildren" with "2" argument(s): "VMS64001: The feature is not licensed."
on XProtect Essential+ due to an attempt to use the "FillChildren" method to pre-populate the configuration hierarchy with a variety of ItemType's including PrivacyProtection and PrivacyProtectionFolder items which are only present from XProtect Express+ and above.
[21.2.1] 2021-10-28
Fixed
Get-VmsCameraReport
failed to produce a report if communication with the recording server(s) failed. Now the communication error will be returned and the report will be produced with some missing information.Get-RecorderStatusService2
always used theWebServerUri
or "local web server address" to try to reach the recording server status service. Now the Milestone internal FQID will be looked up in[VideoOS.Platform.Configuration]::Instance
, and the FQID.ServerId.Uri value will be used to instantiate the[VideoOS.Platform.SDK.Proxy.Status2.RecorderStatusService2]
client. This should ensure that the status client can be used while on a local network or when connecting over the internet, or through a NAT/PAT firewall.
[21.2.0] 2021-10-27
Added
- Support for
Get-Help -Online
- Get-VmsCameraReport as a faster, more reliable replacement for Get-CameraReport.
- License management functions have been added which make use of Configuration API features introduced in 2020 R2.
- Import-VmsLicense for importing initial, or manually-activated license files downloaded from My Milestone.
- Export-VmsLicenseRequest for exporting license request files for manual activation on My Milestone.
- Set-VmsLicense for changing the software license code by importing a different license file.
- Invoke-VmsLicenseActivation for initiating an online activation with the option to enable auto-activation.
- Start-VmsHardwareScan can be used to perform express, or manual hardware scans to discover cameras and which drivers to use with them.
- Add-VmsHardware as a replacement for the original Add-Hardware cmdlet.
- Import-VmsHardware as a replacement for Import-HardwareCsv (shallow support of device settings only)
- Export-VmsHardware as a replacement for Export-HardwareCsv (shallow support of device settings only)
- Wait-VmsTask is useful for monitoring long-running operations. You can use it with most Configuration API method calls and it will return when the server-side task completes.
Changed
- Updated MipSdkRedist dependency to MipSdkredist 21.2.0 based on MIP SDK 2021 R2.
- Improved Get-PlaybackInfo performance by switching from RawDataSource to SequenceDataSource.
- Changed Find-XProtectDevice -ShowDialog UI to filter out all non-string property names in the advanced section.
- Updated Set-CertKeyPermission private function to improve reliability and support ECC certificates. This function is used with Set-XProtectCertificate.
- Added documentation for previously undocumented commands.
- Experimental: Introduced the concept of "proxy client pools" so that two of each proxy client type can be created instead of one. This may help when using runspaces for parallelization but testing has not proven this out yet.
- To try using more than one proxy client for Configuration API and other WCF channels, add the environment variable MILESTONEPSTOOLS_PROXYCOUNT with an integer value.
- Added ActivationAutomatic column to LicenseInformation formatter - it's useful information to see in the output of Invoke-VmsLicenseActivation, Import-VmsLicense, and Set-VmsLicense.
- Updated Remove-Hardware to support -WhatIf, and set ConfirmImpact to "High".
The -Force switch no longer exists as we are relying on the more idiomatic
ConfirmImpact feature to stand in the way of potential accidental usage. This
is a breaking change considering the -Force switch will now cause an error,
and we no longer accept the Hardware object by ID. To remove hardware in bulk
such as you might do in a test environment, you can add
-Confirm:$false
and you should not be required to acknowledge any removal operations.
Fixed
- Added error handling for Configuration API cmdlets Get-ConfigurationItem, Set-ConfigurationItem, Invoke-Method, and Get-Translations so that if the Configuration API proxy client has faulted, due to an idle timeout for example, the proxy client pool is cleared and new communication channels are established.
Removed
- Get-CameraReportV1 - use Get-VmsCameraReport
Deprecated
- Get-CameraReport in favor of Get-VmsCameraReport
- Add-Hardware in favor of Add-VmsHardware
- Export-HardwareCsv in favor of Export-VmsHardware
- Import-HardwareCsv in favor of Import-VmsHardware