VPN penceresini açıp sonra on saniye uyuyan bir betik tahmin ediyordur ve bu tahmin iki yönde de yanlıştır: ya tünel kullanılabilir olmadan kopyalamayı başlatır ya da iş başlayabilecekken bekler. Bu sonuçların hiçbiri kimlik doğrulamanın bitip bitmediğini söylemez. Komutun kendi sonucunu kullanın, sonra hizmete gerçekten yanıtlayabileceği bir soru sorun. Bu iki adımın sırası tasarımın tamamıdır.

Komut aslında ne bildiriyor

Kurulu komut satırı aracının anladığı yerel bir Windows profili için rasdial.exe adlandırılmış bir girdiyi çevirir ve sürecin çıkış kodunu döndürür. Bu kod çevirme girişimini tanımlar: sıfır, o profil için bağlantının kurulduğu anlamına gelir; sıfır olmayan değer ise kodun belirlediği bir aşamada başarısız olduğu anlamına gelir. Onu bir katmanın sonucu olarak okuyun, işin tamamının değil.

Sonuç adres ataması, özel DNS, eklenen rotalar veya belirli bir sunucuya ulaşma izni hakkında hiçbir şey söylemez. Bunların hepsi başarılı bir çevirmeden sonra olur ve her biri hâlâ yanlış olabilir. Bu boşluk yüzünden bağlı bir simge ile başarısız bir kopyalama bu kadar sık bir arada bulunur.

Başka bir şey çalışmadan sonucu yakalayın

İşi çalıştıracak hesap için profilin var olduğunu doğrulayarak başlayın, yalnızca test ettiğiniz hesap için değil:

Get-VpnConnection -Name "Contoso-Office"
Get-VpnConnection -Name "Contoso-Office" -AllUserConnection

Sonra çevirin ve kodu hemen okuyun. PowerShell yerel sonucu $LASTEXITCODE içinde yalnızca bir sonraki dış komut çalışana kadar tutar, bu yüzden çevirme ile denetim arasında başıboş bir ping okumak istediğiniz değeri yok eder. Önce onu kendi değişkeninize atayın, sonra ne yapacağınıza karar verin.

& rasdial.exe "Contoso-Office"
$dial = $LASTEXITCODE
if ($dial -ne 0) { throw "rasdial failed with $dial" }

Kodu gizli olmayan hata metniyle birlikte günlüğe yazın, çünkü eksik bir girdi, reddedilen kimlik bilgileri ve zaman aşımı farklı yanıtlar gerektirir. Tablo, yaygın sonuçları bir sonraki eylemle eşler.

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

Hazır olma durumu kaynaktır, tünel değildir

Çevirme başarılı olduğunda, işin ihtiyaç duyduğu şeyi test edin. Paylaşılan bir klasör, bir API uç noktası veya bir veritabanı bağlantı noktası, genel bir web sitesinden daha iyi bir hazır olma testidir, çünkü genel bir site çalışan herhangi bir yoldan yanıt verir ve özel yol hakkında hiçbir şey kanıtlamaz. Uygulamanın kendisinin bağlı olduğu testi seçin. Başarılı bir TCP bağlantısı yönlendirme ve filtrelemenin açık olduğunu söyler ve ilk yazmanın ihtiyaç duyduğu şeyin çoğu budur:

Test-NetConnection -ComputerName files.contoso.example -Port 445

Denemeleri sınırlayın ve hangi aşamanın başarısız olduğunu kaydedin. Reddedilen kimlik bilgileri betiği durdurmalı, bir yeniden deneme döngüsünü beslememelidir; henüz görünmeyen bir DNS adı birkaç kısa yeniden denemeyi hak eder; hiç açılmayan bir bağlantı noktası istemcinin üstünde bir yönlendirme veya ilke sorunudur.

Bağlantı iş başlamadan önce zaten var idiyse, ona dokunmayın. Açmadığınız bir oturumun bağlantısını kesmek kullanıcının diğer işini kesintiye uğratır, bu yüzden oturumun kime ait olduğunu ve hangi kapatmanın uygun olduğunu kaydedin.

Profili işi çalıştıran hesapla sınırlayın

Zamanlanmış bir görev kendi kimliği ve oturumu altında çalışır ve masaüstünüzde çalışan bir profil orada görünmez olabilir. Zamanlamaya güvenmeden önce görünürlük denetimini ve çevirmeyi görevin hesabı altında yeniden çalıştırın. Parolayı komut satırından uzak tutun: bağımsız değişkenler diğer süreçler tarafından görülür ve çoğu zaman günlüklere düşer.

Dağıtım bir tarayıcı istemi, akıllı kart dokunuşu veya MFA onayı gerektiriyorsa, bu etkileşim tasarımın bir parçasıdır ve tuş vuruşlarını taklit ederek otomatikleştirilemez. O durum için desteklenen istemciyi kullanın ve insan adımının gerçekleşmesine izin verin.

Son betiğin biçimi kısa kalır: profili denetleyin, çevirin, kodu okuyun, kaynağı test edin, sonra işe başlayın. Her adım bir öncekinin yanıtlayamadığı bir soruyu yanıtlar ve hiçbiri bir uykuya dayanmaz.

İlgili makaleler