Batch:
ไม่มียูทิลิตี้ "ออกจากระบบตามชื่อ" ของ Windows ที่ฉันทราบ
คุณสามารถใช้แบตช์ไฟล์เพื่อค้นหาเซสชันปัจจุบันเลือกชื่อและรหัสเซสชันจากนั้นออกจากระบบที่ตรงกับผู้ใช้:
@echo off
query session > sessioninfo.txt
for /f "skip=2 tokens=2,3" %%i in (sessioninfo.txt) DO if [%%i]==[%1] logoff %%j
del sessioninfo.txt
การใช้งาน:
batchfile.bat username
ชุดโหลดผลลัพธ์ของquery sessionการเป็นไฟล์ข้อความ
จากนั้นก็ใช้forห่วงข้ามสองบรรทัดแรกในการโหลดชื่อผู้ใช้และรหัสเซสชั่นราชสกุลสำหรับแต่ละสายเข้าและIJ
Iถูกตรวจสอบเพื่อดูว่ามันตรงกับชื่อที่ให้ไว้เป็นอาร์กิวเมนต์ (แสดงโดย%1) และถ้าlogoffเป็นเช่นนั้นจะใช้กับ ID เซสชั่นที่สอดคล้องกัน
หลังจากความคิดเห็นและรายละเอียดบางอย่างเกี่ยวกับผู้ใช้ "ไม่ได้เชื่อมต่อ" ฉันคิดว่าสิ่งนี้จะทำได้ดีกว่าใน PowerShell
PowerShell:
นี่คือสคริปต์ PowerShell ที่จะออกจากระบบเซสชันทั้งหมดที่ตรงกับชื่อผู้ใช้ที่คุณป้อนและจะทำงานหากผู้ใช้หากใช้งานอยู่หรือถูกตัดการเชื่อมต่อ
param (
[string]$username = $(throw "-username is required.")
)
function Get-Sessions
{
$queryResults = query session
$starters = New-Object psobject -Property @{"SessionName" = 0; "UserName" = 0; "ID" = 0; "State" = 0; "Type" = 0; "Device" = 0;}
foreach ($result in $queryResults)
{
try
{
if($result.trim().substring(0, $result.trim().indexof(" ")) -eq "SESSIONNAME") {
$starters.UserName = $result.indexof("USERNAME");
$starters.ID = $result.indexof("ID");
$starters.State = $result.indexof("STATE");
$starters.Type = $result.indexof("TYPE");
$starters.Device = $result.indexof("DEVICE");
continue;
}
New-Object psobject -Property @{
"SessionName" = $result.trim().substring(0, $result.trim().indexof(" ")).trim(">");
"Username" = $result.Substring($starters.Username, $result.IndexOf(" ", $starters.Username) - $starters.Username);
"ID" = $result.Substring($result.IndexOf(" ", $starters.Username), $starters.ID - $result.IndexOf(" ", $starters.Username) + 2).trim();
"State" = $result.Substring($starters.State, $result.IndexOf(" ", $starters.State)-$starters.State).trim();
"Type" = $result.Substring($starters.Type, $starters.Device - $starters.Type).trim();
"Device" = $result.Substring($starters.Device).trim()
}
}
catch
{
$e = $_;
throw "ERROR: " + $e.PSMessageDetails
}
}
}
$username = $username.ToLower()
$userSessions = Get-Sessions | ? { ($_.UserName).ToLower() -eq $username } | Select ID, UserName
$numberOfSessions = ($userSessions | measure).Count
if ($numberOfSessions -gt 0) {
foreach ($session in $userSessions)
{
$sessionInfo = $session.Username + " (" + $session.ID + ")"
Write-Host "Found $sessionInfo"
logoff $session.ID /V
}
} else {
Write-Host """$username"" not found in session list."
}
การใช้งาน (จากภายใน PowerShell):
.\LogEmOff.ps1 Abdou76
อาร์กิวเมนต์ชื่อผู้ใช้ไม่คำนึงถึงขนาดตัวพิมพ์ (เช่น: AbDoU76 = Abdou76 = ABDOU76 = abdou76)