Çalıştığım kurumda prensip olarak uzaktan çalışma yasaktır. Öyleydi. Geçen haftaya kadar. Artık acilen bir çözüm uygulamamız gerekiyordu. İş uyarlama süreçlerinden yeni bir çalışma formatına kadar, bizden - PIN kodları ve belirteçleri olan PKI, VPN, ayrıntılı günlük kaydı ve çok daha fazlası.
Diğer işlerin yanı sıra Uzak Masaüstü Altyapısı yani Terminal Hizmetlerini kuruyordum. Farklı veri merkezlerinde çeşitli RDS dağıtımlarımız var. Hedeflerden biri, ilgili BT departmanlarındaki meslektaşların kullanıcı oturumlarına etkileşimli olarak bağlanmasını sağlamaktı. Bildiğiniz gibi bunun için standart bir RDS Shadow mekanizması mevcut ve bunu devretmenin en kolay yolu RDS sunucularında yerel yönetici hakları vermektir.
Meslektaşlarıma saygı duyuyorum ve değer veriyorum, ancak yönetici haklarının dağıtımı konusunda çok açgözlüyüm. 🙂 Benimle aynı fikirde olanlar lütfen kesimi takip etsin.
Pekala, görev açık, şimdi işe koyulalım.
1 Adım
Active Directory'de bir güvenlik grubu oluşturalım RDP_Operators ve hakları devretmek istediğimiz kullanıcıların hesaplarını buna dahil edin:
Birden fazla AD siteniz varsa, bir sonraki adıma geçmeden önce tüm etki alanı denetleyicilerine kopyalanana kadar beklemeniz gerekecektir. Bu genellikle 15 dakikadan fazla sürmez.
2 Adım
Gruba, RDSH sunucularının her birindeki terminal oturumlarını yönetme haklarını verelim:
Set-RDSPermissions.ps1
$Group = "RDP_Operators"
$Servers = @(
"RDSHost01",
"RDSHost02",
"RDSHost03"
)
ForEach ($Server in $Servers) {
#Делегируем право на теневые сессии
$WMIHandles = Get-WmiObject `
-Class "Win32_TSPermissionsSetting" `
-Namespace "rootCIMV2terminalservices" `
-ComputerName $Server `
-Authentication PacketPrivacy `
-Impersonation Impersonate
ForEach($WMIHandle in $WMIHandles)
{
If ($WMIHandle.TerminalName -eq "RDP-Tcp")
{
$retVal = $WMIHandle.AddAccount($Group, 2)
$opstatus = "успешно"
If ($retVal.ReturnValue -ne 0) {
$opstatus = "ошибка"
}
Write-Host ("Делегирование прав на теневое подключение группе " +
$Group + " на сервере " + $Server + ": " + $opstatus + "`r`n")
}
}
}
3 Adım
Grubu yerel gruba ekleyin Uzak Masaüstü Kullanıcıları RDSH sunucularının her birinde. Sunucularınız oturum koleksiyonları halinde birleştirilmişse bunu koleksiyon düzeyinde yaparız:
Tek sunucular için kullandığımız Grup ilkesisunuculara uygulanması bekleniyor. Beklemek için fazla tembel olanlar, tercihen eski güzel gpupdate'i kullanarak süreci hızlandırabilirler. merkezi.
4 Adım
“Yöneticiler” için aşağıdaki PS scriptini hazırlayalım:
PS betiğinin çalıştırılmasını kolaylaştırmak için, PS betiğiyle aynı adı taşıyan cmd dosyası biçiminde bir kabuk oluşturacağız:
RDSManagement.cmd
@ECHO OFF
powershell -NoLogo -ExecutionPolicy Bypass -File "%~d0%~p0%~n0.ps1" %*
Her iki dosyayı da “yöneticilerin” erişebileceği bir klasöre koyuyoruz ve onlardan yeniden giriş yapmalarını istiyoruz. Artık cmd dosyasını çalıştırarak, RDS Gölge modundaki diğer kullanıcıların oturumlarına bağlanabilecekler ve onları oturumu kapatmaya zorlayabilecekler (bu, kullanıcı "asılı" bir oturumu bağımsız olarak sonlandıramadığında yararlı olabilir).
Bu gibi bir şey görünüyor:
"Yönetici" için
Kullanıcı için
Son birkaç yorum
Nüans 1. Kontrolü ele geçirmeye çalıştığımız kullanıcı oturumu, Set-RDSPermissions.ps1 betiği sunucuda çalıştırılmadan önce başlatılmışsa, “yönetici” erişim hatası alacaktır. Buradaki çözüm açıktır: yönetilen kullanıcı oturum açana kadar bekleyin.
Nüans 2. RDP Shadow ile birkaç gün çalıştıktan sonra ilginç bir hata veya özellik fark ettik: Gölge oturumunun bitiminden sonra, bağlanan kullanıcı için tepsideki dil çubuğu kayboluyor ve onu geri almak için kullanıcının yeniden yapması gerekiyor. -giriş yapmak. Görünen o ki yalnız değiliz: zaman, iki, üç.
Bu kadar. Size ve sunucularınıza sağlık diliyorum. Her zaman olduğu gibi yorumlarda görüşlerinizi bekliyorum ve aşağıdaki kısa ankete katılmanızı rica ediyorum.