Avec l'aide de plusieurs articles en ligne, j'ai pu compiler un script PowerShell qui déconnecte tous les utilisateurs pour chacun de mes hôtes de session RD. Je voulais que quelque chose soit très gentil pour déconnecter les utilisateurs et écrire des profils à leur emplacement de profil itinérant sur le système de stockage. Cependant, cela est trop doux et prend environ quatre heures pour compléter le nombre d'utilisateurs et de serveurs RDS que j'ai.Déconnexion de l'utilisateur RDS Script Slow
Ce script est conçu pour définir chaque vidage de serveur RDS, mais permettre la redirection si un serveur est disponible, donc les premières 15 minutes ont été celles où les premiers serveurs seraient prêts à se connecter. Tout cela fonctionne mais j'aimerais voir s'il y a des suggestions pour accélérer un peu le processus.
Voici la boucle qui passe par chaque serveur et enregistre les utilisateurs sur et définit ensuite le mode de connexion de serveur activé:
ForEach ($rdsserver in $rdsservers){
try {
query user /server:$rdsserver 2>&1 | select -skip 1 | ? {($_ -split "\s+")[-5]} | % {logoff ($_ -split "\s+")[-6] /server:$rdsserver /V}
Write-Host "Giving the RDS Server time"
Write-Progress "Pausing Script" -status "Giving $rdsserver time to settle" -perc (5/(5/100))
Start-Sleep -Seconds 5
$RDSH=Get-WmiObject -Class "Win32_TerminalServiceSetting" -Namespace "root\CIMV2\terminalservices" -ComputerName $rdsserver -Authentication PacketPrivacy -Impersonation Impersonate
$RDSH.SessionBrokerDrainMode=0
$RDSH.put() > $null
Write-Host "$rdsserver is set to:"
switch ($RDSH.SessionBrokerDrainMode) {
0 {"Allow all connections."}
1 {"Allow incoming reconnections but until reboot prohibit new connections."}
2 {"Allow incoming reconnections but prohibit new connections."}
default {"The user logon state cannot be determined."}
}
}
catch {}
}
Merci c'est une bonne information et je vais essayer. Disons que je veux ralentir les tâches qui se déroulent en arrière-plan. Y a-t-il quelque chose que je puisse ajouter à cela pour exécuter trois ou quatre tâches, puis passer à l'ensemble de serveurs suivant? –
Vous pouvez faire quelque chose comme ça en utilisant une boucle while et des fonctions récursives, mais c'est pénible, si vous voulez restreindre l'accès aux runspaces car ils le fournissent nativement, le lien fourni montre comment les utiliser. –