Commands/Register-CMMessagingClient.ps1

Function Register-CMMessagingClient {
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$false)]
        [ValidateNotNullOrEmpty()]
        [string]$AgentIdentity = 'CMMessagingCmdlet'
    )
    if($null -eq $Script:CMMessagingClient){
        throw 'Please first run Set-CMMessagingClient to set the client information!'
        return
    }
    $Sender = New-Object -TypeName Microsoft.ConfigurationManagement.Messaging.Sender.Http.HttpSender
    $Request = [Microsoft.ConfigurationManagement.Messaging.Messages.ConfigMgrRegistrationRequest]::new()
    [void]$Request.AddCertificateToMessage($Script:CMMessagingClient.SigningCertificate, [Microsoft.ConfigurationManagement.Messaging.Framework.CertificatePurposes]::Signing)
    [void]$Request.AddCertificateToMessage($Script:CMMessagingClient.EncryptionCertificate, [Microsoft.ConfigurationManagement.Messaging.Framework.CertificatePurposes]::Encryption)
    $Request.Settings.HostName = $Script:CMMessagingClient.ManagementPoint
    [void]$Request.Discover()
    $Request.AgentIdentity = $AgentIdentity
    $Request.ClientFqdn = $Script:CMMessagingClient.ClientName + "." + $Script:CMMessagingClient.Domain
    $Request.NetBiosName = $Script:CMMessagingClient.ClientName
    $Request.Settings.Compression = [Microsoft.ConfigurationManagement.Messaging.Framework.MessageCompression]::Zlib
    $request.Settings.ReplyCompression = [Microsoft.ConfigurationManagement.Messaging.Framework.MessageCompression]::Zlib
    
    # After contacting the site server, they reply back with the GUID the site server is going to use. Set that for other modules to use.
    $Script:CMMessagingClient.ClientGUID = $request.RegisterClient($Sender, [TimeSpan]::FromMinutes(5))
}