Files
2025-10-31 18:33:09 +01:00

93 lines
4.4 KiB
PowerShell

if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Write-Error "Exécutez ce script en tant qu'administrateur."
exit 1
}
# Exercice 1 : Installation des rôles RDS
Write-Output "Installation des rôles RDS..."
$features = @('RDS-RD-Server', 'RDS-Web-Access', 'RDS-Connection-Broker')
foreach ($f in $features) {
Write-Output "Installation Feature: $f"
try {
Install-WindowsFeature -Name $f -IncludeManagementTools -ErrorAction Stop | Out-Null
Write-Output "Feature $f installée."
}
catch {
Write-Warning "Impossible d'installer $f : $_"
}
}
$BrokerFQDN = "srv2.chromatic.moe"
$WebFQDN = "srv2.chromatic.moe"
$SessionHostFQDN = "srv2.chromatic.moe"
$CollectionName = "Collection_Bureau"
$UserGroup = "CHROMATIC\Domain Users"
$CertDnsName = $WebFQDN
$RemoteApps = @(
@{Alias = 'notepad'; DisplayName = 'Bloc-notes'; FilePath = 'C:\Windows\System32\notepad.exe' },
@{Alias = 'calc'; DisplayName = 'Calculatrice'; FilePath = 'C:\Windows\System32\calc.exe' }
)
Import-Module RemoteDesktop
# Exercice 2 : Création du déploiement RDS
try {
Write-Output "Création du déploiement RDS via New-RDSessionDeployment..."
New-RDSessionDeployment -ConnectionBroker $BrokerFQDN -WebAccessServer $WebFQDN -SessionHost $SessionHostFQDN -Verbose -ErrorAction Stop
Add-RDServer -Role RDS-RD-SERVER -Server $SessionHostFQDN -ConnectionBroker $BrokerFQDN -ErrorAction Stop
Write-Output "Déploiement RDS créé."
}
catch {
Write-Warning "New-RDSessionDeployment a échoué ou a été déjà exécuté : $_"
}
# Exercice 3 : Création de la collection de sessions
try {
Write-Output "Création de la collection '$CollectionName'..."
New-RDSessionCollection -CollectionName $CollectionName -SessionHost @($SessionHostFQDN) -ConnectionBroker $BrokerFQDN -CollectionDescription "Collection pour les bureaux utilisateurs" -ErrorAction Stop
Write-Output "Collection '$CollectionName' créée."
Set-RDSessionCollectionConfiguration -CollectionName $CollectionName -UserGroup $UserGroup -ConnectionBroker $BrokerFQDN -ErrorAction Stop
Write-Output "Groupe d'utilisateurs '$UserGroup' assigné à la collection '$CollectionName'."
}
catch {
Write-Warning "New-RDSessionCollection a échoué (peut-être déjà existante) : $_"
}
# Exercice 4 : Publication des RemoteApps
Write-Output "Publication des RemoteApps dans la collection '$CollectionName'..."
foreach ($app in $RemoteApps) {
try {
Write-Output "Publication RemoteApp: $($app.DisplayName) ($($app.FilePath))"
New-RDRemoteApp -CollectionName $CollectionName -DisplayName $app.DisplayName -FilePath $app.FilePath -Alias $app.Alias -ConnectionBroker $BrokerFQDN -ErrorAction Stop
Write-Output "RemoteApp '$($app.DisplayName)' publiée."
}
catch {
Write-Warning "Impossible de publier '$($app.DisplayName)' : $_"
}
}
# Exercice 5 : Création et association d'un certificat SSL auto-signé
try {
Write-Output "Création certificat auto-signé pour $CertDnsName..."
$cert = New-SelfSignedCertificate -DnsName $CertDnsName -CertStoreLocation Cert:\LocalMachine\My -NotAfter (Get-Date).AddYears(5)
Write-Output "Certificat créé : Thumbprint = $($cert.Thumbprint)"
Write-Output "Application du certificat aux rôles RDS (RDWeb, RDGateway si présent)..."
try {
Set-RDCertificate -Role RDWebAccess -Thumbprint $cert.Thumbprint -Force -ErrorAction Stop
Set-RDCertificate -Role RDGateway -Thumbprint $cert.Thumbprint -Force -ErrorAction Stop
Write-Output "Certificat appliqué au rôle RDWebAccess."
}
catch {
Write-Warning "Set-RDCertificate - RDWebAccess a échoué : $_"
}
}
catch {
Write-Warning "Erreur lors de la création/association du certificat : $_"
}
# Exercice 6 : Résumé des éléments déployés
Write-Output "`nRésumé des éléments déployés :"
try { Get-RDSessionCollection -ConnectionBroker $BrokerFQDN | Select-Object CollectionName, Description | Format-Table -AutoSize } catch {}
try { Get-RDRemoteApp -CollectionName $CollectionName -ConnectionBroker $BrokerFQDN | Select-Object Alias, DisplayName, FilePath | Format-Table -AutoSize } catch {}
try { Get-ChildItem Cert:\LocalMachine\My | Where-Object { $_.Subject -like "*$CertDnsName*" } | Select-Object Thumbprint, Subject, NotAfter | Format-Table -AutoSize } catch {}