Question Récupérer une valeur dans un fichier

Plus d'informations
il y a 13 ans 8 mois #12251 par Michael
Bonjour,


J'ai formaté mon fichier à l'identique de ce que tu proposais \"en direct\" dans le script (sur une seule ligne) :

\"10.192.28;NOM_DU_SERVEUR_IMPRESSION_SITE_1\",\"10.192.228;NOM_DU_SERVEUR_IMPRESSION_SITE_2\",\"10.193.45;NOM_DU_SERVEUR_IMPRESSION_SITE_3\"



C'est sûr que j'aurais préféré garder le format original mais je me perds dans le Import-Csv

Format original (une ligne par sous-réseau):

10.192.28.;NOM_DU_SERVEUR_IMPRESSION_SITE_1
10.192.228.;NOM_DU_SERVEUR_IMPRESSION_SITE_2
10.193.45.;NOM_DU_SERVEUR_IMPRESSION_SITE_3

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

Plus d'informations
il y a 13 ans 8 mois #12253 par Richard Lazaro
Ce que j'ai marqué dans mon exemple était pour générer un tableau de chaine de caractère comme ce que donne ton fichier quand on fait un Get-Content.

Garde une ligne par sous-reseaux.
Par contre, si tu veux garder le \".\" dans ton fichier il faut modifier la partie ou j'effectue le replace par :

[code:1]
$dicServeurs[($computer -replace '[^\.]+$','')]
[/code:1]

Think-MS : (Get-Life).Days | %{ Learn-More }

\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein

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

Plus d'informations
il y a 13 ans 8 mois #12264 par Michael
Bonjour,

Je te remercie pour ton aide ! :)
Le script fonctionne.
J'ai ajouté une vérification sur la présence des fichiers .txt
Maintenant, reste à savoir si le code est \"propre\" et si je le garde tel-quel ou s'il peut être optimisé.

Voici mon script :
[code:1]# Test puis lecture serveurs.txt
if (Test-Path C:\serveurs.txt)
{
$serveurs = (Get-Content C:\serveurs.txt)
} else {
exit
}
# Récupération adresse IP
$computer = ((ipconfig | findstr [0-9].\.)[0]).Split()[-1]
# Test puis lecture imp.txt
if (Test-Path C:\imp.txt)
{
$printers = (Get-Content C:\imp.txt)
} else {
exit
}
# Installation des imprimantes listées dans imp.txt
$dicServeurs = @{}

$serveurs | ForEach-Object {
$dicServeurs += @{$_.Split(';')[0] = $_.Split(';')[1]}
}

$printers | ForEach-Object {
if(![String]::IsNullOrEmpty($dicServeurs[($computer -replace '\.[^\.]+$','')])) {
$net = new-Object -com WScript.Network
$net.AddWindowsPrinterConnection(\"\\\"+$dicServeurs[($computer -replace '\.[^\.]+$','')]+\"\\"+$_)
} else {
exit
}
}
# Définition de l'imprimante par défaut (1ère ligne de imp.txt)
New-Variable DEFAUT (Get-Content c:\imp.txt -TotalCount 1)
New-Variable OKIMP (\"\\\"+$dicServeurs[($computer -replace '\.[^\.]+$','')]+\"\\"+$DEFAUT)
(New-Object -ComObject WScript.Network).SetDefaultPrinter($OKIMP)[/code:1]

Pour mémoire, structure des fichiers txt :

serveurs.txt

10.192.28;NOM_DU_SERVEUR_IMPRESSION_SITE_1
10.192.228;NOM_DU_SERVEUR_IMPRESSION_SITE_2
10.193.45;NOM_DU_SERVEUR_IMPRESSION_SITE_3


imp.txt

NOM_DE_PARTAGE_IMPRIMANTE_1
NOM_DE_PARTAGE_IMPRIMANTE_2
NOM_DE_PARTAGE_IMPRIMANTE_3

<br><br>Message édité par: maekeule, à: 28/06/12 07:56

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

Plus d'informations
il y a 13 ans 8 mois #12265 par Laurent Dardenne
Salut,
une amélioration pour \&quot;$printers | ForEach-Object\&quot;,pas besoin de créer l'objet COM à chaque itération. Le cmdlet Foreach propose les paramètres -Begin -Process et -End.
Et il me semble que le replace pourrait être effectué une seul fois.

Tutoriels PowerShell

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

Plus d'informations
il y a 13 ans 8 mois #12266 par Richard Lazaro
Totalement vrai. Tout cela est de l'optimisation aprés :p

Think-MS : (Get-Life).Days | %{ Learn-More }

\\&quot;Problems cannot be solved by the same level of thinking that created them.\\&quot; - Albert Einstein

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

Plus d'informations
il y a 13 ans 8 mois #12267 par Laurent Dardenne
Richard Lazaro écrit:

Tout cela est de l'optimisation aprés :p

Oui, mais si tu y penses \&quot;pendant\&quot; l'écriture, il n'y a pas d'\&quot;après\&quot; ;)
\&quot;On écrira la documentation; Après\&quot;.
Un apprêt superficiel...<br><br>Message édité par: Laurent Dardenne, à: 28/06/12 13:11

Tutoriels PowerShell

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

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