rasdial menyebut «bersambung». Bilakah rangkaian benar-benar sedia?
Kod keluar 0 bermaksud dail selesai, bukan bahawa perkongsian fail menjawab. Tangkap hasil asli itu, kemudian uji sumber yang menjadi kebergantungan kerja.
Skrip yang membuka tetingkap VPN dan kemudian tidur selama sepuluh saat sedang meneka, dan tekaan itu salah pada kedua-dua arah: ia memulakan salinan sebelum terowong boleh digunakan, atau ia menunggu selepas kerja sepatutnya sudah boleh bermula. Kedua-dua hasil itu tidak memberitahu sama ada pengesahan sudah selesai. Gunakan hasil arahan itu sendiri, kemudian tanya perkhidmatan satu soalan yang benar-benar boleh dijawabnya. Urutan kedua-dua langkah itulah keseluruhan reka bentuknya.
Apa yang sebenarnya dilaporkan oleh arahan itu
Bagi profil Windows asli yang difahami oleh alat baris arahan yang dipasang, rasdial.exe mendail satu entri bernama dan memulangkan kod keluar proses. Kod itu menerangkan percubaan dail: sifar bermaksud sambungan telah diwujudkan untuk profil itu, dan bukan sifar bermaksud ia gagal pada peringkat yang dikenal pasti oleh kod itu. Bacalah ia sebagai hasil satu lapisan, bukan hasil keseluruhan kerja.
Hasil itu tidak mengatakan apa-apa tentang pemberian alamat, DNS peribadi, laluan yang ditambah atau kebenaran untuk mencapai pelayan tertentu. Semua itu berlaku selepas dail berjaya, dan mana-mana daripadanya masih boleh salah. Jurang itulah sebabnya ikon bersambung dan salinan yang gagal sering wujud bersama.
Tangkap hasilnya sebelum apa-apa lagi berjalan
Mulakan dengan mengesahkan bahawa profil itu wujud untuk akaun yang akan menjalankan kerja, bukan hanya untuk akaun yang anda gunakan untuk menguji:
Get-VpnConnection -Name "Contoso-Office"
Get-VpnConnection -Name "Contoso-Office" -AllUserConnection
Kemudian dail dan baca kod itu dengan segera. PowerShell menyimpan hasil asli dalam $LASTEXITCODE hanya sehingga arahan luaran seterusnya berjalan, jadi ping yang tersasar antara dail dan pemeriksaan memusnahkan nilai yang anda mahu baca. Berikan ia kepada pemboleh ubah anda sendiri dahulu, kemudian tentukan apa yang perlu dilakukan.
& rasdial.exe "Contoso-Office"
$dial = $LASTEXITCODE
if ($dial -ne 0) { throw "rasdial failed with $dial" }
Log kod itu bersama teks ralat yang bukan rahsia, kerana entri yang hilang, kelayakan yang ditolak dan tamat masa memerlukan tindak balas yang berbeza. Jadual memetakan hasil biasa kepada tindakan seterusnya.
| 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 |
Kesediaan ialah sumber, bukan terowong
Sebaik sahaja dail berjaya, uji perkara yang diperlukan oleh kerja itu. Kongsi fail, titik akhir API atau port pangkalan data ialah kuar kesediaan yang lebih baik daripada laman web awam, kerana laman awam menjawab melalui mana-mana laluan yang berfungsi dan tidak membuktikan apa-apa tentang laluan peribadi. Pilih kuar yang menjadi kebergantungan aplikasi itu sendiri. Sambungan TCP yang berjaya memberitahu anda penghalaan dan penapisan terbuka, dan itulah sebahagian besar daripada apa yang diperlukan oleh tulisan pertama:
Test-NetConnection -ComputerName files.contoso.example -Port 445
Hadkan percubaan dan rekod peringkat mana yang gagal. Kelayakan yang ditolak sepatutnya menghentikan skrip dan bukannya menyuap gelung cuba semula; nama DNS yang belum muncul wajar mendapat beberapa cubaan semula yang singkat; port yang tidak pernah terbuka ialah masalah penghalaan atau dasar di atas klien.
Jika sambungan itu sudah wujud sebelum kerja bermula, biarkan ia. Memutuskan sesi yang anda tidak buka mengganggu kerja lain pengguna, jadi rekod siapa pemilik sesi itu dan penamatan apa yang sesuai.
Hadkan profil kepada akaun yang menjalankan kerja
Tugasan berjadual berjalan di bawah identiti dan sesinya sendiri, dan profil yang berfungsi pada desktop anda mungkin tidak kelihatan di sana. Jalankan semula pemeriksaan keterlihatan dan dail di bawah akaun tugasan itu sebelum mempercayai jadual. Jauhkan kata laluan daripada baris arahan juga: argumen kelihatan kepada proses lain dan sering berakhir dalam log.
Jika penggunaan memerlukan gesaan pelayar, ketukan kad pintar atau kelulusan MFA, interaksi itu ialah sebahagian daripada reka bentuk dan tidak boleh diautomasikan dengan mensimulasikan ketukan kekunci. Gunakan klien yang disokong untuk kes itu dan biarkan langkah manusia berlaku.
Bentuk skrip akhir kekal pendek: semak profil, dail, baca kod, uji sumber, kemudian mulakan kerja. Setiap langkah menjawab soalan yang tidak dapat dijawab oleh langkah sebelumnya, dan tiada satu pun bergantung pada tidur.