Страницы

Поиск по вопросам

Показаны сообщения с ярлыком users. Показать все сообщения
Показаны сообщения с ярлыком users. Показать все сообщения

воскресенье, 26 января 2020 г.

Менять пароль пользователя в ходе выполнения скрипта

#c #users #freebsd


Доброго времени суток, у меня стоит интересная задачка в ходе корой мне необходимо
менять пароль пользователя в ходе выполнения скрипта. Из всего что я знаю о фряхе я
остановился на команде passwd, но так как она получает пароль только при вводе, пытался
вызвать ее через popen и в поток забить новый пасс, но увы ничего не удалось...
P.S. по факту мне нужно создать пользователя, но команда pw не принимает пароль,
насколько я понял. и связи с этим приходится искать решение выше указанного геморроя    


Ответы

Ответ 1



Думаю, man 3 forkpty это то, что Вам нужно. Там через псевдотерминал (pty) надо работать. В принципе, не очень сложно написать некий двунаправленный аналог popen() на псевдотерминале вместо pipe. Например, expect делает так в spawn. Например, можно почитать здесь. Или покороче здесь. Идея в том, что Вы делаете псевдотерминал (это как бы связка из двух устройств -- master и slave (ведет себя аналогично обычному tty)), делаете fork и там dup дескрипторов 0,1,2 на slave, после exec passwd она считает, что работает с терминалом. Родительский процесс обменивается байтиками по master. ответ составлен из комментариев, написанных avp к вопросу.

суббота, 11 января 2020 г.

Есть ли возможность при запуске .bat файла установить факт был ли он запущен вручную или автоматически(Task sheduler)?

#windows #bat #автоматизация #task #users


OC: Windows 2008 R2 Enterprise

Моя ситация: С помощью Task Sheduler ежедневно запускается определенный .bat файл.
Иногда есть потребность запускать его вручную.

Моя задача: При ручном запуске от Юзера, после прохождения команд оставить консоль
открытую (Pause) чтобы прочитать логи. При этом после запуска с помощью Task Sheduler
процесс должен терминироваться без Паузы. %USERNAME% не подходит, так как TS запускает
бптник от того же пользователя, что и запускает его вручную.

Есть ли возможность определить запускает батник Task Sheduler?
Может можно терминировать программу другим способом? 
Например через минуту после того как она дойдет до конца?
    


Ответы

Ответ 1



Вариант 1. Настройте запуск этого самого батника с параметром. В самом батнике проверяйте параметр: if "%1"=="" pause или вот так: if not "%1"=="nopause" pause Вариант 2. Научите пользователя запускать батник не двойным кликом - а как полагается, из командной строки. Командная строка не закрывается просто так. Вариант 3. Научите пользователя запускать батник используя FAR Manager. Там можно посмотреть консольный вывод скрыв панели (Ctrl+O) Но самым "красивым" способом я считаю создание отдельного ярлыка для батника. В этом ярлыке настраивается запуск файла через cmd с ключом /k. Ключ /k означает "выполнить команду и не закрывать консоль":

Ответ 2



Есть ли возможность определить запускает батник Task Sheduler? В принципе, эту информацию можно вытащить (см. комментарий @avp к посту) Видно, что можно поискать родителя и сравнить с svchost.exe. Однако, мне кажется, что лучше решить вашу задачу другим способом. Можно передавать при запуске из таск шедулера дополнительный параметр, который опускать при ручном запуске. Когда батник получит управление -- проверить, с каким параметром был вызван. Если вручную -- запустить дополнительную команду (паузу). По-моему весьма тривиальный и логичный воркэраунд.

Ответ 3



В Task Scheduler запускать VbScript, который будет запускать батник и после отработки процесса завершать его. Терминировать процесс можно так. var WshShell = WScript.CreateObject("WScript.Shell"); WshShell.Run("taskkill /IM iexplore.exe", 0);

среда, 20 марта 2019 г.

Менять пароль пользователя в ходе выполнения скрипта

Доброго времени суток, у меня стоит интересная задачка в ходе корой мне необходимо менять пароль пользователя в ходе выполнения скрипта. Из всего что я знаю о фряхе я остановился на команде passwd, но так как она получает пароль только при вводе, пытался вызвать ее через popen и в поток забить новый пасс, но увы ничего не удалось... P.S. по факту мне нужно создать пользователя, но команда pw не принимает пароль, насколько я понял. и связи с этим приходится искать решение выше указанного геморроя


Ответ

Думаю, man 3 forkpty это то, что Вам нужно.
Там через псевдотерминал (pty) надо работать. В принципе, не очень сложно написать некий двунаправленный аналог popen() на псевдотерминале вместо pipe. Например, expect делает так в spawn
Например, можно почитать здесь. Или покороче здесь. Идея в том, что Вы делаете псевдотерминал (это как бы связка из двух устройств -- master и slave (ведет себя аналогично обычному tty)), делаете fork и там dup дескрипторов 0,1,2 на slave, после exec passwd она считает, что работает с терминалом. Родительский процесс обменивается байтиками по master

ответ составлен из комментариев, написанных avp к вопросу.

вторник, 5 марта 2019 г.

Есть ли возможность при запуске .bat файла установить факт был ли он запущен вручную или автоматически(Task sheduler)?

OC: Windows 2008 R2 Enterprise
Моя ситация: С помощью Task Sheduler ежедневно запускается определенный .bat файл. Иногда есть потребность запускать его вручную.
Моя задача: При ручном запуске от Юзера, после прохождения команд оставить консоль открытую (Pause) чтобы прочитать логи. При этом после запуска с помощью Task Sheduler процесс должен терминироваться без Паузы. %USERNAME% не подходит, так как TS запускает бптник от того же пользователя, что и запускает его вручную.
Есть ли возможность определить запускает батник Task Sheduler? Может можно терминировать программу другим способом? Например через минуту после того как она дойдет до конца?


Ответ

Вариант 1. Настройте запуск этого самого батника с параметром. В самом батнике проверяйте параметр:
if "%1"=="" pause
или вот так:
if not "%1"=="nopause" pause
Вариант 2. Научите пользователя запускать батник не двойным кликом - а как полагается, из командной строки. Командная строка не закрывается просто так.
Вариант 3. Научите пользователя запускать батник используя FAR Manager. Там можно посмотреть консольный вывод скрыв панели (Ctrl+O)

Но самым "красивым" способом я считаю создание отдельного ярлыка для батника. В этом ярлыке настраивается запуск файла через cmd с ключом /k. Ключ /k означает "выполнить команду и не закрывать консоль":