rasdial sê verbind. Wanneer is die netwerk werklik gereed?
Uittreekode 0 beteken die skakel is voltooi, nie dat die lêerdeling antwoord nie. Teken die oorspronklike resultaat vas en toets dan die hulpbron waarvan die taak afhang.
’n Skrip wat die VPN-venster oopmaak en dan tien sekondes lank slaap, raai, en die raaiskoot is in albei rigtings verkeerd: dit begin die kopieer voordat die tonnel bruikbaar is, of dit wag nadat die werk al kon begin het. Nie een van die uitkomste sê of verifikasie klaar is nie. Gebruik die opdrag se eie resultaat en vra dan die diens ’n vraag wat hy werklik kan antwoord. Die volgorde van daardie twee stappe is die hele ontwerp.
Wat die opdrag werklik rapporteer
Vir ’n oorspronklike Windows-profiel wat die geïnstalleerde opdragreëlprogram verstaan, skakel rasdial.exe ’n benoemde inskrywing en gee ’n prosesuittreekode terug. Daardie kode beskryf die skakelpoging: nul beteken die verbinding is vir daardie profiel gevestig, en nie-nul beteken dit het by ’n stadium misluk wat die kode aandui. Lees dit as die resultaat van een laag, nie van die taak nie.
Die resultaat sê niks oor adrestoewysing, private DNS, bygevoegde roetes of die toestemming om ’n bepaalde bediener te bereik nie. Al daardie dinge gebeur ná ’n suksesvolle skakel, en enige een daarvan kan steeds verkeerd wees. Daardie gaping is waarom ’n verbinde-ikoon en ’n mislukte kopie so dikwels saam voorkom.
Teken die resultaat vas voordat enigiets anders loop
Begin deur te bevestig dat die profiel bestaan vir die rekening wat die taak sal uitvoer, nie net vir die rekening waarmee jy toets nie:
Get-VpnConnection -Name "Contoso-Office"
Get-VpnConnection -Name "Contoso-Office" -AllUserConnection
Skakel dan en lees die kode dadelik. PowerShell hou die oorspronklike resultaat in $LASTEXITCODE net tot die volgende eksterne opdrag loop, so ’n verdwaalde ping tussen die skakel en die kontrole vernietig die waarde wat jy wou lees. Ken dit eers aan jou eie veranderlike toe en besluit dan wat om te doen.
& rasdial.exe "Contoso-Office"
$dial = $LASTEXITCODE
if ($dial -ne 0) { throw "rasdial failed with $dial" }
Teken die kode saam met die nie-geheime foutteks aan, want ’n ontbrekende inskrywing, ’n verwerpte geloofsbrief en ’n tydsverloop verg verskillende reaksies. Die tabel koppel die algemene resultate aan die volgende stap.
| Result | What it indicates | Next step |
|---|---|---|
| 0 | The dial completed | Probe the resource, do not start writing yet |
| 691 | The credential or authentication method was rejected | Fix the account or method, do not retry in a loop |
| 623 | The named entry was not found | Fix the profile name or its scope |
| Other non-zero | Transport, timeout or adapter failure | Read the message, then check the path |
Gereedheid is die hulpbron, nie die tonnel nie
Toets die ding wat die taak nodig het sodra die skakel slaag. ’n Deling, ’n API-eindpunt of ’n databasispoort is ’n beter gereedheidstoets as ’n openbare webwerf, want ’n openbare werf antwoord deur enige werkende pad en bewys niks oor die private een nie. Kies die toets waarvan die toepassing self afhang. ’n Suksesvolle TCP-verbinding sê vir jou roetering en filtering is oop, wat die meeste is van wat die eerste skryf nodig het:
Test-NetConnection -ComputerName files.contoso.example -Port 445
Beperk die pogings en teken aan watter stadium misluk het. ’n Verwerpte geloofsbrief moet die skrip stop eerder as om ’n herprobeer-lus te voed; ’n DNS-naam wat nog nie verskyn het nie, verdien ’n paar kort herprobeers; ’n poort wat nooit oopgaan nie, is ’n roetering- of beleidsprobleem bo die kliënt.
Waar die verbinding al voor die taak bestaan het, los dit alleen. Om ’n sessie te ontkoppel wat jy nie oopgemaak het nie, onderbreek die gebruiker se ander werk, so teken aan wie die sessie besit en watter afbreek gepas is.
Beperk die profiel tot die rekening wat die taak loop
’n Geskeduleerde taak loop onder sy eie identiteit en sessie, en ’n profiel wat op jou lessenaar werk, kan daar onsigbaar wees. Herhaal die sigbaarheidskontrole en die skakel onder die taak se rekening voordat jy die skedule vertrou. Hou ook die wagwoord van die opdragreël af: argumente is sigbaar vir ander prosesse en beland dikwels in logs.
As die ontplooiing ’n blaaierprompt, ’n slimkaart-tik of ’n MFA-goedkeuring vereis, is daardie interaksie deel van die ontwerp en kan dit nie deur sleutelstrepe na te boots weggeautomatiseer word nie. Gebruik die ondersteunde kliënt vir daardie geval en laat die menslike stap gebeur.
Die vorm van die finale skrip bly kort: kontroleer die profiel, skakel, lees die kode, toets die hulpbron en begin dan die werk. Elke stap antwoord ’n vraag wat die vorige een nie kon nie, en nie een van hulle maak op ’n slaap staat nie.