rasdial báo «đã kết nối». Khi nào mạng thực sự sẵn sàng?
Mã thoát 0 nghĩa là lần quay số đã hoàn tất, không phải là thư mục chia sẻ trả lời. Hãy bắt lấy kết quả bản địa, rồi kiểm tra tài nguyên mà công việc phụ thuộc vào.
Một tập lệnh mở cửa sổ VPN rồi ngủ mười giây là đang đoán, và phép đoán đó sai theo cả hai hướng: nó bắt đầu sao chép trước khi đường hầm dùng được, hoặc chờ sau khi công việc lẽ ra đã có thể bắt đầu. Không kết quả nào trong hai kết quả đó cho biết quá trình xác thực đã xong chưa. Hãy dùng kết quả của chính lệnh, rồi hỏi dịch vụ một câu mà nó thực sự trả lời được. Thứ tự của hai bước đó chính là toàn bộ thiết kế.
Lệnh thực sự báo cáo điều gì
Với một hồ sơ Windows bản địa mà công cụ dòng lệnh đã cài hiểu được, rasdial.exe quay số một mục có tên và trả về mã thoát của tiến trình. Mã đó mô tả lần quay số: số không nghĩa là kết nối đã được thiết lập cho hồ sơ đó, còn giá trị khác không nghĩa là nó thất bại ở một giai đoạn mà mã chỉ ra. Hãy đọc nó như kết quả của một tầng, không phải của toàn bộ công việc.
Kết quả không nói gì về việc gán địa chỉ, DNS riêng, các tuyến được thêm hay quyền tới một máy chủ cụ thể. Tất cả những điều đó xảy ra sau khi quay số thành công, và bất kỳ điều nào trong số đó vẫn có thể sai. Chính khoảng trống đó là lý do biểu tượng đã kết nối và một lần sao chép thất bại thường cùng tồn tại.
Bắt lấy kết quả trước khi bất cứ thứ gì khác chạy
Hãy bắt đầu bằng việc xác nhận hồ sơ tồn tại cho tài khoản sẽ chạy công việc, không chỉ cho tài khoản bạn đang dùng để kiểm tra:
Get-VpnConnection -Name "Contoso-Office"
Get-VpnConnection -Name "Contoso-Office" -AllUserConnection
Sau đó quay số và đọc mã ngay lập tức. PowerShell giữ kết quả bản địa trong $LASTEXITCODE chỉ đến khi lệnh bên ngoài tiếp theo chạy, nên một ping lạc vào giữa lần quay số và lần kiểm tra sẽ phá hủy giá trị bạn định đọc. Hãy gán nó cho biến của riêng bạn trước, rồi quyết định làm gì.
& rasdial.exe "Contoso-Office"
$dial = $LASTEXITCODE
if ($dial -ne 0) { throw "rasdial failed with $dial" }
Ghi lại mã cùng với văn bản lỗi không bí mật, vì một mục bị thiếu, thông tin đăng nhập bị từ chối và hết thời gian cần những phản hồi khác nhau. Bảng ánh xạ các kết quả thường gặp sang hành động tiếp theo.
| 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 |
Sự sẵn sàng là tài nguyên, không phải đường hầm
Khi quay số thành công, hãy kiểm tra thứ mà công việc cần. Một thư mục chia sẻ, một điểm cuối API hay một cổng cơ sở dữ liệu là phép thử sẵn sàng tốt hơn một trang web công khai, vì trang công khai trả lời qua bất kỳ đường nào hoạt động và không chứng minh được gì về đường riêng. Hãy chọn phép thử mà chính ứng dụng phụ thuộc vào. Một kết nối TCP thành công cho biết định tuyến và lọc đang mở, và đó là phần lớn những gì lần ghi đầu tiên cần:
Test-NetConnection -ComputerName files.contoso.example -Port 445
Hãy giới hạn số lần thử và ghi lại giai đoạn nào đã thất bại. Thông tin đăng nhập bị từ chối nên dừng tập lệnh thay vì nuôi một vòng lặp thử lại; một tên DNS chưa xuất hiện đáng được vài lần thử lại ngắn; một cổng không bao giờ mở là vấn đề định tuyến hoặc chính sách ở phía trên máy khách.
Ở nơi kết nối đã tồn tại trước khi công việc bắt đầu, hãy để yên. Việc ngắt một phiên bạn không mở sẽ làm gián đoạn công việc khác của người dùng, nên hãy ghi lại phiên thuộc về ai và việc đóng nào là phù hợp.
Giới hạn hồ sơ cho tài khoản chạy công việc
Một tác vụ theo lịch chạy dưới danh tính và phiên của riêng nó, và một hồ sơ hoạt động trên máy tính để bàn của bạn có thể vô hình ở đó. Hãy chạy lại phép kiểm tra khả năng hiển thị và lần quay số dưới tài khoản của tác vụ trước khi tin vào lịch. Cũng hãy giữ mật khẩu tránh xa dòng lệnh: các đối số hiển thị với tiến trình khác và thường kết thúc trong nhật ký.
Nếu việc triển khai cần lời nhắc trên trình duyệt, một lần chạm thẻ thông minh hoặc phê duyệt MFA, thì tương tác đó là một phần của thiết kế và không thể tự động hóa bằng cách mô phỏng các lần gõ phím. Hãy dùng máy khách được hỗ trợ cho trường hợp đó và để bước con người diễn ra.
Hình dạng của tập lệnh cuối vẫn ngắn: kiểm tra hồ sơ, quay số, đọc mã, kiểm tra tài nguyên, rồi bắt đầu công việc. Mỗi bước trả lời một câu hỏi mà bước trước không thể, và không bước nào dựa vào một giấc ngủ.