Public/Get-ManagementServerConfig.ps1
function Get-ManagementServerConfig { [CmdletBinding()] param() begin { $configXml = Join-Path ([system.environment]::GetFolderPath([System.Environment+SpecialFolder]::CommonApplicationData)) 'milestone\xprotect management server\serverconfig.xml' if (-not (Test-Path $configXml)) { throw [io.filenotfoundexception]::new('Management Server configuration file not found', $configXml) } } process { $xml = [xml](Get-Content -Path $configXml) $versionNode = $xml.SelectSingleNode('/server/version') $clientRegistrationIdNode = $xml.SelectSingleNode('/server/ClientRegistrationId') $webApiPortNode = $xml.SelectSingleNode('/server/WebApiConfig/Port') $authServerAddressNode = $xml.SelectSingleNode('/server/WebApiConfig/AuthorizationServerUri') $serviceProperties = 'Name', 'PathName', 'StartName', 'ProcessId', 'StartMode', 'State', 'Status' $serviceInfo = Get-CimInstance -ClassName 'Win32_Service' -Property $serviceProperties -Filter "name = 'Milestone XProtect Management Server'" $config = @{ Version = if ($null -ne $versionNode) { [version]::Parse($versionNode.InnerText) } else { [version]::new(0, 0) } ClientRegistrationId = if ($null -ne $clientRegistrationIdNode) { [guid]$clientRegistrationIdNode.InnerText } else { [guid]::Empty } WebApiPort = if ($null -ne $webApiPortNode) { [int]$webApiPortNode.InnerText } else { 0 } AuthServerAddress = if ($null -ne $authServerAddressNode) { [uri]$authServerAddressNode.InnerText } else { $null } ServerCertHash = $null InstallationPath = $serviceInfo.PathName.Trim('"') ServiceInfo = $serviceInfo } $netshResult = Get-ProcessOutput -FilePath 'netsh.exe' -ArgumentList "http show sslcert ipport=0.0.0.0:$($config.WebApiPort)" if ($netshResult.StandardOutput -match 'Certificate Hash\s+:\s+(\w+)\s+') { $config.ServerCertHash = $Matches.1 } Write-Output ([pscustomobject]$config) } } |