স্ক্রিপ্টিং - রিমোট ডেস্কটপ সেশনগুলি কীভাবে সংযোগ বিচ্ছিন্ন করবেন?


8

আমি একটি কম্পিউটারে (স্থানীয় কম্পিউটার) সমস্ত সক্রিয় রিমোট ডেস্কটপ সেশনগুলি বন্ধ করার জন্য একটি উপায় খুঁজছি। সক্রিয় সেশনগুলি দেখার জন্য উইন্ডোজ বেশ কয়েকটি কমান্ড (রুইনস্টা, কিউনিস্টা ইত্যাদি) অন্তর্ভুক্ত করে তবে আমি দেখতে পাচ্ছি না যে সমস্ত সেশন বন্ধ করার জন্য আমি কীভাবে সহজেই তথ্যটি ব্যবহার করতে পারি (যদি আমি স্ট্রিংটিকে পার্স না করি ...)

স্থানীয় কম্পিউটারে সমস্ত রিমোট ডেস্কটপ সেশন বন্ধ করার জন্য পাওয়ারশেল (বা সি #, ব্যাচ) এর কোনও উপায় আছে কি?

ধন্যবাদ, মার্টিন


আমি একটি লুপ অন্তর্ভুক্ত করার জন্য আমার উত্তর আপডেট করেছি যা কেবলমাত্র সক্রিয় দূরবর্তী সেশনগুলি সংযোগ বিচ্ছিন্ন করবে, কনসোলটি নয়
কেভিন কুফল

উত্তর:


5

জিনিসগুলি আরও সহজে সাজানোর /smজন্য আপনি query session(একটি ব্যাচের ফাইলে) অনিবন্ধিত প্যারামিটারটি ব্যবহার করে দেখতে পারেন:

FOR /f %%G IN ('query session /sm') DO tsdiscon %%G

এটি খুব ভাল শুরু ... তবে আমি কেবল দূরবর্তী ডেস্কটপ সেশনগুলি সংযোগ বিচ্ছিন্ন করতে চাই।
মার্টিন

4

হ্যাঁ, কমান্ড লাইন থেকে tsdiscon ব্যবহার করে:

tsdiscon n

যেখানে এনটি সেশন আইডি দিয়ে প্রতিস্থাপন করা উচিত।

আপনি সেশন নম্বর পেতে পারেন

query session

যেহেতু আপনি বলেছেন যে আপনি স্থানীয় কম্পিউটারে সমস্ত সেশন বন্ধ করতে চান , আমার ধারণা আমি আপনাকে যে ক্রমটি দিয়েছি তা সম্পর্কে সতর্কতা অবলম্বন করা উচিত (যেমন আপনার সেশনটি শেষের দিকে বন্ধ করুন)।


2

আপনি পাওয়ারশেল সম্প্রদায় এক্সটেনশনগুলি চেক আউট করতে চাইতে পারেন। এটিতে টার্মিনাল সেশন সেমিডলেটগুলি পান, বন্ধ করুন এবং সংযোগ বিচ্ছিন্ন করুন।


2

সেশনগুলি সংযোগ বিচ্ছিন্ন করতে আপনি tsdiscon ইউটিলিটি ব্যবহার করতে পারেন । আপনি যদি কমান্ড-প্রম্পট থেকে "ক্যোয়ারী সেশনস" কমান্ডটি ব্যবহার করেন, আপনি আইডিগুলির তালিকা দেখতে পারেন এবং তারপরে প্রতিটিটির জন্য একটি tsdiscon কমান্ড জারি করতে পারেন।

এর মতো লুপিং কনস্ট্রাক্টের কাজ করা উচিত

FOR /f %%G IN ('q.bat') DO tsdiscon %%G

যেখানে q.bat

query session /sm | find "Active"

এটি কেবল দূরবর্তী সেশনগুলি সংযোগ বিচ্ছিন্ন করবে এবং কনসোল ব্যবহারকারীকে উপেক্ষা করবে।


1

আপনি tsdiscon দিয়ে স্থানীয় বা দূরবর্তী সেশনগুলি সংযোগ বিচ্ছিন্ন করতে পারেন।

Disconnects a terminal session.

TSDISCON [sessionid | sessionname] [/SERVER:servername] [/V]

  sessionid           The ID of the session.
  sessionname         The name of the session.
  /SERVER:servername  Specifies the Terminal server (default is current).
  /V                  Displays information about the actions performed.

1

আমি দেখতে পেয়েছি টিএসডিসকন "ডিস্ক" অননেক্টেড সেশনগুলি সরিয়ে দেয় না।

আমি লগঅফ দিয়ে টিএসডিসনকে প্রতিস্থাপন করেছি।


1

আপনি পিএসটিার্মিনাল সার্ভিসেস পাওয়ারশেল মডিউলটি ব্যবহার করতে পারেন:

http://blogs.microsoft.co.il/blogs/scriptfanatic/archive/2010/02/22/psterminalservices-powershell-module-for-terminal-services.aspx

গেট-টিএসএসশন-কম্পিউটার নাম সার্ভার 1-স্টেট অ্যাক্টিভ | সংযোগ বিচ্ছিন্ন করুন -টিএসএসশন -তাহলে


1

আমি জানি ওপি এখন বেশ পুরানো, তবে আপনার পরে যা করা উচিত এটি করা উচিত (এবং অন্য যে কেউ এখনও তেমন কিছু করার জন্য সন্ধান করছে, আমি ভেবেছিলাম যে আমি যেভাবেই উত্তর দেব)।

একইভাবে আপনি ব্যবহার করতে পারে query/reset sessionএর inplace q/rwinsta...

FOR /F %%A IN (computers.txt) DO (
    FOR /f "tokens=2" %%i IN ('qwinsta /SERVER:%%A ^| find /i "disc"') DO ECHO %%i | rwinsta %%i /SERVER:%%A /V
)

1

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)


0

টিএসডিসকন কমান্ড টার্মিনাল পরিষেবাদি (আরডিপি) সেশনগুলি সংযোগ বিচ্ছিন্ন করবে। নিজস্বভাবে ব্যবহৃত বর্তমান অধিবেশনটি সংযোগ বিচ্ছিন্ন করবে, আপনি যে সেশনটি সংযোগ বিচ্ছিন্ন করতে চান তার সেশন আইডি নির্দিষ্ট করতে পারেন, আপনি সার্ভারের নামটি সংযোগ বিচ্ছিন্ন করতে সরবরাহ করতে পারেন।

সম্পূর্ণ বিশদ এখানে পাওয়া যাবে


0

আপনি কম্পিউটারটি বন্ধ করে বা পুনরায় চালু করার মাধ্যমে এটি করতে চান কিনা তা আপনি নির্দিষ্ট করেননি। তবে আপনি যদি পুনঃসূচনা বা শাটডাউন কিছু মনে করেন না আপনি কেবল কল করতে পারেন:

shutdown -r -f -m \\computer_to_restart

এটি আসলে কম্পিউটার পুনরায় চালু করতে বাধ্য করবে।


ভাল ... এটি একটি ধারণা। তবে আমি সব সেশন মারতে চাই না। কেবল দূরবর্তী ডেস্কটপ সেশনগুলি।
মার্টিন

0

এমনকি প্রশ্নটি খুব পুরনো, কুইনস্টা / ক্যোয়ারী / টিএসডিসকন ছাড়া সমস্ত সংস্করণের খুব কমই সমাধান হতে পারে, যেমন উইন্ডোজের সমস্ত হোম সংস্করণ।

তবে একটি অধিবেশন সংযোগ বিচ্ছিন্ন করার জন্য একটি সহজ পাওয়ার শেল সংস্করণ রয়েছে:

$code = @'
[DllImport("wtsapi32.dll")]
static extern IntPtr WTSOpenServer([MarshalAs(UnmanagedType.LPStr)] String pServerName);

[DllImport("wtsapi32.dll")]
static extern void WTSCloseServer(IntPtr hServer);

[DllImport("Wtsapi32.dll")]
static extern bool WTSDisconnectSession(System.IntPtr hServer, int SessionId, bool bWait);

public static void DisconnectSession (String ServerName, int SessionId)
{
    IntPtr serverHandle = WTSOpenServer(ServerName);
    WTSDisconnectSession(serverHandle, SessionId, true);
    WTSCloseServer(serverHandle);
}
'@

$tstType=Add-Type -name Test -MemberDefinition $code -PassThru
#$tstType::DisconnectSession("localhost", 2)

একটি সেশন আইডি যেমন পাওয়া যাবে getProcesss। একটি সেশন ব্যবহার সংযোগ বিচ্ছিন্ন করতে (লগঅফ নয়!) $tstType::DisconnectSession("localhost", 2)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.