rasdial annonce connecté. Quand le réseau est-il vraiment prêt ?
Un code de sortie 0 signifie que la numérotation est terminée, pas que le partage de fichiers répond. Capturez le résultat natif, puis sondez la ressource dont dépend la tâche.
Un script qui ouvre la fenêtre du VPN puis dort dix secondes devine, et la supposition est fausse dans les deux sens : il commence la copie avant que le tunnel soit utilisable, ou il attend alors que le travail aurait déjà pu commencer. Aucun des deux résultats ne dit si l’authentification est terminée. Utilisez le résultat propre de la commande, puis posez au service une question à laquelle il peut réellement répondre. L’ordre de ces deux étapes constitue tout le design.
Ce que la commande rapporte réellement
Pour un profil Windows natif que l’outil en ligne de commande installé comprend, rasdial.exe compose une entrée nommée et renvoie un code de sortie du processus. Ce code décrit la tentative de numérotation : zéro signifie que la connexion a été établie pour ce profil, et une valeur non nulle qu’elle a échoué à une étape que le code identifie. Lisez-le comme le résultat d’une couche, pas de la tâche.
Le résultat ne dit rien sur l’attribution d’adresse, le DNS privé, les routes ajoutées ni sur l’autorisation d’atteindre un serveur donné. Tout cela se produit après une numérotation réussie, et chacun de ces éléments peut encore être faux. C’est cet écart qui explique la coexistence si fréquente d’une icône connectée et d’une copie échouée.
Capturez le résultat avant que quoi que ce soit d’autre s’exécute
Commencez par confirmer que le profil existe pour le compte qui exécutera la tâche, pas seulement pour le compte avec lequel vous testez :
Get-VpnConnection -Name "Contoso-Office"
Get-VpnConnection -Name "Contoso-Office" -AllUserConnection
Composez ensuite et lisez le code immédiatement. PowerShell conserve le résultat natif dans $LASTEXITCODE seulement jusqu’à l’exécution de la commande externe suivante, donc un ping égaré entre la numérotation et le contrôle détruit la valeur que vous vouliez lire. Affectez-la d’abord à votre propre variable, puis décidez quoi faire.
& rasdial.exe "Contoso-Office"
$dial = $LASTEXITCODE
if ($dial -ne 0) { throw "rasdial failed with $dial" }
Journalisez le code avec le texte d’erreur non secret, car une entrée absente, des identifiants rejetés et un délai dépassé demandent des réponses différentes. Le tableau associe les résultats courants à l’étape suivante.
| 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 |
La disponibilité est la ressource, pas le tunnel
Une fois la numérotation réussie, testez ce dont la tâche a besoin. Un partage, un point de terminaison d’API ou un port de base de données est une meilleure sonde de disponibilité qu’un site web public, car un site public répond par n’importe quel chemin fonctionnel et ne prouve rien sur le chemin privé. Choisissez la sonde dont dépend l’application elle-même. Une connexion TCP réussie vous dit que le routage et le filtrage sont ouverts, et c’est l’essentiel de ce dont la première écriture a besoin :
Test-NetConnection -ComputerName files.contoso.example -Port 445
Limitez les tentatives et notez quelle étape a échoué. Des identifiants rejetés doivent arrêter le script plutôt que nourrir une boucle de nouvelles tentatives ; un nom DNS qui n’est pas encore apparu mérite quelques brèves reprises ; un port qui ne s’ouvre jamais est un problème de routage ou de stratégie au-dessus du client.
Là où la connexion existait déjà avant le début de la tâche, laissez-la tranquille. Déconnecter une session que vous n’avez pas ouverte interrompt l’autre travail de l’utilisateur, alors notez à qui appartient la session et quel démontage est approprié.
Limitez le profil au compte qui exécute la tâche
Une tâche planifiée s’exécute sous sa propre identité et sa propre session, et un profil qui fonctionne sur votre bureau peut y être invisible. Refaites le contrôle de visibilité et la numérotation sous le compte de la tâche avant de faire confiance à la planification. Gardez aussi le mot de passe hors de la ligne de commande : les arguments sont visibles par d’autres processus et finissent souvent dans les journaux.
Si le déploiement exige une invite du navigateur, un contact de carte à puce ou une approbation MFA, cette interaction fait partie du design et ne peut pas être automatisée en simulant des frappes. Utilisez le client pris en charge pour ce cas et laissez l’étape humaine se produire.
La forme du script final reste courte : vérifiez le profil, composez, lisez le code, sondez la ressource, puis commencez le travail. Chaque étape répond à une question que la précédente ne pouvait pas résoudre, et aucune ne repose sur une pause.