[CmdletBinding()] param( [string]$ConfigurationPath = "$env:ProgramData\SGU\Enrollment\enrollment.json" ) $ErrorActionPreference = 'Stop' $configuration = Get-Content -LiteralPath $ConfigurationPath -Raw | ConvertFrom-Json $enrollmentRoot = Split-Path $ConfigurationPath -Parent $testScript = Join-Path $enrollmentRoot 'Test-SguClientEnrollment.ps1' $installScript = Join-Path $enrollmentRoot 'Install-CredentialProvider.ps1' $remoteAccessScript = Join-Path $enrollmentRoot 'Enable-LabRemoteAccess.ps1' $monitoringScript = Join-Path $enrollmentRoot 'Enable-SguClientMonitoring.ps1' $rustDeskScript = Join-Path $enrollmentRoot 'Install-SguRustDeskClient.ps1' $localUserScript = Join-Path $enrollmentRoot 'Set-SguStandardLocalUser.ps1' $before = & $testScript if (-not $before.IsValid) { & $localUserScript | Out-Null $installParams = @{ PublishPath = [string]$configuration.PublishPath BrokerEndpoint = [string]$configuration.BrokerEndpoint ClientCertificateThumbprint = [string]$configuration.ClientCertificateThumbprint ServerCertificateThumbprint = [string]$configuration.ServerCertificateThumbprint DomainNetbios = [string]$configuration.DomainNetbios TimeoutSeconds = [int]$configuration.TimeoutSeconds } if ($configuration.DotNetRuntimeInstallerPath) { $installParams.InstallDotNetRuntime = $true $installParams.DotNetRuntimeInstallerPath = [string]$configuration.DotNetRuntimeInstallerPath } & $installScript @installParams | Out-Null } $computer = Get-CimInstance Win32_ComputerSystem if ($computer.PartOfDomain) { & $remoteAccessScript ` -RemoteDesktopPrincipal ([string]$configuration.RemoteDesktopPrincipal) ` -EnableAdministrativeFirewallGroups | Out-Null & $monitoringScript | Out-Null } if ($configuration.RustDeskServerAddress -and $configuration.RustDeskServerPublicKey) { & $rustDeskScript -ServerAddress ([string]$configuration.RustDeskServerAddress) ` -ServerPublicKey ([string]$configuration.RustDeskServerPublicKey) | Out-Null } $verificationParams = @{} if ($computer.PartOfDomain) { $verificationParams.RequireDomainJoined = $true $verificationParams.RequireRemoteAccess = $true $verificationParams.RemoteDesktopPrincipal = [string]$configuration.RemoteDesktopPrincipal } if ($configuration.RustDeskServerAddress) { $verificationParams.RequireRustDesk = $true $verificationParams.RustDeskServerAddress = [string]$configuration.RustDeskServerAddress } $after = & $testScript @verificationParams $after if (-not $after.IsValid) { throw "SGU enrollment repair did not reach a valid state: $($after.Issues -join ' ')" }