Question connexion a distance automatisée

Plus d'informations
il y a 17 ans 11 mois #2120 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 \&quot;partie du nom du serveur\&quot; suffit largement<br><br>Message édité par: Dan, à: 18/04/08 12:24

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 11 mois #2124 par Robin Lemesle
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.

Plus d'informations
il y a 17 ans 11 mois #2128 par daniel soares
ce sera avec plaisir Robin :)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 11 mois #2223 par daniel soares
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

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 11 mois #2225 par Robin Lemesle
Tu as modifié le fichier attaché à ton post ?

Robin MVP PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 11 mois #2226 par daniel soares
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

La pièce jointe TS.zip est absente ou indisponible

<br><br>Message édité par: Dan, à: 18/04/08 12:27
Pièces jointes :

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.097 secondes
Propulsé par Kunena