Question connexion a distance automatisée
- daniel soares
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 133
- Remerciements reçus 0
il y a 17 ans 11 mois #2120
par daniel soares
connexion a distance automatisée a été créé par daniel soares
pour ceux qui comme moi naviguent dans un parc heterogene avec plusieurs domaines et des noms de serveurs pas evident a memoriser
je me suis fait un script qui recherche le serveur a partir d'une partie de son nom et qui utilise mstsc.exe
pour s'y connecter sans demander le mot de passe qui lui est chiffré dans un fichier
avant tout ce script est basé sur le import-credential export-credential proposé par Janel voir dans la bibliotheque de scripts
fichier utilisés
admin.txt :utilisé par import-credential.ps1
server_liste.csv : sous la forme
nomserveur,ipserveur,nomdudomaine,localisationphysique
voir fichier joint: la localisation physique n'est pas necessaire pour ce script
ts.ps1 :le code
[code:1]
#-$source : partie du nom ou de l'ip du serveur
#-$mode permet de choisir le fichier rdp correspondant
#-$paramcompte pour utiliser un compte temporaire
param ($source,$Mode,$paramcompte)
#
#-index permettant de selectionner le bon serveur dans une recherche
$account_file =\"c:\chemindufichiercsv\"
$index = 0
$valeur=0
$appwait= 50 # si l'alarme \"mstsc tres lent a ouvrir\" apparait augmenter cette valeur: 50 = 5 sec
# liste des serveurs correspondant a la recherche
[array]$liste =get-content $account_file |where {$_ -match $source}
#-selectionne le rdp correspondant a l'argument $mode par exemple utiliser une session avec
#-demarrage d'une application ou avec affichage specifique
if ($mode -like \"p\"){$file =\"c:\Powertools\prod.rdp\"}
else{$file=\"c:\PowerTools\bureau.rdp\"}
#
#-version 6 de mstsc version vista
$v6={
Start-Sleep -m 300
$shell.SendKeys($server)
$shell.SendKeys(\"{delete}\")
$shell.SendKeys(\"{tab 4}\")
$shell.SendKeys(\"{enter}\")
while($shell.AppActivate($app.processid)-ne $true){start-sleep -m 100}
$shell.SendKeys(\"%N\")
$shell.SendKeys($compte)
$shell.SendKeys(\"{tab}\")
$shell.SendKeys($mdp)
$shell.SendKeys(\"{tab 2}\")
$shell.SendKeys(\"{enter}\")
}
#
#-version 5 de mstsc version xp
$v5={
Start-Sleep -m 300
$shell.SendKeys(\"%i\")
$shell.SendKeys($server)
$shell.SendKeys(\"{delete}\")
$shell.SendKeys(\"%N\")
$shell.SendKeys($compte)
$shell.SendKeys(\"%M\")
$shell.SendKeys($mdp)
$shell.SendKeys(\"%C\")
}
#
#-recupere le compte adequat en se basant sur le fichier de reference
#-\"domaine1\" {$script:compte= \"domaine1\compte1\"}
#-domaine1 etant la valeur entrée dans le fichier de reference
#-domaine1\compte1 etant la valeur dans le fichier admin.txt
$getaccount ={
if($paramcompte -eq $null) {
# $account_file est le fichier stockan les informations serveurs
$domaine=(get-content $account_file | where { $_ -match $server+\",\"}).split(\",\")[2]
switch ($domaine)
{
\"domaine1\" {$script:compte= \"domaine1\compte1\"}
\"workgroup1\"{$script:compte=\"comptelocaladmin\"}
\"workgroup2\" {$script:compte=\"comptelocaladmin\"}
\"domaine2\" {$script:compte=\"domaine2\compte2\"}
\"domainex\" {$script:compte=\"domainex\comptex\"}
default {$script:compte=\"adminprod\"}
}
}
else {$script:compte=$paramcompte}
}
#
# si il y a plus d'un serveur dans la liste alors proposer un choix
if ($liste.count -gt 1){
$liste | foreach {
[string]$index+\"`t\"+[string]($_.split(\",\"))[0] | write-host
$index++
}
$valeur = read-host \"choisir le bon!\"
}
# $server est egal a l'ip du serveur (pour eviter les pbs de resolution dns)
$server = ($liste[$valeur].split(\",\"))[1]
# va chercher le compte had hoc
&$getaccount
#-dechiffre le mot de passe
#-necessite import-credential
#-http://powershell-scripting.com/index.php?option=com_content&task=view&id=200&Itemid=71
$secmdp = import-credential $compte
$ptr = [System.Runtime.InteropServices.Marshal]:: SecureStringToBSTR($secmdp.password)
$mdp = [System.Runtime.InteropServices.Marshal]:: PtrToStringUni($ptr)
#-si le mot de passe utilise le signe + ou % alors les mettre sous accolade
#-pour qu'ils soient considerés comme des caracteres dans le sendkeys
$mdp = $mdp.replace(\"+\",\"{+}\").replace(\"%\",\"{%}\")
$server |write-host
#-demarre le fichier rdp en mode edit le remplis en fonction de la version de mstsc
#-et lance la connexion
$shell = new-object -com WScript.Shell
$app = $shell.Exec(\"mstsc /edit $file\")
#-attends que mstsc soit actif avant d'envoyer les sendkeys
while($shell.AppActivate($app.processid)-ne $true){
$wait_focus++
if($wait_focus -gt $appwait){\"mstsc tres lent a ouvrir appuyer sur crtl c pour arreter\"}
start-sleep -m 100}
#-lance le processus de sendkeys correspondant a la version de mstsc.exe
if (test-path 'Hklm:\SOFTWARE\Microsoft\Updates\Windows XP\SP3\kb925876'){&$v6}
else{&$v5}
[/code:1]
j'ai du ajouter un espace pour eviter le smiley sur deux lignes apres \"marshal]::\"
quelques bugs contstatés si qqun peu me proposer des solutions
avec mstsc sur certains postes pb de verouillage numerique
la modification du fichier rdp se fait par sendkeys pas tres sur... si qqun connait un moyen de modifier ce fichier autrement... (y inclus le mot de passe)
l'utilisation est
ts \"partie du nom du serveur\" \"choix du fichier rdp\" \"compte temporaire\"
tous les parametres sont facultatif
par defaut ts \"partie du nom du serveur\" suffit largement<br><br>Message édité par: Dan, à: 18/04/08 12:24
je me suis fait un script qui recherche le serveur a partir d'une partie de son nom et qui utilise mstsc.exe
pour s'y connecter sans demander le mot de passe qui lui est chiffré dans un fichier
avant tout ce script est basé sur le import-credential export-credential proposé par Janel voir dans la bibliotheque de scripts
fichier utilisés
admin.txt :utilisé par import-credential.ps1
server_liste.csv : sous la forme
nomserveur,ipserveur,nomdudomaine,localisationphysique
voir fichier joint: la localisation physique n'est pas necessaire pour ce script
ts.ps1 :le code
[code:1]
#-$source : partie du nom ou de l'ip du serveur
#-$mode permet de choisir le fichier rdp correspondant
#-$paramcompte pour utiliser un compte temporaire
param ($source,$Mode,$paramcompte)
#
#-index permettant de selectionner le bon serveur dans une recherche
$account_file =\"c:\chemindufichiercsv\"
$index = 0
$valeur=0
$appwait= 50 # si l'alarme \"mstsc tres lent a ouvrir\" apparait augmenter cette valeur: 50 = 5 sec
# liste des serveurs correspondant a la recherche
[array]$liste =get-content $account_file |where {$_ -match $source}
#-selectionne le rdp correspondant a l'argument $mode par exemple utiliser une session avec
#-demarrage d'une application ou avec affichage specifique
if ($mode -like \"p\"){$file =\"c:\Powertools\prod.rdp\"}
else{$file=\"c:\PowerTools\bureau.rdp\"}
#
#-version 6 de mstsc version vista
$v6={
Start-Sleep -m 300
$shell.SendKeys($server)
$shell.SendKeys(\"{delete}\")
$shell.SendKeys(\"{tab 4}\")
$shell.SendKeys(\"{enter}\")
while($shell.AppActivate($app.processid)-ne $true){start-sleep -m 100}
$shell.SendKeys(\"%N\")
$shell.SendKeys($compte)
$shell.SendKeys(\"{tab}\")
$shell.SendKeys($mdp)
$shell.SendKeys(\"{tab 2}\")
$shell.SendKeys(\"{enter}\")
}
#
#-version 5 de mstsc version xp
$v5={
Start-Sleep -m 300
$shell.SendKeys(\"%i\")
$shell.SendKeys($server)
$shell.SendKeys(\"{delete}\")
$shell.SendKeys(\"%N\")
$shell.SendKeys($compte)
$shell.SendKeys(\"%M\")
$shell.SendKeys($mdp)
$shell.SendKeys(\"%C\")
}
#
#-recupere le compte adequat en se basant sur le fichier de reference
#-\"domaine1\" {$script:compte= \"domaine1\compte1\"}
#-domaine1 etant la valeur entrée dans le fichier de reference
#-domaine1\compte1 etant la valeur dans le fichier admin.txt
$getaccount ={
if($paramcompte -eq $null) {
# $account_file est le fichier stockan les informations serveurs
$domaine=(get-content $account_file | where { $_ -match $server+\",\"}).split(\",\")[2]
switch ($domaine)
{
\"domaine1\" {$script:compte= \"domaine1\compte1\"}
\"workgroup1\"{$script:compte=\"comptelocaladmin\"}
\"workgroup2\" {$script:compte=\"comptelocaladmin\"}
\"domaine2\" {$script:compte=\"domaine2\compte2\"}
\"domainex\" {$script:compte=\"domainex\comptex\"}
default {$script:compte=\"adminprod\"}
}
}
else {$script:compte=$paramcompte}
}
#
# si il y a plus d'un serveur dans la liste alors proposer un choix
if ($liste.count -gt 1){
$liste | foreach {
[string]$index+\"`t\"+[string]($_.split(\",\"))[0] | write-host
$index++
}
$valeur = read-host \"choisir le bon!\"
}
# $server est egal a l'ip du serveur (pour eviter les pbs de resolution dns)
$server = ($liste[$valeur].split(\",\"))[1]
# va chercher le compte had hoc
&$getaccount
#-dechiffre le mot de passe
#-necessite import-credential
#-http://powershell-scripting.com/index.php?option=com_content&task=view&id=200&Itemid=71
$secmdp = import-credential $compte
$ptr = [System.Runtime.InteropServices.Marshal]:: SecureStringToBSTR($secmdp.password)
$mdp = [System.Runtime.InteropServices.Marshal]:: PtrToStringUni($ptr)
#-si le mot de passe utilise le signe + ou % alors les mettre sous accolade
#-pour qu'ils soient considerés comme des caracteres dans le sendkeys
$mdp = $mdp.replace(\"+\",\"{+}\").replace(\"%\",\"{%}\")
$server |write-host
#-demarre le fichier rdp en mode edit le remplis en fonction de la version de mstsc
#-et lance la connexion
$shell = new-object -com WScript.Shell
$app = $shell.Exec(\"mstsc /edit $file\")
#-attends que mstsc soit actif avant d'envoyer les sendkeys
while($shell.AppActivate($app.processid)-ne $true){
$wait_focus++
if($wait_focus -gt $appwait){\"mstsc tres lent a ouvrir appuyer sur crtl c pour arreter\"}
start-sleep -m 100}
#-lance le processus de sendkeys correspondant a la version de mstsc.exe
if (test-path 'Hklm:\SOFTWARE\Microsoft\Updates\Windows XP\SP3\kb925876'){&$v6}
else{&$v5}
[/code:1]
j'ai du ajouter un espace pour eviter le smiley sur deux lignes apres \"marshal]::\"
quelques bugs contstatés si qqun peu me proposer des solutions
avec mstsc sur certains postes pb de verouillage numerique
la modification du fichier rdp se fait par sendkeys pas tres sur... si qqun connait un moyen de modifier ce fichier autrement... (y inclus le mot de passe)
l'utilisation est
ts \"partie du nom du serveur\" \"choix du fichier rdp\" \"compte temporaire\"
tous les parametres sont facultatif
par defaut ts \"partie du nom du serveur\" suffit largement<br><br>Message édité par: Dan, à: 18/04/08 12:24
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- Robin Lemesle
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 260
- Remerciements reçus 0
il y a 17 ans 11 mois #2124
par Robin Lemesle
Robin MVP PowerShell
Réponse de Robin Lemesle sur le sujet Re:connexion a distance automatisée
Merci dan de poster ton code, si tu me donnes ton accord, je vais le mettre dans la bibliothèque de scripts.
Robin MVP PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- daniel soares
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 133
- Remerciements reçus 0
il y a 17 ans 11 mois #2128
par daniel soares
Réponse de daniel soares sur le sujet Re:connexion a distance automatisée
ce sera avec plaisir Robin
Connexion ou Créer un compte pour participer à la conversation.
- daniel soares
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 133
- Remerciements reçus 0
il y a 17 ans 11 mois #2223
par daniel soares
Réponse de daniel soares sur le sujet Re:connexion a distance automatisée
j'ai modifié le script pour ajouter les lignes
[code:1]
while($shell.AppActivate($app.processid)-ne $true){ start-sleep -m 100}
[/code:1]
aux endroits strategiques des sendkeys pour les pc un peut lents c'est mieux géré qu'avec la tempo
[code:1]
while($shell.AppActivate($app.processid)-ne $true){ start-sleep -m 100}
[/code:1]
aux endroits strategiques des sendkeys pour les pc un peut lents c'est mieux géré qu'avec la tempo
Connexion ou Créer un compte pour participer à la conversation.
- Robin Lemesle
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 260
- Remerciements reçus 0
il y a 17 ans 11 mois #2225
par Robin Lemesle
Robin MVP PowerShell
Réponse de Robin Lemesle sur le sujet Re:connexion a distance automatisée
Tu as modifié le fichier attaché à ton post ?
Robin MVP PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- daniel soares
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 133
- Remerciements reçus 0
il y a 17 ans 11 mois #2226
par daniel soares
Réponse de daniel soares sur le sujet Re:connexion a distance automatisée
fichiers ajouté plus qqs explications pour la bonne conf de l'ensemble plus un essais de mise en page un peu plus lisible et dieu sait que c'est pas mon fort
<br><br>Message édité par: Dan, à: 18/04/08 12:27
La pièce jointe TS.zip est absente ou indisponible
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.080 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Contributions à la communauté
- connexion a distance automatisée