PDA

Показать полную графическую версию : [решено] скрипт сброса дубля сеанса на других серверах


rukito
13-01-2023, 09:18
Добрый день всем.
Есть скрипт, суть - при входе на любой сервер после запуска скрипт получает имя сервера и соответственно выполняется нужное условие. Но работает не верно из-за синтаксических ошибок.
Прошу помощи.

@echo off
setlocal


if (%hostname%) EQU "SRV-TL-TSD0608" do ((qwinsta /server:SRV-TL-TSD0508 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0508 %%i /V
qwinsta /server:SRV-TL-TSD0408 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0408 %%i /V
qwinsta /server:SRV-TL-TSD0308 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0308 %%i /V
qwinsta /server:SRV-TL-TSD0208 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0208 %%i /V
qwinsta /server:SRV-TL-TSD0108 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0108 %%i /V
)

else if (%hostname%) EQU "SRV-TL-TSD0508" do ( qwinsta /server:SRV-TL-TSD0608 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0608 %%i /V
qwinsta /server:SRV-TL-TSD0408 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0408 %%i /V
qwinsta /server:SRV-TL-TSD0308 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0308 %%i /V
qwinsta /server:SRV-TL-TSD0208 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0208 %%i /V
qwinsta /server:SRV-TL-TSD0108 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0108 %%i /V
)
else if (%hostname%) EQU "SRV-TL-TSD0408" do ( qwinsta /server:SRV-TL-TSD0608 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0608 %%i /V
qwinsta /server:SRV-TL-TSD0508 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0508 %%i /V
qwinsta /server:SRV-TL-TSD0308 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0308 %%i /V
qwinsta /server:SRV-TL-TSD0208 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0208 %%i /V
qwinsta /server:SRV-TL-TSD0108 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0108 %%i /V
)
else if (%hostname%) EQU "SRV-TL-TSD0308" do ( qwinsta /server:SRV-TL-TSD0608 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0608 %%i /V
qwinsta /server:SRV-TL-TSD0508 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0508 %%i /V
qwinsta /server:SRV-TL-TSD0408 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0408 %%i /V
qwinsta /server:SRV-TL-TSD0208 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0208 %%i /V
qwinsta /server:SRV-TL-TSD0108 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0108 %%i /V
)
else if (%hostname%) EQU "SRV-TL-TSD0208" do ( qwinsta /server:SRV-TL-TSD0608 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0608 %%i /V
qwinsta /server:SRV-TL-TSD0508 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0508 %%i /V
qwinsta /server:SRV-TL-TSD0408 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0408 %%i /V
qwinsta /server:SRV-TL-TSD0308 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0308 %%i /V
qwinsta /server:SRV-TL-TSD0108 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0108 %%i /V
)
else if (%hostname%) EQU "SRV-TL-TSD0108" do ( qwinsta /server:SRV-TL-TSD0608 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0608 %%i /V
qwinsta /server:SRV-TL-TSD0508 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0508 %%i /V
qwinsta /server:SRV-TL-TSD0408 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0408 %%i /V
qwinsta /server:SRV-TL-TSD0308 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0308 %%i /V
qwinsta /server:SRV-TL-TSD0208 | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:SRV-TL-TSD0208 %%i /V
))

DJ Mogarych
13-01-2023, 11:06
Нам предлагается поискать синтаксические ошибки в вашем скрипте?

Лучше опишите задачу.

rukito
13-01-2023, 11:15
задача - при входе в терминальный сервер его старые сеансы на всех других серверах завершались.

DJ Mogarych
13-01-2023, 12:47
Powershell

$servers = @(
"SRV-TL-TSD0108"
"SRV-TL-TSD0208"
"SRV-TL-TSD0308"
"SRV-TL-TSD0408"
"SRV-TL-TSD0508"
"SRV-TL-TSD0608"
) -ne $env:COMPUTERNAME

$servers |% {
$users = qwinsta /server:$_ |% {$_.trim() -replace "\s+",","} |ConvertFrom-Csv
if ($user = $users |? ПОЛЬЗОВАТЕЛЬ -eq $env:username) {
logoff /server:$_ $user.id
}
}


Скрипт универсальный, лучше его положить куда-нибудь на \\domain.com\NETLOGON или в расшаренный каталог.
Суть: из списка, где перечислены все терминальные сервера, выбираются все, кроме того, на котором сработал скрипт. Далее для каждого сервера выполняется выборка и выход из сессии, если юзер найден.

rukito
13-01-2023, 13:35
очень благодарен!




© OSzone.net 2001-2012