Скрипта која отвори прозор 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, та интеракција је део дизајна и не може се аутоматизовати симулирањем притискања тастера. За такав случај употребите подржани клијент и пустите да се људски корак догоди.

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

Повезани чланци