Skip to content

xDscWebService: SQL Backend Setup + Windows Server 2025 Compatibility #783

@mmeade-visory

Description

@mmeade-visory

Problem description

I've spent considerable time getting the SQL backend working with xDscWebService and wanted to document what I found since the existing documentation has several gaps and some outright incorrect guidance. Hopefully this saves someone else the same pain.

Environment

-- xPSDesiredStateConfiguration: 9.2.1
-- SQL Server: Named instance configured on port 1433
-- IIS App Pool Identity: LocalSystem
-- OS Tested: Windows Server 2019, 2022, 2025

Windows Server 2025 Compatibility
The SQL backend does not work on Windows Server 2025 as of this writing.
On Windows Server 2019 and 2022 the SQL backend functions correctly — the DSC service creates the required tables (RegistrationData, StatusReport, Devices) on first use and client registration succeeds.
On Windows Server 2025 the SQL code path is never reached at all:

-- The endpoint responds HTTP 200 (IIS and the service are running)
-- No sessions appear in sys.dm_exec_sessions when the endpoint is hit
-- No errors appear in the SQL error log
-- No ASP.NET errors appear in the Application event log
-- Tables are never created even with correct connection string and permissions

Pre-creating the database and tables manually does not resolve the issue — the problem is that the service DLL on Windows Server 2025 does not attempt a SQL connection at all. This is likely a regression in Microsoft.Powershell.DesiredStateConfiguration.Service.dll on that OS version. All documentation and known-working configurations are based on Windows Server 2019.

Recommendation: Deploy the pull server on Windows Server 2022 for SQL backend support. WS2022 was confirmed working and has a longer support lifecycle than WS2019.

Verbose logs

The symptom was essentially silence:

No sessions appearing in sys.dm_exec_sessions
No errors in the SQL error log
No ASP.NET errors in the Application event log
The endpoint returned HTTP 200 normally
The SQL code path simply was never reached

It never created the table in the DSC database...  

When registering a new client:

Registration of the Dsc Agent with the server https://dscpull.visory.net:8080/PSDSCPullServer.svc failed. The underlying error is: Failed to register Dsc Agent with AgentId 42F782B1-197B-11F1-9CEF-005056A7F3B2 with the server 
https://dscpull.visory.net:8080/PSDSCPullServer.svc/Nodes(AgentId='42F782B1-197B-11F1-9CEF-005056A7F3B2'). .
    + CategoryInfo          : InvalidResult: (root/Microsoft/...gurationManager:String) [], CimException
    + FullyQualifiedErrorId : RegisterDscAgentCommandFailed,Microsoft.PowerShell.DesiredStateConfiguration.Commands.RegisterDscAgentCommand
    + PSComputerName        : localhost


and this address returned:
https://dscpull.visory.net:8080/PSDSCPullServer.svc/Nodes(AgentId='42F782B1-197B-11F1-9CEF-005056A7F3B2')

<m:error xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<m:code>Client protocol version is invalid. Request header should contain ProtocolVersion {0}.</m:code>
<m:message xml:lang="en-US">Client protocol version is invalid. Request header should contain ProtocolVersion 2.0.</m:message>
<m:innererror>
<m:message>Client protocol version is invalid. Request header should contain ProtocolVersion 2.0.</m:message>
<m:type>System.ArgumentException</m:type>
<m:stacktrace/>
</m:innererror>
</m:error>

DSC configuration

configuration xDscWebServiceRegistration
{
    param
    (
        [string[]]$NodeName = 'localhost',
        [ValidateNotNullOrEmpty()]
        [string] $certificateThumbPrint,
        [Parameter(HelpMessage='This should be a string with enough entropy (randomness) to protect the registration of clients to the pull server.  We will use new GUID by default.')]
        [ValidateNotNullOrEmpty()]
        [string] $RegistrationKey   # A guid that clients use to initiate conversation with pull server
    )

    Import-DSCResource -ModuleName PSDesiredStateConfiguration
    Import-DSCResource -ModuleName xPSDesiredStateConfiguration
    Import-DscResource -ModuleName NetworkingDsc

    Node $NodeName
    {
        WindowsFeature DSCServiceFeature
        {
            Ensure                       = "Present"
            Name                         = "DSC-Service"
        }

	    Firewall HTTPTCPCommunication
        {
            Name                         = 'HTTPTcpCommunication'
            DisplayName                  = 'HTTP TCP communication'
            Action                       = 'Allow'
            Direction                    = 'Inbound'
            Protocol                     = 'TCP'
            Profile                      = 'Any'
            Enabled                      = 'True'
            LocalPort			         = @('8080','9080')
        }

        xDSCWebService PSDSCPullServer
        {
            Ensure                       = "Present"
            EndpointName                 = "PSDSCPullServer"
            Port                         = 8080
            PhysicalPath                 = "E:\inetpub\PSDSCPullServer"
            CertificateThumbPrint        = "<cert thumb>"
            ModulePath                   = "E:\DscService\Modules"
            ConfigurationPath            = "E:\DscService\Configuration"
            State                        = "Started"            
            RegistrationKeyPath          = "E:\DscService"
            AcceptSelfSignedCertificates = $true
            UseSecurityBestPractices     = $true
            SqlProvider                  = $true
            SqlConnectionString          = 'Provider=SQLOLEDB.1;Data Source=<sql server name>;Initial Catalog=master;User ID=<sqlsvcacc>;Password=<sqlpw>;TrustServerCertificate=Yes;'
            DependsOn                    = "[WindowsFeature]DSCServiceFeature"
        }

        File RegistrationKeyFile
        {
            Ensure                       = 'Present'
            Type                         = 'File'
            DestinationPath              = "E:\DscService\RegistrationKeys.txt"
            Contents                     = $RegistrationKey
            Force                        = $true
            MatchSource                  = $true
        }
    }
}

$xDscWebServiceRegistrationSplat = @{
    certificateThumbprint = '<cert thumb>'
    RegistrationKey = '<key>'
    OutputPath = 'C:\sys\dsc'
}

xDscWebServiceRegistration @xDscWebServiceRegistrationSplat

Start-DscConfiguration -Path C:\sys\dsc -Wait -Verbose -Force

Suggested solution

Don't use Server 2025 for your SQL backed DSC pull server, Server 2022 and 2019 seems to work fine.

Operating system the target node is running

OsName               : Microsoft Windows Server 2025 Standard
OsOperatingSystemSKU : StandardServerEdition
OsArchitecture       : 64-bit
WindowsVersion       : 2009
WindowsBuildLabEx    : 26100.1.amd64fre.ge_release.240331-1435
OsLanguage           : en-US
OsMuiLanguages       : {en-US}

PowerShell version and build the target node is running

Name                           Value                                                                                                                                                                                                                             
----                           -----                                                                                                                                                                                                                             
PSVersion                      5.1.26100.32370                                                                                                                                                                                                                   
PSEdition                      Desktop                                                                                                                                                                                                                           
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}                                                                                                                                                                                                           
BuildVersion                   10.0.26100.32370                                                                                                                                                                                                                  
CLRVersion                     4.0.30319.42000                                                                                                                                                                                                                   
WSManStackVersion              3.0                                                                                                                                                                                                                               
PSRemotingProtocolVersion      2.3                                                                                                                                                                                                                               
SerializationVersion           1.1.0.1

xPSDesiredStateConfiguration version

Name                         Version Path                                                                                                           
----                         ------- ----                                                                                                           
xPSDesiredStateConfiguration 9.2.1   C:\Program Files\WindowsPowerShell\Modules\xPSDesiredStateConfiguration\9.2.1\xPSDesiredStateConfiguration.psd1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions