Public/Get-RecorderConfig.ps1
function Get-RecorderConfig { [CmdletBinding()] param() begin { $configXml = Join-Path ([system.environment]::GetFolderPath([System.Environment+SpecialFolder]::CommonApplicationData)) 'milestone\xprotect recording server\recorderconfig.xml' if (-not (Test-Path $configXml)) { throw [io.filenotfoundexception]::new('Recording Server configuration file not found', $configXml) } } process { $xml = [xml](Get-Content -Path $configXml) $versionNode = $xml.SelectSingleNode('/recorderconfig/version') $recorderIdNode = $xml.SelectSingleNode('/recorderconfig/recorder/id') $clientRegistrationIdNode = $xml.SelectSingleNode('/recorderconfig/recorder/ClientRegistrationId') $webServerPortNode = $xml.SelectSingleNode('/recorderconfig/webserver/port') $alertServerPortNode = $xml.SelectSingleNode('/recorderconfig/driverservices/alert/port') $serverAddressNode = $xml.SelectSingleNode('/recorderconfig/server/address') $serverPortNode = $xml.SelectSingleNode('/recorderconfig/server/webapiport') $localServerPortNode = $xml.SelectSingleNode('/recorderconfig/webapi/port') $webApiPortNode = $xml.SelectSingleNode('/server/WebApiConfig/Port') $authServerAddressNode = $xml.SelectSingleNode('/recorderconfig/server/authorizationserveraddress') $clientCertHash = $xml.SelectSingleNode('/recorderconfig/webserver/encryption').Attributes['certificateHash'].Value $serviceProperties = 'Name', 'PathName', 'StartName', 'ProcessId', 'StartMode', 'State', 'Status' $serviceInfo = Get-CimInstance -ClassName 'Win32_Service' -Property $serviceProperties -Filter "name = 'Milestone XProtect Recording Server'" $config = @{ Version = if ($null -ne $versionNode) { [version]::Parse($versionNode.InnerText) } else { [version]::new(0, 0) } RecorderId = if ($null -ne $recorderIdNode) { [guid]$recorderIdNode.InnerText } else { [guid]::Empty } ClientRegistrationId = if ($null -ne $clientRegistrationIdNode) { [guid]$clientRegistrationIdNode.InnerText } else { [guid]::Empty } WebServerPort = if ($null -ne $webServerPortNode) { [int]$webServerPortNode.InnerText } else { 0 } AlertServerPort = if ($null -ne $alertServerPortNode) { [int]$alertServerPortNode.InnerText } else { 0 } ServerAddress = $serverAddressNode.InnerText ServerPort = if ($null -ne $serverPortNode) { [int]$serverPortNode.InnerText } else { 0 } LocalServerPort = if ($null -ne $localServerPortNode) { [int]$localServerPortNode.InnerText } else { 0 } AuthServerAddress = if ($null -ne $authServerAddressNode) { [uri]$authServerAddressNode.InnerText } else { $null } ServerCertHash = $null InstallationPath = $serviceInfo.PathName.Trim('"') DevicePackPath = Get-ItemPropertyValue -Path HKLM:\SOFTWARE\WOW6432Node\VideoOS\DeviceDrivers -Name InstallPath ServiceInfo = $serviceInfo } $netshResult = Get-ProcessOutput -FilePath 'netsh.exe' -ArgumentList "http show sslcert ipport=0.0.0.0:$($config.LocalServerPort)" if ($netshResult.StandardOutput -match 'Certificate Hash\s+:\s+(\w+)\s+') { $config.ServerCertHash = $Matches.1 } Write-Output ([pscustomobject]$config) } } |