Saya mencari cara untuk menutup semua sesi Remote Desktop aktif di komputer (komputer lokal). Windows menyertakan beberapa perintah (rwinsta, qwinsta, dll.) Untuk melihat sesi aktif, tetapi saya tidak melihat bagaimana saya dapat dengan mudah menggunakan informasi (kecuali saya mengurai string ...) untuk menutup semua sesi.
Apakah ada cara di Powershell (atau C #, Batch) untuk menutup semua sesi Remote Desktop di komputer lokal?
Terima kasih, Martin
Jawaban:
Anda dapat mencoba menggunakan
/sm
parameter tidak berdokumen untukquery session
(dalam file batch) untuk mengurutkan hal-hal lebih mudah:sumber
Ya, menggunakan tsdiscon dari baris perintah:
di mana n harus diganti dengan id sesi.
Anda bisa mendapatkan nomor sesi dari
Karena Anda mengatakan Anda ingin menutup semua sesi di komputer lokal, saya kira Anda harus berhati-hati dengan urutan Anda melakukannya (yaitu, tutup sesi Anda yang terakhir).
sumber
Anda mungkin ingin melihat Ekstensi Komunitas Powershell. Ini termasuk Get, Stop, dan Disconnect cmdlet TerminalSession.
sumber
Anda dapat menggunakan utilitas tsdiscon untuk memutuskan sesi. Jika Anda menggunakan perintah "sesi permintaan" dari prompt perintah, Anda dapat melihat daftar ID dan kemudian mengeluarkan perintah tsdiscon untuk masing-masing.
Konstruk perulangan seperti ini harus berhasil
dimana q.bat berada
Itu hanya akan memutuskan sesi jarak jauh dan mengabaikan pengguna konsol.
sumber
Anda dapat memutuskan sesi lokal atau jarak jauh dengan tsdiscon.
sumber
Saya menemukan TSDISCON tidak menghapus sesi "Disc" yang terhubung.
Saya mengganti TSDISCON dengan logoff.
sumber
Anda dapat menggunakan modul PowerShell PSTerminalServices:
http://blogs.microsoft.co.il/blogs/scriptfanatic/archive/2010/02/22/psterminalservices-powershell-module-for-terminal-services.aspx
Dapatkan-TSSession -ComputerName server1 -State Active | Putuskan sambungan-TSSession -WhatIf
sumber
Saya tahu OP sudah cukup tua sekarang, tetapi ini harus melakukan apa yang Anda cari (dan memetikan orang lain masih mencari sesuatu untuk melakukan hal yang sama, saya pikir saya akan tetap menjawab).
Demikian pula Anda bisa menggunakan
query/reset session
inplace dariq/rwinsta
...sumber
FOR /F %A IN (c:\scripts\ps\computers.txt) DO (FOR /f "tokens=2" %i IN ('qwinsta /SERVER:%A ^| find /i "disc"') **DO if "%i" NEQ "0" ECHO %i** | rwinsta %i /SERVER:%A /V)
sumber
Perintah TSDiscon akan memutuskan sesi layanan terminal (RDP). Digunakan sendiri akan memutus sesi saat ini, Anda dapat menentukan ID sesi sesi yang ingin Anda putuskan, Anda juga dapat menyediakan nama server untuk memutuskan sambungan.
Rincian lengkap dapat ditemukan di sini .
sumber
Anda tidak menentukan apakah Anda ingin melakukan ini tanpa mematikan atau me-restart komputer. Tetapi jika Anda tidak keberatan memulai ulang atau mematikan, Anda cukup menelepon:
Ini sebenarnya akan memaksa restart komputer.
sumber
Bahkan pertanyaannya sudah sangat lama, hampir tidak ada solusi untuk semua versi tanpa qwinsta / query / tsdiscon, yaitu semua versi Windows home.
Namun ada versi PowerShell yang mudah untuk memutuskan sesi:
Id sesi dapat diperoleh misalnya dengan
getProcesss
. Untuk memutuskan (bukan logoff!) Gunakan sesi$tstType::DisconnectSession("localhost", 2)
.sumber