Скрипта што го отвора прозорецот на VPN и потоа спие десет секунди само претпоставува, а претпоставката е погрешна во двете насоки: или ја започнува копијата пред тунелот да биде употреблив, или чека откако работата веќе можеше да почне. Ниту еден од двата исхода не ви кажува дали завршила автентикацијата. Користете го резултатот што го дава самата команда, а потоа поставете му на сервисот прашање на кое навистина може да одговори. Редоследот на тие два чекори е целиот дизајн.

Што всушност пријавува командата

За нативен профил на Windows што го разбира инсталираната алатка за командна линија, rasdial.exe бира именуван запис и враќа излезен код на процесот. Тој код го опишува обидот за бирање: нула значи дека врската е воспоставена за тој профил, а не-нула значи дека не успеала во фаза што кодот ја идентификува. Читајте го како резултат на еден слој, а не на целата работа.

Резултатот не кажува ништо за доделувањето адреса, приватниот DNS, додадените маршрути или дозволата да се стигне до одреден сервер. Сето тоа се случува по успешното бирање, и било што од тоа сѐ уште може да биде погрешно. Токму поради таа празнина иконата за поврзаност и неуспешното копирање толку често постојат заедно.

Фатете го резултатот пред да се изврши нешто друго

Започнете со потврда дека профилот постои за сметката што ќе ја извршува работата, а не само за сметката со која тестирате:

Get-VpnConnection -Name "Contoso-Office"
Get-VpnConnection -Name "Contoso-Office" -AllUserConnection

Потоа бирајте и прочитајте го кодот веднаш. PowerShell го чува нативниот резултат во $LASTEXITCODE само до извршувањето на следната надворешна команда, па случаен ping помеѓу бирањето и проверката ја уништува вредноста што сте сакале да ја прочитате. Најпрво доделете ја на сопствена променлива, а потоа одлучете што да правите.

& rasdial.exe "Contoso-Office"
$dial = $LASTEXITCODE
if ($dial -ne 0) { throw "rasdial failed with $dial" }

Запишете го кодот заедно со текстот на грешката што не е тајна, бидејќи недостасувачкиот запис, одбиените акредитиви и истекот на времето бараат различен одговор. Табелата ги поврзува вообичаените резултати со следниот чекор.

ResultWhat it indicatesNext step
0The dial completedProbe the resource, do not start writing yet
691The credential or authentication method was rejectedFix the account or method, do not retry in a loop
623The named entry was not foundFix the profile name or its scope
Other non-zeroTransport, timeout or adapter failureRead the message, then check the path

Подготвеноста е ресурсот, а не тунелот

Откако бирањето ќе успее, тестирајте го она што му е потребно на работниот процес. Споделен ресурс, крајна точка на API или порта на база на податоци е подобра проверка на подготвеноста од јавен веб-сајт, бидејќи јавниот сајт одговара низ кој било работен пат и не докажува ништо за приватниот. Изберете ја проверката од која зависи самата апликација. Успешното TCP поврзување ви кажува дека маршрутирањето и филтрирањето се отворени, што е најголемиот дел од она што му е потребно на првото запишување:

Test-NetConnection -ComputerName files.contoso.example -Port 445

Ограничете ги обидите и забележете која фаза не успеала. Одбиените акредитиви треба да ја запрат скриптата наместо да го хранат циклусот за повторување; DNS име што сѐ уште не се појавило заслужува неколку кратки повторувања; порта што никогаш не се отвора е проблем со маршрутирањето или политиката над клиентот.

Каде врската веќе постоела пред да почне работата, оставете ја на мира. Исклучувањето сесија што не сте ја отвориле ја прекинува другата работа на корисникот, затоа запишете чија е сесијата и кое затворање е соодветно.

Ограничете го профилот на сметката што ја извршува работата

Закажаната задача работи под сопствен идентитет и сесија, а профил што работи на вашата работна површина може таму да биде невидлив. Повторно извршете ја проверката на видливоста и бирањето под сметката на задачата пред да му верувате на распоредот. Држете ја лозинката подалеку од командната линија: аргументите се видливи за другите процеси и често завршуваат во дневниците.

Ако распоредувањето бара потврда во прелистувач, допир со смарт-картичка или одобрување преку MFA, таа интеракција е дел од дизајнот и не може да се автоматизира со симулирање на притискање копчиња. За таков случај користете го поддржаниот клиент и дозволете чекорот со човекот да се случи.

Конечната скрипта останува кратка: проверете го профилот, бирајте, прочитајте го кодот, проверете го ресурсот, потоа започнете ја работата. Секој чекор одговара на прашање на кое претходниот не можел, и ниту еден од нив не зависи од пауза.

Поврзани статии