Mențineți un VPN Windows activ: declanșați rasdial la evenimentul de deconectare
RasClient 20226 și 20227 marchează o cădere; 631 înseamnă că o persoană a făcut-o. Declanșați rasdial la primele două, păstrați o acreditare și citiți codul de ieșire.
Windows nu oferă nicio politică de reapelare pentru clientul său VPN, așa că o conexiune care cade la miezul nopții este încă oprită la micul dejun. O activitate programată care urmărește deconectarea și rulează rasdial închide acel gol fără un client terț. Dacă activitatea se comportă ca un operator sau ca o buclă depinde de trei detalii: ce evenimente potrivește, ce acreditări poate vedea și ce face cu rezultatul. Niciunul dintre cele trei nu este greu, iar lipsa oricăruia dintre ele este ceea ce produce o activitate care apelează la nesfârșit.
De ce un temporizator este declanșatorul greșit
Un temporizator apelează după propriul program, indiferent dacă tunelul este oprit sau nu. Asta produce încercări de care nimeni nu avea nevoie, iar o încercare în timpul unei sesiuni de lucru o poate întrerupe. Un declanșator de eveniment se aprinde doar când conexiunea își schimbă starea, ceea ce este mai ieftin și mai ușor de judecat. Evenimentul poartă și motivul, iar motivul este ceea ce separă o defecțiune de rețea de o persoană care se deconectează intenționat.
Acea distincție este diferența dintre o activitate utilă și una care se luptă cu utilizatorul în fiecare seară. Este și partea care lipsește de obicei din rețetele care descriu doar acțiunea.
Perechea de evenimente și cel care trebuie suprimat
Clientul serviciului de acces la distanță scrie înregistrări de ciclu de viață în jurnalul Application sub furnizorul RasClient. 20226 marchează o conexiune încheiată, iar 20227 o încercare eșuată, așa că oricare dintre ele poate justifica o nouă apelare. Tot restul din activitate depinde de potrivirea exactă a acestor doi identificatori. Sunt stabili de ani de zile, de aceea rețetele construite pe ei încă circulă, dar o construcție care redenumește furnizorul sau identificatorii face ca interogarea să nu returneze nimic. Rulați din nou pasul de probă după fiecare actualizare de funcție, în loc să așteptați ca activitatea să nu mai declanșeze.
O terminare trebuie exclusă. Eroarea 631 înseamnă că utilizatorul a deconectat portul, iar o reapelare în acel moment se luptă cu persoana care tocmai a schimbat rețeaua intenționat. Puneți excluderea în filtrul declanșatorului, nu în script, astfel încât activitatea să nu pornească deloc. Trebuie să se aplice unui singur ID de eveniment, deoarece un predicat EventData se potrivește doar când elementul numit există, iar o clauză comună ar elimina în liniște fiecare eveniment al celuilalt ID. Citiți numele elementului dintr-o înregistrare reală înainte de a scrie filtrul:
Get-WinEvent -LogName Application -MaxEvents 5 -FilterXPath "*[System[Provider[@Name='RasClient'] and EventID=20226]]" | Select-Object -First 1 -ExpandProperty ToXml
XML-ul arată numele exacte ale Data din acea înregistrare. ErrorCode este ortografia obișnuită, iar o înregistrare care folosește altceva necesită înlocuirea acelui nume în filtrul de mai jos.
<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>
Lipiți asta în filtrul personalizat al declanșatorului și demonstrați-o ca interogare înainte de a deveni un declanșator. Același XPath rulează din PowerShell împotriva jurnalului live, ceea ce este modalitatea ieftină de a vedea cu ce se potrivește în timp ce istoricul activităților încă nu este implicat.
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
Un declanșator care în liniște nu se potrivește cu nimic arată exact ca o activitate care rulează și eșuează. Ambele apar ca „automatizarea nu funcționează”, și niciunul nu spune care jumătate lipsește. Verificați mai întâi ieșirea interogării, pentru că separă cele două cazuri într-un singur pas.
Apelarea eșuează pentru că nu este nimeni să scrie parola
Acțiunea rulează rasdial cu numele conexiunii. Când profilul nu are acreditări stocate în cache, apelarea eșuează imediat pentru că nu este nimeni să răspundă la prompt. Acesta este cel mai frecvent motiv pentru care o activitate declanșată corect nu face nimic vizibil, așa că verificați asta înainte de a atinge declanșatorul. Apelarea manuală dintr-o linie de comandă separă o problemă de acreditări de o problemă de programare.
Salvați acreditările o dată sub contul sub care va rula activitatea și faceți din acel cont o parte a designului. O activitate care rulează ca SYSTEM nu poate citi acreditările stocate în cache de contul dumneavoastră interactiv, iar o activitate care rulează ca altcineva nici atât. Numele trebuie să corespundă exact profilului, inclusiv orice prefix de domeniu din câmpul de utilizator.
rasdial
rasdial "Office VPN"
(Start-Process rasdial -ArgumentList '"Office VPN"' -Wait -PassThru -NoNewWindow).ExitCode
Prima comandă listează numele pe care le cunoaște Windows. A doua apelează după nume folosind acreditările din cache, iar a treia este forma pe care ar trebui să o folosească o acțiune PowerShell, pentru că așteaptă și returnează o valoare pe care activitatea o poate înregistra.
Citiți codul de ieșire în locul ferestrei
O activitate care pornește un proces fără să aștepte raportează succes de îndată ce procesul există. Pentru o apelare care poate eșua o secundă mai târziu, acel verdict este lipsit de valoare. Așteptarea codului de ieșire transformă acțiunea într-un rezultat real. Istoricul activităților arată doar că un proces a pornit, niciodată că un tunel a urcat.
Înregistrați valoarea cu o marcă de timp la fiecare rulare. O singură eșuare după o cădere este normală, în timp ce trei eșuari consecutive cu același cod indică acreditările sau profilul, nu rețeaua. Acest tipar este ceea ce face istoricul demn de citit.
Adăugați un interval scurt de repetare ca asigurare și fiți explicit despre modul în care interacționează cu un declanșator de eveniment. O repetare în fiecare minut timp de cinci minute oferă a doua încercare când internetul a revenit împreună cu tunelul, iar la Setări, „Dacă activitatea rulează deja, se aplică următoarea regulă”, activitatea dorește „Nu porni o instanță nouă”, astfel încât o repetare să nu se suprapună cu o apelare încă în curs. Fără această setare, două procese rasdial pot concura pentru același port, iar al doilea eșuează fără niciun motiv util.
Dovediți calea de recuperare
Testați ambele direcții intenționat. Deconectați manual și confirmați că nu are loc nicio reapelare, apoi dezactivați adaptorul de rețea și confirmați că activitatea se declanșează când legătura revine. Acele două teste acoperă regula de suprimare și cazul real de eșec, și nimic altceva nu face asta.
Apoi citiți istoricul activităților în locul pictogramei de conexiune. Istoricul înregistrează când a rulat activitatea, ce cont a folosit și ce a returnat acțiunea, și aceasta este dovada necesară când aceeași mașină cade din nou luna viitoare.