Hou 'n Windows-VPN aan die gang: aktiveer rasdial by die ontkoppelingsgebeurtenis
RasClient 20226 en 20227 merk 'n onderbreking; 631 beteken 'n persoon het dit gedoen. Aktiveer rasdial by die eerste twee, hou een geloofsbrief, en lees die uittreekode.
Windows lewer geen herkiesbeleid vir sy VPN-kliënt nie, so 'n verbinding wat om middernag val, is steeds af teen ontbyt. 'n Geskeduleerde taak wat vir die ontkoppeling wag en rasdial uitvoer, sluit daardie gaping sonder 'n derdeparty-kliënt. Of die taak soos 'n operateur of soos 'n lus optree, kom op drie besonderhede neer: watter gebeurtenisse dit pas, watter geloofsbrief dit kan sien, en wat dit met die resultaat doen. Nie een van die drie is moeilik nie, en om enige een daarvan te mis is wat 'n taak lewer wat vir ewig kies.
Waarom 'n tydhouer die verkeerde sneller is
'n Tydhouer kies op sy eie skedule, of die tonnel af is of nie. Dit lewer pogings wat niemand nodig gehad het nie, en 'n poging tydens 'n werksessie kan dit onderbreek. 'n Gebeurtenissneller vuur slegs wanneer die verbinding van toestand verander, wat goedkoper en makliker is om oor te redeneer. Die gebeurtenis dra ook die rede, en die rede is wat 'n netwerkfout skei van 'n persoon wat doelbewus ontkoppel.
Daardie onderskeid is die verskil tussen 'n nuttige taak en een wat elke aand teen die gebruiker veg. Dit is ook die deel wat gewoonlik ontbreek in resepte wat net die aksie beskryf.
Die gebeurtenispaar, en die een om te onderdruk
Die Remote Access Service-kliënt skryf lewensiklusrekords na die Application-log onder die RasClient-verskaffer. 20226 merk 'n verbinding wat geëindig het, en 20227 merk 'n poging wat misluk het, so elkeen kan 'n nuwe kies regverdig. Alles anders in die taak hang daarvan af om daardie twee identifiseerders presies te pas. Hulle is al jare stabiel, en daarom sirkuleer resepte wat daarop gebou is steeds, maar 'n bou wat die verskaffer of die ids hernoem, laat die navraag niks teruggee nie. Voer die bewysstap weer uit na elke kenmerkopdatering eerder as om te wag dat die taak ophou vuur.
Een beëindiging moet uitgesluit word. Fout 631 beteken die poort is deur die gebruiker ontkoppel, en 'n herkies op daardie oomblik veg teen die persoon wat pas doelbewus netwerke geruil het. Sit die uitsluiting in die snellerfilter eerder as in die script, sodat die taak glad nie begin nie. Dit moet slegs op een gebeurtenis-id van toepassing wees, want 'n EventData-predikaat pas net wanneer die genoemde element bestaan, en 'n gedeelde klousule sou stilweg elke gebeurtenis van die ander id laat val. Lees die elementnaam uit 'n werklike rekord voordat jy die filter skryf:
Get-WinEvent -LogName Application -MaxEvents 5 -FilterXPath "*[System[Provider[@Name='RasClient'] and EventID=20226]]" | Select-Object -First 1 -ExpandProperty ToXml
Die XML wys die presiese Data-name in daardie rekord. ErrorCode is die gewone spelling, en 'n rekord wat iets anders gebruik, benodig daardie naam in die filter hieronder.
<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>
Plak dit in die sneller se pasgemaakte filter, en bewys dit as 'n navraag voordat dit 'n sneller word. Dieselfde XPath loop vanuit PowerShell teen die lewendige log, wat die goedkoop manier is om te sien wat dit pas terwyl taakgeskiedenis nog nie betrokke is nie.
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
'n Sneller wat stilweg niks pas nie, lyk presies soos 'n taak wat loop en misluk. Albei kom voor as "die outomatisering werk nie", en nie een sê watter helfte ontbreek nie. Kyk eers na die navraaguitset, want dit skei die twee gevalle in een stap.
Die kies misluk omdat niemand daar is om die wagwoord te tik nie
Die aksie voer rasdial met die verbindingsnaam uit. Wanneer die profiel geen gekaste geloofsbrief het nie, misluk die kies onmiddellik omdat daar niemand is om die opdrag te beantwoord nie. Dit is die algemeenste rede waarom 'n korrek gesnellerde taak niks sigbaar doen nie, so kyk daarna voordat jy aan die sneller raak. Om met die hand uit 'n opdragprompt te kies, skei 'n geloofsbriefprobleem van 'n skeduleringsprobleem.
Stoor die geloofsbrief een keer onder die rekening waaronder die taak sal loop, en maak daardie rekening deel van die ontwerp. 'n Taak wat as SYSTEM loop, kan nie 'n geloofsbrief lees wat deur jou interaktiewe rekening gekas is nie, en 'n taak wat as iemand anders loop ook nie. Die naam moet ook presies by die profiel pas, insluitend enige domeinvoorvoegsel in die gebruikerveld.
rasdial
rasdial "Office VPN"
(Start-Process rasdial -ArgumentList '"Office VPN"' -Wait -PassThru -NoNewWindow).ExitCode
Die eerste opdrag lys die name wat Windows ken. Die tweede kies op naam met die gekaste geloofsbrief, en die derde is die vorm wat 'n PowerShell-aksie behoort te gebruik, want dit wag en gee 'n waarde terug wat die taak kan aanteken.
Lees die uittreekode eerder as die venster
'n Taak wat 'n proses begin sonder om te wag, rapporteer sukses sodra die proses bestaan. Vir 'n kies wat 'n sekonde later kan misluk, is daardie uitspraak waardeloos. Om vir die uittreekode te wag, maak die aksie 'n werklike resultaat. Taakgeskiedenis op sigself wys net dat 'n proses begin het, nooit dat 'n tonnel opgekom het nie.
Teken die waarde met 'n tydstempel by elke loop aan. 'n Enkele mislukking ná 'n onderbreking is normaal, terwyl drie mislukkings in 'n ry met dieselfde kode na die geloofsbrief of die profiel wys eerder as na die netwerk. Dit is daardie patroon wat die geskiedenis die lees werd maak.
Voeg 'n kort herhalingsinterval as versekering by, en wees duidelik oor hoe dit met 'n gebeurtenissneller saamwerk. 'n Herhaling van elke minuut vir vyf minute voorsien die tweede poging wanneer die internet saam met die tonnel teruggekom het, en onder Instellings, "As die taak reeds loop, geld die volgende reël", wil die taak Moenie 'n nuwe instansie begin nie, sodat 'n herhaling nie 'n kies wat nog aan die gang is, kan oorvleuel nie. Sonder daardie instelling kan twee rasdial-prosesse vir dieselfde poort jaag en die tweede een misluk sonder enige nuttige rede.
Bewys die herstelpad
Toets albei rigtings doelbewus. Ontkoppel met die hand en bevestig dat geen herkies plaasvind nie, skakel dan die netwerkadapter af en bevestig dat die taak vuur wanneer die skakel terugkom. Daardie twee toetse dek die onderdrukkingsreël en die werklike mislukkingsgeval, en niks anders nie.
Lees daarna die taakgeskiedenis eerder as die verbindingsikoon. Die geskiedenis teken aan wanneer die taak geloop het, watter rekening dit gebruik het en wat die aksie teruggegee het, en dit is die bewys wat nodig is wanneer dieselfde masjien volgende maand weer val.