none
автоматизация рутины 2 RRS feed

  • Вопрос

  • Добрый день.

    Есть принтер у которого зарегистрированы службы в винде и они периодически падают раз  в неделю или раз  месяц.

    проверить состояние служб могу командой:

    Get-Service -name Xerox*

    а как сделать, чтоб скрипт (самого скрипта есессна нет) проверял работает служба или нет и запускал ее.

    Только еще уточнее для общего рразвития. Как часто такой скрипт можно и нужно запускать, чтоб он в систему не гадил ивенты и алерты.

    23 апреля 2020 г. 19:09

Все ответы

  • в настройках службы есть окно настроек поведение при падении

    если служба именно падает с ошибкой и не стартует больше то вы можете настроить перезапуски этой службы

    если графических настроек не хватит то команда sc вам поможет настроить поведение еще более гибко

    если же служба находится в статусе Running то через 

    Get-Service -name xerox* | Stop-Service
    Get-Service -name xerox* | Start-Service
    этот с позволения сказать скрипт можете повесить на ежедневное выполнение ночью если говорите что серсис 1 день работает


    The opinion expressed by me is not an official position of Microsoft

    23 апреля 2020 г. 20:25
    Модератор
  • Эту часть решить в принципе просто, даже для меня.

    Вопрос немного шире.

    Стартует скрипт например через каждые 15 минут каждого часа.

    он проверяет состояние служб и в случае падения он их перезапускает.

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

    а именно. этот принтер настроенна лдап и из ад берет список пользователей которые могут авторизоваться. так вот. служба вроде как в статусе "Runing", а авторизация не проходит.

    как в таком случае сделать ее перезапуск кроме как в ручну.

    24 апреля 2020 г. 5:51
  • как мы говорили в первом комментарии для перезапуска службы 'скриптом' не трубуется заканчивать гарвард и в вашем втором вопросе акцент должен стоять не на том "как перезапустить службу которая находится в статусе Running?" (на это и есть 'скрипт'), а "как определить что служба не выполняет своих функций даже если находится в статусе Running?"

    Если отталкиваться от второго вопроса, то возникают уже вопросы к вам "как вы определяете что сервис работает неправильно?", "какими еще способами можно это определить?", "почему так происходит?"

    Все вопросы к вам требуют вдумчивого исследования, общения с експертами xerox, поиска решений в интернете и множества проб найти комбинацию действий которые можно будет автоматизировать.


    The opinion expressed by me is not an official position of Microsoft

    24 апреля 2020 г. 6:47
    Модератор
  • 100% правильный и грамотный подход.

    по вдумчивым вопросам\ответам:

    вопрос: как вы определяете что сервис работает неправильно?

    ответ: пользователь не может авторизоваться на принтере (используется либо пароль, либо карточка)

    в службах windows я вижу что служба в состоянии "Stop".

    вопрос: почему так происходит?

    ответ: скачок по питанию (бесперебойник на такую ду* не поставить),

    сетевые проблемы (опять же возможно из-за питания), хотя тут "упсы" уже стоят.

    ну и проблемы винды (возможные) и самого софта.

    отсюда и желание мониторить саму службу а их 5 штук. и в момент когда отключилась перезапустить ее. без моего участия.

    24 апреля 2020 г. 9:36
  • 100% правильный и грамотный подход.

    по вдумчивым вопросам\ответам:

    вопрос: как вы определяете что сервис работает неправильно?

    ответ: пользователь не может авторизоваться на принтере (используется либо пароль, либо карточка)

    в службах windows я вижу что служба в состоянии "Stop".

    вопрос: почему так происходит?

    ответ: скачок по питанию (бесперебойник на такую ду* не поставить),

    сетевые проблемы (опять же возможно из-за питания), хотя тут "упсы" уже стоят.

    ну и проблемы винды (возможные) и самого софта.

    отсюда и желание мониторить саму службу а их 5 штук. и в момент когда отключилась перезапустить ее. без моего участия.

    ок, если пользователь сообщает о проблеме то это вам никак не поможет, стоит искать пути как вы без пользователя можете определить комент когда стало все плохо и нужно что-то предпринять

    Если авторизация происходит на принтере, то возможно у него есть какой-то api, или лог, или возможность высылать трапы по snmp со статусом того что у него (принтера) что-то не ок

    В первом ответе на мой коммент вы написали что запускать упавшие службы вы уже разобрались как но вопрос теперь в службах которые Running но не выполняют свою функцию. Сейчас пишите про статус Stop. Поясните пожалуйста эти аспекты, так как складывается впечатление что задача очерчена не точно.

    Почему нельзя поставить упс на принтер? сервера и даже здания ставят

    Если проблема софта возможна (а это так), то стоит поискать более новый/старый/совместимый софт

    Если проблемы ос, то можно например попробовать ее обновить или начать перезагружать время от времени (например в выходные), поискать ошибки в логах итд.

    К сожалению вас вопрос довольно абстрактен и его можно решить только комплексом мер. Не всегда решение в лоб является правильным


    The opinion expressed by me is not an official position of Microsoft

    24 апреля 2020 г. 10:21
    Модератор
  • Извините, я снова начал мешать мух с котлетами.

    История началась так....

    По дороге на работу я принял звонок от пользователя, что он пользователь не может печатать на принтере. Зная пользователей опыт общения с ними довольно долгий не один год. Я начал докапываться, что не так.

    Оказалось что они пользователи выстроились друг за другом в долгую очередь и не могут ничего распечатать. как в анекдоте с дверями, покрышками и зеркалом заднего вида все сделали, а эффект "0".

    Дальше по расспросам оказалось, что когда пользователь пытается авторизоваться на приинтере своим пропуском или по пинкоду у них ничего не получается.

    Когда я прибыл на рабочее место проверил службы принтера на сервере под управление ОС Windows, оказалось служба одна из пяти остановлена. Я перезапустил все пять, чтоб наверняка и проверил доступность зайдя в админ панель принтера через веб браузер. Зашел, проверил что могу шариться по интерфейсу отправил на принтер документ сходил убедился, что печатает и пошел спать(работать в смысле).

    Дальше заинтересовался автоматизацией перезапуска служб. Пока рыл инфу увидел, что служба может находиться в состояниях "остановлена" "работает" и вроде как работает, но при этом сам сервис не доступен. Отсюда вся путаница.

    Пока писал сообщение, нашел вот такую штуку в логах windows (Превышение времени ожидания (30000 мс) при ожидании подключения службы "Xerox.MobilePrintHostService".)

    24 апреля 2020 г. 18:49
  • ок, это уже похоже на складную историю

    если такие проблемы возникают редко то сильно заморачиваться, перерывать форумы и штормить поддержку ксерокса смысла нет, добавили скрипт на запуск упавших служб и ладненько - проблемы будут появляться реже следовательно профит есть

    Можно проверять статус всех xerox* и если статус -not "running" то перезапускать все (то что вы и сделали руками) 

    если ошибка сильно назойливая при ее возникновении стоит попробовать найти симптомы как можно определить что все плохо со стороны сервера

    пример 1: когда пользователь не может печатать и службы запущены принтер не пингуется с сервера

    решение 1: добавить в ваш скрипт проверку пингуется ли сервер и если нет то предпринимаем действия

    пример 2: пользователь не может авторизоваться, но службы запущены, и принтер пингуется, и в этот же момент на принтере в вебморде с логами регистрируется ошибка подключения к серверу которую можно прочесть войдя на страничку https://192.168.22.33/myXerox/logs

    решение 2: проверка лога принтера через invoke-webrequest на наличие ошибки за последние 15 минут. если была ошибка - принимаем действия...

    и так далее


    The opinion expressed by me is not an official position of Microsoft

    24 апреля 2020 г. 19:43
    Модератор
  • ммм? а пробовали предположить что проблема в самом принтере?

    дело не мое конечно.

    чмоке,KISS!
    • Изменено Svolotch 24 апреля 2020 г. 20:30
    24 апреля 2020 г. 20:15
  • по алгоритмизации немного проще.

    1 скрипт выполняет проверку раз в  20 мин (если винде не поплохеет).

    если служба в состоянии стоп - перезапуск\старт.

    2 создать бездушного пользователя и как вы говорите через api выполнять авторизацию раз в час.

    если авторизация не прошла выполнить рестарт служб не зависимо от их состояния.

    вопрос как раз как делать сам скрипт. вот что у меня получилось:

     Get-Service -name Xerox* | start-service | where-object {$_.Status -EQ "Stoped"}

    может что-то можно сделать красивше

    24 апреля 2020 г. 20:35
  • по алгоритмизации немного проще.

    1 скрипт выполняет проверку раз в  20 мин (если винде не поплохеет).

    если служба в состоянии стоп - перезапуск\старт.

    2 создать бездушного пользователя и как вы говорите через api выполнять авторизацию раз в час.

    если авторизация не прошла выполнить рестарт служб не зависимо от их состояния.

    вопрос как раз как делать сам скрипт. вот что у меня получилось:

     Get-Service -name Xerox* | start-service | where-object {$_.Status -EQ "Stoped"}

    может что-то можно сделать красивше

    не знаю api xerox и предположу что авторизация на железке может быть совсем не тем же самым что авторизация по api но попробовать однозначно стоит

    Русским языком вы написали следующее: возьми сервисы имя которых начинается с ксерокс и запусти их (в этот момент те что были запущеными такими и остануться а те что не были запустятся) среди которых статус не запущено. Согласитесь звучит косноязычно.

    # Получаем список сервисов которые не запущены и если такие есть то сохраняем их в переменной $Services
    $Services = Get-Service -name Xerox*| where-object {$_.State -ne "Running"}
    # Если в переменной есть хоть что-то, то это остановленый сервис и мы попадаем внутрь if
    if ($Services){
       # Если мы тут, то что-то пошло не так и хотябы 1 сервис упал - выключаем все
       Get-Service -name Xerox* | Stop-Service
       # Даем время на подумать (10 секунд)
       Start-Sleep -s 10
       # Запускаем все сервисы
       Get-Service -name Xerox* | Start-Service
       #ToDo1 Необходимо добавить проверку что все сервисы запустились и те что не запустились попробовать запустить еще пару раз
       #ToDo2 Если даже после нескольких попыток сервисы не взлетели - отправляем письмо админу со статусами сервисов, датой и временем возникновения проблемы
    }

    В скрипте выше теже 2 команды что и в первом ответе, но чтоб не повторяться я добавил немного обвязок и комментов

    Хотите практики сделайте ToDo1 и 2. Все необходимое для ToDo1 в примере уже использовалось

    Попробуйте написать, а потом разберем результаты

    Касательно вашего where приклеенного вконце - where отбирает что-то по какому-то критерию и передает дальше (на следующий пайп или на вывод) а у вас там ничего нет. В вашем примере where должен был быть на 2 позиции а Start-Service на третьей

    Помнится мне что свойство необходимое вам называется не status a state


    The opinion expressed by me is not an official position of Microsoft

    24 апреля 2020 г. 21:07
    Модератор
  • Полезные ресурсы:

    • Документация по PowerShell
    • Галлереи TechNet (к сожалению МС планирует их выпилить в скором времени но пока они работают)
    • Официальные курсы по PowerShell:
    1. MS 10961 - Automating Administration with Windows PowerShell
    2. MS 10962 - Advanced Automated Administration with Windows PowerShell
    3. MS 55202 - PowerShell 5.0 and Desired State Configuration
    4. MS 55039 - Windows PowerShell Scripting and Toolmaking
    • Книги:
    1. Getting Started with PowerShell (книга от основ до приемлевого уровня)
    2. Windows Powershell Cookbook (книга справочник в формате задачка - решение)

    Я начинал с курса, что правда успех его во многом зависит от лектора (у меня была практика с интересными и с неинтересными лекторами поэтому тут дело случая), а потом практика и книги

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

    Начните с ToDo1, можно с блок схемы, а потом и с кода - все уже написано в том или ином формате в примере кроме цикла который для начала можете опустить - начинайте с простого и пробуйте экпериментировать на практике.

    Посмотрите что вы получаете при выполнеии Get-Service, потом сравните с Get-Service -Name Xerox*, потом сравните с  Get-Service -Name Xerox* | Where {$_.State -ne 'Running'} и с Get-Service -Name Xerox* | Where {$_.Status -ne 'Running'}

    Попробуйте выключить сервис вручную и проверить последние 2 команды, и включить все сервисы и проверить 2 последние команды

    потом выполните первую команду в примере и посмотрите что попадает в переменную итд. Все это вы можете делать в PowerShell ISE выполняя выделенный фрагмент кода нажимая F8


    The opinion expressed by me is not an official position of Microsoft

    25 апреля 2020 г. 10:56
    Модератор
  • Get-Service (вывод на экран всех зарегистррованны служб на пк)

    Get-Service -Name Xerox* (вывод информации на экран о всех службах имя которых начинается с Xerox*)

    а вот 

    Get-Service -Name Xerox* | Where {$_.State -ne 'Running'}

    и

    Get-Service -Name Xerox* | Where {$_.Status -ne 'Running'}
    в выводах не отличаются ни при включенных службах, ни при выключенных.


    • Изменено realet 25 апреля 2020 г. 20:01
    25 апреля 2020 г. 12:15
  • Get-Service (вывод на экран всех зарегистррованны служб на пк)

    Get-Service -Name Xerox* (вывод информации на экран о всех службах имя которых начинается с Xerox*)

    а вот 

    Get-Service -Name Xerox* | Where {$_.State -ne 'Running'}

    и

    Get-Service -Name Xerox* | Where {$_.Status -ne 'Running'}
    в выводах не отличаются ни при включенных службах, ни при выключенных.

    ок, действительно правильный параметр Status, мой косяк

    что касательно одинаковых выводов то это не так. Пример:

    Поясню, так как свойства State не существует, то и $_.State будет $null, следовательно ($_.State -ne 'Running') всегда правда, поэтому все что возвращает get-service и попадает на выход (ничего не отфильтровывается), но Status работает вполне правильно.

    Посмотрите на скрин выше первый вывод и второй (при запущеном сервисе), и я уверен что у вас аналогичная ситуация

    А вот при выключеном сервисе вывод действительно будет идентичный - в случае со State $Null -ne "Running" а в случае со Status "Stopped" -ne "Running"

    Если вы отвечаете, то лучше пишите в новом сообщении а не редактируйте старое сообщение, так как о новых сообщениях приходят уведомления, а о редактировании уведомнений нет


    The opinion expressed by me is not an official position of Microsoft

    27 апреля 2020 г. 11:15
    Модератор