Windows өзінің VPN клиенті үшін қайта қоңырау шалу саясатын ұсынбайды, сондықтан түн ортасында үзілген қосылым таңғы ас кезінде де өшіп тұр. Үзілуді қадағалап, rasdial іске қосатын жоспарланған тапсырма бұл олқылықты үшінші тарап клиентінсіз жабады. Тапсырма оператор сияқты әрекет ете ме, әлде цикл сияқты ма, бұл үш бөлшекке байланысты: қандай оқиғаларға сәйкес келеді, қандай тіркелгі деректерін көре алады және нәтижемен не істейді. Үшеуінің ешқайсысы қиын емес, және солардың кез келгенін жіберіп алу мәңгі қоңырау шалатын тапсырманы тудырады.

Неге таймер дұрыс емес триггер болып табылады

Таймер туннель өшіп тұрса да, тұрмаса да өз кестесі бойынша қоңырау шалады. Бұл ешкімге қажет болмаған әрекеттерді тудырады, ал жұмыс сеансы кезіндегі әрекет оны үзуі мүмкін. Оқиға триггері қосылым күйін өзгерткенде ғана іске қосылады, бұл арзанырақ және ой қорытуға оңай. Оқиға себепті де алып жүреді, ал себеп желі ақауын әдейі ажыратқан адамнан ажырататын нәрсе.

Бұл айырмашылық пайдалы тапсырма мен күн сайын кешке пайдаланушымен арпалысатын тапсырма арасындағы айырмашылық. Бұл сонымен қатар тек әрекетті сипаттайтын рецепттерде әдетте жетіспейтін бөлік.

Оқиғалар жұбы және басылуы тиіс біреуі

Remote Access Service клиенті өмірлік цикл жазбаларын RasClient провайдері астында Application журналына жазады. 20226 аяқталған қосылымды, ал 20227 сәтсіз әрекетті белгілейді, сондықтан екеуі де жаңа қоңырауды негіздей алады. Тапсырмадағы қалғанның барлығы осы екі идентификаторды дәл сәйкестендіруге байланысты. Олар жылдар бойы тұрақты, сондықтан оларға негізделген рецепттер әлі де айналымда, бірақ провайдердің немесе идентификаторлардың атын өзгертетін құрылым сұрау ештеңе қайтармауына әкеледі. Әрбір функция жаңартуынан кейін дәлелдеу қадамын қайта орындаңыз, тапсырманың іске қосылуын тоқтатуын күтудің орнына.

Бір аяқталуды алып тастау керек. 631 қатесі портты пайдаланушы ажыратқанын білдіреді, ал сол сәттегі қайта қоңырау дәл қазір әдейі желі ауыстырған адаммен арпалысады. Алып тастауды скриптке емес, триггер сүзгісіне қойыңыз, тапсырма мүлдем басталмасын. Ол тек бір оқиға идентификаторына қатысты болуы керек, өйткені EventData предикаты тек аталған элемент бар болғанда сәйкес келеді, ал ортақ шарт басқа идентификатордың әрбір оқиғасын үнсіз тастап кетер еді. Сүзгіні жазбас бұрын элемент атын нақты жазбадан оқыңыз:

Get-WinEvent -LogName Application -MaxEvents 5 -FilterXPath "*[System[Provider[@Name='RasClient'] and EventID=20226]]" | Select-Object -First 1 -ExpandProperty ToXml

XML сол жазбадағы Data дәл атауларын көрсетеді. ErrorCode әдеттегі жазылуы, ал басқа нәрсені пайдаланатын жазба төмендегі сүзгіде сол атауды ауыстыруды қажет етеді.

<QueryList><Query Id="0" Path="Application"><Select Path="Application">*[System[Provider[@Name='RasClient'] and (EventID=20226 or EventID=20227)]] and (EventData[Data[@Name='ErrorCode'] != '631'] or System[EventID=20227])</Select></Query></QueryList>

Оны триггердің теңшелген сүзгісіне қойыңыз және ол триггер болмас бұрын сұрау ретінде дәлелдеңіз. Сол XPath PowerShell-тен тірі журналға қарсы орындалады, бұл тапсырма тарихы әлі араласпаған кезде оның неге сәйкес келетінін көрудің арзан жолы.

Get-WinEvent -LogName Application -MaxEvents 40 -FilterXPath "*[System[Provider[@Name='RasClient'] and (EventID=20226 or EventID=20227)]] and (EventData[Data[@Name='ErrorCode'] != '631'] or System[EventID=20227])" | Select-Object TimeCreated,Id,Message

Үнсіз ештеңеге сәйкес келмейтін триггер орындалып, сәтсіз аяқталатын тапсырмаға дәл ұқсайды. Екеуі де «автоматтандыру жұмыс істемейді» деп көрінеді, және ешқайсысы қай жартысы жетіспейтінін айтпайды. Алдымен сұраудың шығысын тексеріңіз, өйткені ол екі жағдайды бір қадамда ажыратады.

Қоңырау сәтсіз аяқталады, өйткені құпия сөзді теретін ешкім жоқ

Әрекет rasdial қосылым атымен іске қосады. Профильде кэштелген тіркелгі деректері болмаса, қоңырау бірден сәтсіз аяқталады, өйткені сұранысқа жауап беретін ешкім жоқ. Дұрыс триггерленген тапсырманың көрінетін ештеңе жасамауының ең көп тараған себебі осы, сондықтан триггерге тимес бұрын оны тексеріңіз. Команда жолынан қолмен қоңырау шалу тіркелгі деректері мәселесін жоспарлау мәселесінен ажыратады.

Тіркелгі деректерін тапсырма жұмыс істейтін тіркелгі астында бір рет сақтаңыз және сол тіркелгіні дизайнның бөлігі етіңіз. SYSTEM ретінде жұмыс істейтін тапсырма сіздің интерактивті тіркелгіңіз кэштеген деректерді оқи алмайды, басқа біреу ретінде жұмыс істейтін тапсырма да оқи алмайды. Атау сонымен қатар профильге дәл сәйкес болуы керек, пайдаланушы өрісіндегі кез келген домен префиксін қоса алғанда.

rasdial
rasdial "Office VPN"
(Start-Process rasdial -ArgumentList '"Office VPN"' -Wait -PassThru -NoNewWindow).ExitCode

Бірінші команда Windows білетін атауларды тізімдейді. Екіншісі кэштелген тіркелгі деректерін пайдаланып атау бойынша қоңырау шалады, ал үшіншісі — PowerShell әрекеті пайдалануы тиіс пішім, өйткені ол күтеді және тапсырма жаза алатын мәнді қайтарады.

Терезенің орнына шығу кодын оқыңыз

Процесті күтпей бастайтын тапсырма процесс пайда болған бойда сәттілік туралы хабарлайды. Бір секундтан кейін сәтсіз аяқталуы мүмкін қоңырау үшін бұл үкім пайдасыз. Шығу кодын күту әрекетті нақты нәтижеге айналдырады. Тапсырма тарихы өздігінен тек процестің басталғанын көрсетеді, туннельдің көтерілгенін ешқашан көрсетпейді.

Әр іске қосуда мәнді уақыт белгісімен жазыңыз. Үзілістен кейінгі жалғыз сәтсіздік қалыпты, ал бір кодпен қатарынан үш сәтсіздік желіге емес, тіркелгі деректеріне немесе профильге нұсқайды. Дәл осы үлгі тарихты оқуға тұрарлық етеді.

Сақтандыру ретінде қысқа қайталау аралығын қосыңыз және оның оқиға триггерімен қалай әрекеттесетінін нақты айтыңыз. Бес минут ішінде әр минут сайын қайталау интернет туннельмен бірге қайтқанда екінші әрекетті береді, ал Параметрлерде «Егер тапсырма әлдеқашан орындалып жатса, келесі ереже қолданылады» кезінде тапсырма «Жаңа дананы бастамау» қалайды, осылайша қайталау әлі жалғасып жатқан қоңыраумен қабаттаспайды. Бұл параметрсіз екі rasdial процесі бір порт үшін жарыса алады және екіншісі пайдалы себепсіз сәтсіз аяқталады.

Қалпына келтіру жолын дәлелдеңіз

Екі бағытты да әдейі тексеріңіз. Қолмен ажыратып, қайта қоңырау болмайтынын растаңыз, содан кейін желі адаптерін өшіріп, байланыс қайтқанда тапсырма іске қосылатынын растаңыз. Осы екі тест басу ережесін және нақты ақау жағдайын қамтиды, ал басқа ештеңе мұны істемейді.

Содан кейін қосылым белгішесінің орнына тапсырма тарихын оқыңыз. Тарих тапсырманың қашан орындалғанын, қай тіркелгіні пайдаланғанын және әрекеттің не қайтарғанын жазады, және келесі айда сол машина қайта үзілгенде дәл осы дәлел қажет болады.

Қатысты мақалалар