Question
Récupérer une valeur dans un fichier
- Michael
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 5
- Remerciements reçus 0
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.
- Richard Lazaro
- Hors Ligne
- Membre platinium
-
- Messages : 530
- Remerciements reçus 0
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.
- Michael
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 5
- Remerciements reçus 0
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
<br><br>Message édité par: maekeule, à: 28/06/12 07:56NOM_DE_PARTAGE_IMPRIMANTE_1
NOM_DE_PARTAGE_IMPRIMANTE_2
NOM_DE_PARTAGE_IMPRIMANTE_3
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
une amélioration pour \"$printers | ForEach-Object\",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.
- Richard Lazaro
- Hors Ligne
- Membre platinium
-
- Messages : 530
- Remerciements reçus 0
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Oui, mais si tu y penses \"pendant\" l'écriture, il n'y a pas d'\"après\"Tout cela est de l'optimisation aprés
\"On écrira la documentation; Après\".
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.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Récupérer une valeur dans un fichier