Hald ein Windows-VPN oppe: utløys rasdial på fråkoplingshendinga
RasClient 20226 og 20227 markerer eit brot; 631 tyder at eit menneske gjorde det. Utløys rasdial på dei to fyrste, ta vare på éin påloggingsdata, og les avsluttingskoden.
Windows tilbyr ingen gjenoppringingspolitikk for VPN-klienten sin, så ei tilkopling som fell ved midnatt er framleis nede til frukost. Ei planlagd oppgåve som overvakar brotet og køyrer rasdial, lukkar dette holet utan ein tredjepartsklient. Om oppgåva oppfører seg som ein operatør eller som ei løkke, kjem an på tre detaljar: kva hendingar ho matchar, kva påloggingsdata ho kan sjå, og kva ho gjer med resultatet. Ingen av dei tre er vanskelege, og det å mangla ein av dei er det som lagar ei oppgåve som ringjer for alltid.
Kvifor ein timer er feil utløysar
Ein timer ringjer etter sin eigen plan, uansett om tunnelen er nede. Det gir forsøk ingen trong, og eit forsøk midt i ei arbeidsøkt kan avbryte ho. Ein hendingsutløysar fyrer berre når tilkoplinga skiftar tilstand, noko som er billegare og lettare å resonnere om. Hendinga ber òg årsaka, og årsaka er det som skil ein nettverksfeil frå ein person som koplar frå med vilje.
Den skilnaden er skilnaden mellom ei nyttig oppgåve og ei som slåst med brukaren kvar kveld. Det er òg den delen som vanlegvis manglar i oppskrifter som berre skildrar handlinga.
Hendingsparet, og den som skal undertrykkjast
Remote Access Service-klienten skriv livssykluspostar til Application-loggen under leverandøren RasClient. 20226 markerer ei tilkopling som tok slutt, og 20227 markerer eit forsøk som mislukkast, så begge kan rettferdiggjere ei ny oppringing. Alt anna i oppgåva kjem an på å matche dei to identifikatorane nøyaktig. Dei har vore stabile i årevis, og difor sirkulerer oppskrifter bygde på dei framleis, men eit byggjesett som gjev leverandøren eller ID-ane nye namn gjer at spørjinga ikkje returnerer noko. Køyr bevissteget på nytt etter kvar funksjonsoppdatering i staden for å vente på at oppgåva skal slutte å fyre.
Éi avslutting må utelukkast. Feil 631 tyder at brukaren kopla frå porten, og ei ny oppringing i det augneblinken slåst med personen som nettopp bytte nettverk med vilje. Legg utelukkinga i filteret til utløysaren i staden for i skriptet, slik at oppgåva ikkje startar i det heile. Ho må berre gjelde éin hendings-ID, fordi eit EventData-predikat berre matchar når det namngjevne elementet finst, og ein delt klausul ville stille droppe kvar hending med den andre ID-en. Les elementnamnet ut av ein ekte post før du skriv filteret:
Get-WinEvent -LogName Application -MaxEvents 5 -FilterXPath "*[System[Provider[@Name='RasClient'] and EventID=20226]]" | Select-Object -First 1 -ExpandProperty ToXml
XML-en viser dei nøyaktige Data-namna i den posten. ErrorCode er den vanlege stavemåten, og ein post som brukar noko anna krev at namnet vert erstatta i filteret nedanfor.
<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>
Lim det inn i det eigendefinerte filteret til utløysaren, og prov det som ei spørjing før det vert ein utløysar. Den same XPath-en køyrer frå PowerShell mot den levande loggen, noko som er den billege måten å sjå kva han matchar medan oppgåvehistorikken enno ikkje er involvert.
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
Ein utløysar som stille ikkje matchar noko, ser nøyaktig ut som ei oppgåve som køyrer og feilar. Begge framstår som "automatiseringa verkar ikkje", og ingen av dei seier kva halvdel som manglar. Sjekk utdataa frå spørjinga fyrst, fordi det skil dei to tilfella i eitt steg.
Oppringinga feilar fordi ingen er der til å skrive passordet
Handlinga køyrer rasdial med namnet på tilkoplinga. Når profilen ikkje har nokon bufra påloggingsdata, feilar oppringinga med ein gong fordi ingen er der til å svare på førespurnaden. Det er den vanlegaste grunnen til at ei rett utløyst oppgåve ikkje gjer noko synleg, så sjekk det før du rører utløysaren. Manuell oppringing frå ei ledetekst skil eit påloggingsproblem frå eit planleggingsproblem.
Lagre påloggingsdataa éin gong under kontoen oppgåva skal køyre som, og gjer den kontoen til ein del av designet. Ei oppgåve som køyrer som SYSTEM kan ikkje lese påloggingsdata som er bufra av den interaktive kontoen din, og ei oppgåve som køyrer som nokon andre kan heller ikkje. Namnet må òg stemme nøyaktig med profilen, inkludert eventuelt domeneprefiks i brukarfeltet.
rasdial
rasdial "Office VPN"
(Start-Process rasdial -ArgumentList '"Office VPN"' -Wait -PassThru -NoNewWindow).ExitCode
Den fyrste kommandoen listar namna Windows kjenner. Den andre ringjer ved namn med dei bufra påloggingsdataa, og den tredje er forma ei PowerShell-handling bør bruke, fordi ho ventar og returnerer ein verdi oppgåva kan registrere.
Les avsluttingskoden i staden for vindauget
Ei oppgåve som startar ein prosess utan å vente, rapporterer suksess så snart prosessen finst. For ei oppringing som kan feile eit sekund seinare, er den dommen verdilaus. Å vente på avsluttingskoden gjer handlinga til eit ekte resultat. Oppgåvehistorikken åleine viser berre at ein prosess starta, aldri at ein tunnel kom opp.
Logg verdien med tidsstempel ved kvar køyring. Éin einskild feil etter eit avbrot er normalt, medan tre feil på rad med same kode peikar på påloggingsdataa eller profilen og ikkje på nettverket. Det mønsteret er det som gjer historikken verdt å lese.
Legg til eit kort gjentakingsintervall som forsikring, og ver tydeleg på korleis det samspelar med ein hendingsutløysar. Ei gjentaking kvart minutt i fem minutt gir det andre forsøket når internett kom tilbake saman med tunnelen, og under Innstillingar, "Viss oppgåva alt køyrer, gjeld følgjande regel", vil oppgåva ha "Ikkje start ein ny førekomst" slik at ei gjentaking ikkje overlappar ei oppringing som framleis pågår. Utan den innstillinga kan to rasdial-prosessar kjempe om same port, og den andre feilar utan nokon nyttig grunn.
Prov gjenopprettingsvegen
Test begge retningar med vilje. Kople frå manuelt og stadfest at inga ny oppringing skjer, deaktiver deretter nettverksadapteren og stadfest at oppgåva fyrer når lenka kjem tilbake. Dei to testane dekkjer undertrykkingsregelen og det ekte feiltilfellet, og ingenting anna gjer det.
Les oppgåvehistorikken etterpå i staden for tilkoplingsikonet. Historikken registrerer når oppgåva køyrde, kva konto ho brukte og kva handlinga returnerte, og det er beviset som trengst når same maskina fell igjen neste månad.