rasdial menyebut terhubung. Kapan jaringan benar-benar siap?
Kode keluar 0 berarti panggilan selesai, bukan berarti berbagi file menjawab. Catat hasil aslinya, lalu uji sumber daya yang menjadi sandaran pekerjaan.
Skrip yang membuka jendela VPN lalu tidur sepuluh detik sedang menebak, dan tebakan itu salah di kedua arah: ia memulai penyalinan sebelum terowongan bisa dipakai, atau menunggu setelah pekerjaan seharusnya sudah bisa dimulai. Tidak ada satu pun hasil yang memberi tahu apakah autentikasi selesai. Gunakan hasil dari perintah itu sendiri, lalu ajukan pertanyaan kepada layanan yang benar-benar bisa dijawabnya. Urutan kedua langkah itulah seluruh rancangannya.
Apa yang sebenarnya dilaporkan perintah itu
Untuk profil Windows asli yang dipahami alat baris perintah terpasang, rasdial.exe memanggil entri bernama dan mengembalikan kode keluar proses. Kode itu menjelaskan percobaan panggilan: nol berarti koneksi terbentuk untuk profil itu, dan bukan nol berarti gagal pada tahap yang ditunjukkan kode. Bacalah sebagai hasil satu lapisan, bukan hasil pekerjaan.
Hasilnya tidak mengatakan apa pun tentang pemberian alamat, DNS privat, rute yang ditambahkan atau izin menjangkau server tertentu. Semua itu terjadi setelah panggilan berhasil, dan salah satunya masih bisa keliru. Celah itulah sebabnya ikon terhubung dan penyalinan yang gagal begitu sering muncul bersamaan.
Catat hasilnya sebelum apa pun yang lain berjalan
Mulailah dengan memastikan profil itu ada untuk akun yang akan menjalankan pekerjaan, bukan hanya untuk akun yang Anda pakai menguji:
Get-VpnConnection -Name "Contoso-Office"
Get-VpnConnection -Name "Contoso-Office" -AllUserConnection
Lalu panggil dan baca kodenya segera. PowerShell menyimpan hasil asli di $LASTEXITCODE hanya sampai perintah eksternal berikutnya berjalan, jadi ping yang nyasar di antara panggilan dan pemeriksaan menghancurkan nilai yang ingin Anda baca. Tetapkan dulu ke variabel Anda sendiri, baru putuskan apa yang harus dilakukan.
& rasdial.exe "Contoso-Office"
$dial = $LASTEXITCODE
if ($dial -ne 0) { throw "rasdial failed with $dial" }
Catat kode itu bersama teks kesalahan yang bukan rahasia, karena entri yang hilang, kredensial ditolak dan batas waktu membutuhkan tanggapan berbeda. Tabel memetakan hasil umum ke langkah berikutnya.
| 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 |
Kesiapan adalah sumber daya, bukan terowongan
Setelah panggilan berhasil, ujilah hal yang dibutuhkan pekerjaan. Berbagi file, titik akhir API atau port basis data adalah uji kesiapan yang lebih baik daripada situs web publik, karena situs publik menjawab lewat jalur mana pun yang berfungsi dan tidak membuktikan apa pun tentang jalur privat. Pilih uji yang menjadi sandaran aplikasi itu sendiri. Koneksi TCP yang berhasil memberi tahu bahwa perutean dan penyaringan terbuka, dan itulah sebagian besar yang dibutuhkan penulisan pertama:
Test-NetConnection -ComputerName files.contoso.example -Port 445
Batasi percobaan dan catat tahap mana yang gagal. Kredensial yang ditolak harus menghentikan skrip, bukan memberi makan loop percobaan ulang; nama DNS yang belum muncul layak mendapat beberapa percobaan ulang singkat; port yang tidak pernah terbuka adalah masalah perutean atau kebijakan di atas klien.
Jika koneksi sudah ada sebelum pekerjaan dimulai, biarkan saja. Memutus sesi yang tidak Anda buka mengganggu pekerjaan lain pengguna, jadi catat siapa pemilik sesi dan pembongkaran seperti apa yang pantas.
Batasi profil pada akun yang menjalankan pekerjaan
Tugas terjadwal berjalan dengan identitas dan sesinya sendiri, dan profil yang berfungsi di desktop Anda bisa tidak terlihat di sana. Ulangi pemeriksaan visibilitas dan panggilan di bawah akun tugas sebelum memercayai jadwalnya. Jauhkan juga kata sandi dari baris perintah: argumen terlihat oleh proses lain dan sering berakhir di log.
Jika penerapan memerlukan prompt peramban, ketukan kartu pintar atau persetujuan MFA, interaksi itu adalah bagian dari rancangan dan tidak dapat diotomatiskan dengan meniru ketukan tombol. Gunakan klien yang didukung untuk kasus itu dan biarkan langkah manusia terjadi.
Bentuk skrip akhirnya tetap singkat: periksa profil, panggil, baca kode, uji sumber daya, lalu mulai pekerjaan. Setiap langkah menjawab pertanyaan yang tidak bisa dijawab langkah sebelumnya, dan tidak ada yang bergantung pada tidur.