1

Тема: CMD/BAT: "at" и "time"

Здравствуйте!
Помогите, пожалуйста, найти решение.
Мне нужно регулярно выполнять программы на удаленных компьютерах. Сейчас работаю через телнет, но вскоре придётся переехать в совсем другой сегмент сети и телнет, из соображений безопасности, уже не будет подходить. Пользоваться сторонними программами не хочу. Насколько понял, можно выполнять команды на удаленных компьютерах с помощью команды "at". Но тут есть закавыка - чёрт его знает, какое там, на удаленных компьютерах, стоит время и насколько оно отличается от моего.
Соответственно возникает два вопроса:
-как узнать время на удаленном компьютере?
-как сформировать такую переменную для подстановки в команду "at", которая была бы, например, на 5 секунд больше, чем текущее время удаленного компьютера?

Подскажите, пожалуйста.

2

Re: CMD/BAT: "at" и "time"

fsc_psd пишет:

Пользоваться сторонними программами не хочу.

Ну, psexec вроде как уже вовсе не сторонняя программа: Руссинович работает в Microsoft после покупки последней его конторы Sysinternals. Чем не нравится?

3

Re: CMD/BAT: "at" и "time"

Доброго дня.
Простите за подвисание темы - в отпуске был.
В общем, psexec, смысле безопасности - тот же телнет. Следовательно, не очень подходит. Можно, конечно, поднимать шифрование, но это явно лишнее в контексте данной задачи.
Да и есть все же-таки какое-то предубеждение к стронним программам, даже если они "почти" родные.

Может быть, кто-нибудь всё же подсобит с вопросами:
-как узнать время на удаленном компьютере?
-как сформировать такую переменную для подстановки в команду "at", которая была бы, например, на 5 секунд больше, чем текущее время удаленного компьютера?

4

Re: CMD/BAT: "at" и "time"

OFF:

fsc_psd пишет:

В общем, psexec, смысле безопасности - тот же телнет.

Отнюдь.

fsc_psd пишет:

Можно, конечно, поднимать шифрование, но это явно лишнее в контексте данной задачи.

Тогда чего же Вам надо?

fsc_psd пишет:

Да и есть все же-таки какое-то предубеждение к стронним программам, даже если они "почти" родные.

Она «не почти», а уже несколько лет как, целиком и полностью — Microsoft. Ещё задолго до покупки Sysinternals во многих разделах MSDN, на форумах TechNet приводились прямые указания на использование тех или иных программ Sysinternals. Немалая часть функционала этих программ ныне перекочевала в инструменты Windows.

fsc_psd пишет:

-как узнать время на удаленном компьютере?
-как сформировать такую переменную для подстановки в команду "at", которая была бы, например, на 5 секунд больше, чем текущее время удаленного компьютера?

@echo off
setlocal

set sNode=%~1

if not defined sNode (
    echo Usage:   %~nx0 ^<Machine name^>
    echo Example: %~nx0 RemoteServer

    goto :eof
)

for /f "skip=1 tokens=1-3" %%i in ('wmic.exe /node:"%sNode%" path Win32_LocalTime get Hour^, Minute^, Second') do (
    set /a iHours   = %%i
    set /a iMinutes = %%j
    set /a iSeconds = %%k
)

echo Hours  : %iHours%
echo Minutes: %iMinutes%
echo Seconds: %iSeconds%


set /a iNewHours   = iHours
set /a iNewMinutes = iMinutes
set /a iNewSeconds = iSeconds + 5

if %iNewSeconds% geq 60 (
    set /a iNewSeconds -= 60
    set /a iNewMinutes += 1
)

if %iNewMinutes% geq 60 (
    set /a iNewMinutes -= 60
    set /a iNewHours   += 1
)

echo New Hours  : %iNewHours%
echo New Minutes: %iNewMinutes%
echo New Seconds: %iNewSeconds%

endlocal
exit /b 0
c:\Temp\001>001.cmd
Usage:   001.cmd <Machine name>
Example: 001.cmd RemoteServer

c:\Temp\001>001.cmd .
Hours  : 8
Minutes: 49
Seconds: 57
New Hours  : 8
New Minutes: 50
New Seconds: 2

5 (изменено: hvs, 2010-09-28 15:55:33)

Re: CMD/BAT: "at" и "time"

2 fsc_psd

Ну если psexec Вы считаете "неродным" , то почему бы Вам тогда не использовать WinRM, точнее подсистему удаленного доступа winrs?

Это если Вам неудобно будет пользоваться предыдущим советом (сценарием). Получилось бы (в самом примитивном) варианте что-т вроде этого (привожу не весь сценарий, а только командную строку).

winrs -r:remote_host_name -u:trusted_user_name_for_remote_host cmd /c echo %date% %time%

где:
remote_host_name - имя удаленного хоста
trusted_user_name_for_remote_host - доверительная для удаленного хоста учетная запись
ну у весь остальной вывод CMD вернется как результат. Уж его то несложно перехватить.

PS
У winrs есть еще параметр -p, допускающий указание "волшебного слова" как аргумента при вызове.

6

Re: CMD/BAT: "at" и "time"

В общем, psexec, смысле безопасности - тот же телнет.

Ну вот тут указано, что пароли он-таки передает в явном виде.
И вообще не нравится он мне почему-то. Чёрт его даже и знает, почему.

Шифрование я назвал лишним, потому что должны же быть штатные способы более-менее безопасной удаленной работы.
Посредством ntlm, например.

:-)
Alexii, ваш скрипт крепко заставил меня задуматься. Это явно не то простенькое решение, котороя я искал, но тем не менее, спасибо.
Посредством wmic, насколько я понял, можно вообще не заморачиваясь, выполнять удаленно команды, навроде как psexec.
А вот просто так, средствами командной строки никак время удаленной машины не вывести?

Hvs, спасибо за наводку, я поизучаю WinRM, если будет время. Но в контексте данной задачи это опять-таки избыточное решение.
И я не уверен, что у меня будет возможность доустанавливать эту службу на все машины.

7

Re: CMD/BAT: "at" и "time"

fsc_psd пишет:

Ну вот тут указано, что пароли он-таки передает в явном виде.

Если Вы его явно указываете. По умолчанию же никаких паролей не передаётся.

8

Re: CMD/BAT: "at" и "time"

Доброго дня!
В силу ряда причин вынужден вновь поднять тему.
1. Подскажите, пожалуйста, простой способ узнать время с точностью до секунды на удаленном компьютере средставми командной строки.
2. Подскажите, пожалуйста, простой способ сформировать такую переменную для подстановки в команду "at", которая была бы на 10 секунд больше текущего системного времени удаленного компьютера.

Сейчас всё делается вручную: через "net time" выясняется время (к сожалению, с точностью лишь до минуты) и руками подставляется аргументом в "at". Основной минус - большая (минутная) погрешность.

Предложенное ниже решение с помощью wmic не подходит: во-первых слишком громоздко, во вторых не заработало - "Ошибка 0x800706ba Сервер RPC недоступен" - и даже разбираться неохота, в чём там дело.

Psexec не понравился. Во-первых, чтобы запустить его в любом контексте, кроме администраторского, нужно таки передавать логин/пароль в явном виде. Во-вторых, глючит: всегда зависает по ctrl+c, иногда зависает просто так, в сеансе psexec почему-то нарушается ход аутентификации через "net use", обязательно нужны открытые админские шары для копирование/удаления самого себя и проч. Как разовый инструмент сойдет наверное, для регулярной работы мне не подошёл.

В процессе поисков наткнулся на отличное решение - завернуть telnet через ipsec. Явных минусов я не нашёл, но ввиду несколько громоздкой реализации подходит не всегда.