rasdial hlásí připojeno. Kdy je síť skutečně připravená?
Návratový kód 0 znamená, že vytáčení skončilo, ne že sdílený prostředek odpovídá. Zachyťte nativní výsledek a potom otestujte prostředek, na kterém úloha závisí.
Skript, který otevře okno VPN a pak deset sekund spí, hádá, a hádá špatně v obou směrech: začíná kopírovat dřív, než je tunel použitelný, nebo čeká, i když práce už mohla začít. Ani jeden výsledek neříká, zda ověření skončilo. Použijte vlastní výsledek příkazu a potom službě položte otázku, na kterou skutečně umí odpovědět. Pořadí těchto dvou kroků je celý návrh.
Co příkaz skutečně hlásí
U nativního profilu Windows, kterému instalovaný nástroj příkazového řádku rozumí, rasdial.exe vytočí pojmenovanou položku a vrátí návratový kód procesu. Tento kód popisuje pokus o vytáčení: nula znamená, že spojení bylo pro daný profil navázáno, a nenulová hodnota, že selhalo v fázi, kterou kód určuje. Čtěte ho jako výsledek jedné vrstvy, ne celé úlohy.
Výsledek neříká nic o přidělení adresy, privátním DNS, přidaných trasách ani o oprávnění dosáhnout konkrétního serveru. To vše se děje po úspěšném vytáčení a kterékoli z toho může být stále špatně. Právě tato mezera je důvod, proč se ikona připojení a neúspěšné kopírování tak často objevují společně.
Zachyťte výsledek, než se spustí cokoli dalšího
Začněte tím, že ověříte, zda profil existuje pro účet, který bude úlohu spouštět, ne jen pro účet, se kterým testujete:
Get-VpnConnection -Name "Contoso-Office"
Get-VpnConnection -Name "Contoso-Office" -AllUserConnection
Pak vytočte a hned přečtěte kód. PowerShell drží nativní výsledek v $LASTEXITCODE jen do spuštění dalšího externího příkazu, takže náhodný ping mezi vytáčením a kontrolou zničí hodnotu, kterou jste chtěli přečíst. Nejprve ji přiřaďte vlastní proměnné a teprve pak rozhodněte, co dělat.
& rasdial.exe "Contoso-Office"
$dial = $LASTEXITCODE
if ($dial -ne 0) { throw "rasdial failed with $dial" }
Zaznamenejte kód spolu s neutajovaným textem chyby, protože chybějící položka, odmítnuté přihlašovací údaje a vypršení času vyžadují různé reakce. Tabulka přiřazuje běžné výsledky k dalšímu kroku.
| 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 |
Připravenost je prostředek, ne tunel
Po úspěšném vytáčení otestujte to, co úloha potřebuje. Sdílená složka, koncový bod API nebo port databáze je lepší zkouška připravenosti než veřejný web, protože veřejný web odpovídá přes jakoukoli funkční cestu a o privátní nic nedokazuje. Zvolte zkoušku, na které závisí sama aplikace. Úspěšné TCP spojení říká, že směrování a filtrování jsou otevřené, a to je většina toho, co první zápis potřebuje:
Test-NetConnection -ComputerName files.contoso.example -Port 445
Omezte počet pokusů a zaznamenejte, která fáze selhala. Odmítnuté přihlašovací údaje mají skript zastavit, ne krmit smyčku opakování; jméno DNS, které se ještě neobjevilo, si zaslouží několik krátkých opakování; port, který se nikdy neotevře, je problém směrování nebo politiky nad klientem.
Pokud spojení existovalo už před začátkem úlohy, nechte ho být. Odpojení relace, kterou jste neotevřeli, přerušuje jinou práci uživatele, proto zaznamenejte, komu relace patří a jaké ukončení je vhodné.
Omezte profil na účet, který úlohu spouští
Naplánovaná úloha běží pod vlastní identitou a relací a profil, který funguje na vaší ploše, tam může být neviditelný. Před důvěrou v plán zopakujte kontrolu viditelnosti a vytáčení pod účtem úlohy. Držte heslo mimo příkazový řádek: argumenty jsou viditelné pro jiné procesy a často končí v protokolech.
Pokud nasazení vyžaduje výzvu v prohlížeči, dotyk čipové karty nebo schválení MFA, je tato interakce součástí návrhu a nelze ji automatizovat simulováním stisků kláves. Pro takový případ použijte podporovaného klienta a nechte lidský krok proběhnout.
Tvar výsledného skriptu zůstává krátký: zkontrolujte profil, vytočte, přečtěte kód, otestujte prostředek a pak začněte pracovat. Každý krok odpovídá na otázku, na kterou předchozí nemohl, a žádný z nich se nespoléhá na spánek.