IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Lister et modifier fichiers [web.config]


Sujet :

Scripts/Batch

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Lister et modifier fichiers [web.config]
    Bonjour à tous,

    Etant juste débutant en Powershell, je dois réaliser un script novice, je m'explique:

    Ayant referencé différents serveus Web à travers le parc informatique, la mission est de modifier des paramêtres contenus dans les fichiers "web.config" de chaque serveur.

    Au niveau méthode voici à quoi j'ai pensé:
    - Parcourir tous les serveurs et lister les emplacements des fichiers Web.conf. sur chaque serveur
    - Verifier dans ces fichiers si les paramêtres sont ok ou non.
    - Si non ok, remplacer les valeurs (true par false)
    - Rassembler toutes ces infos dans un fichier excel avec Nom serveur, Chemin du fichier web.conf, Paramêtre 1= False ou true, Par 2= ...

    Pour l'instant j'ai ceci, mais je bloque déjà car erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Vous ne pouvez pas appeler de méthode sur une expression ayant la valeur Null.
    Au niveau de C:\Temp\Lister et auditer\Script.ps1*: 4 Caractère*: 72
    +       Copy-Item -LiteralPath $filePath -Destination ($filePath).Replace <<<<
    ($fileName,("_"+$fileName))
        + CategoryInfo          : InvalidOperation: (Replace:String) [], RuntimeEx
       ception
        + FullyQualifiedErrorId : InvokeMethodOnNull
    
    Get-Content : Impossible de lier l'argument au paramètre «*Path*», car il a la
    valeur Null.
    Au niveau de C:\Temp\Lister et auditer\Script.ps1*: 6 Caractère*: 19
    +       (Get-Content <<<<  $filePath) | ForEach-Object {
        + CategoryInfo          : InvalidData: (:) [Get-Content], ParameterBinding
       ValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,M
       icrosoft.PowerShell.Commands.GetContentCommand
    
    Press any key to continue .
    Voici mon script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Get-ChildItem -Path "C:\Temp\Lister et auditer\Web.config\web.config1\" -Name "web.config" -Recurse | ForEach-Object {
          $filePath = $_.FullName
          $fileName = $_.Name
          Copy-Item -LiteralPath $filePath -Destination ($filePath).Replace($fileName,("_"+$fileName))
          
          (Get-Content $filePath) | ForEach-Object {
                $_ -Replace 'Compilation debug.?=.?"true"', 'Compilation debug="false"'
    			$_ -Replace 'Trace enable.?=.?"true"', 'Trace enable="false"'
    			$_ -Replace 'customErrors mode.?=.?"On"', 'customErrors mode="Off"'
    			$_ -Replace 'directoryBrowse enabled.?=.?"true"', 'directoryBrowse enabled="false"'
    	    } |
          Set-Content $filePath
    	  Write-Host "Press any key to continue …" 
    $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
    }
    Merci d'avance pour votre aide, à comprendre et découvrir ce langage si intéressant.

  2. #2
    Membre éclairé Avatar de suchiwa
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2010
    Messages
    435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2010
    Messages : 435
    Points : 899
    Points
    899
    Par défaut
    Bonjour Looping73,

    Je comprends que ton bloc est dans une boucle foreach qui scanne tous les pc de l'AD, puis tu vérifies la présence de ton web.config.

    Ton get-childritem est erronné :
    Quand j'ajoute un write-host $filepath et write-host $filename, dans la boucle, c'est vide.

    Ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Get-ChildItem -Path "C:\Temp\Lister et auditer\Web.config\web.config1\" -Name "web.config" -Recurse | ForEach-Object {
    Tu fais un "ls" sur le fichier "web.config" et demande à avoir les sous-arborescences (-recurse)...

    Je te propose le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Get-ChildItem -Path "C:\Temp\Lister et auditer\Web.config\web.config1\*.config" | ForEach-Object {
    $filePath = $_.FullName
    # optionnel, pour voir en live l'affectation
    write-host $filepath
    }
    Je ne me suis pas penché sur le code suivant, mais ceci me parait "compliqué" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Copy-Item -LiteralPath $filePath -Destination ($filePath).Replace($fileName,("_"+$fileName))
    Que veux tu faire précisément ?

    Cordialement,
    Vincent

  3. #3
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par suchiwa Voir le message
    Je te propose le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Get-ChildItem -Path "C:\Temp\Lister et auditer\Web.config\web.config1\*.config" | ForEach-Object {
    $filePath = $_.FullName
    # optionnel, pour voir en live l'affectation
    write-host $filepath
    }
    Un conseil, dans ce cas utilisez Write-Debug en lieu et place de Write-Host.

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci pour votre réponse, j'avance petit à petit..

    Objectif:
    Lister tous les web.config présent sur une soixantaine de serveurs.
    Parmi ces web.config, rassembler les paramêtres :

    -Compilationdebug
    -TraceEnable
    -CustomErrorsMode
    -DirectoryBrowse

    Chacun de ces paramêtres possède une valeur (=true, false, Off), je dois lister ces valeurs dans un tableau Excel. (1ere colonne: nom serveur, deuxieme colonne "valeur1", "valeur2"... Histoire de rassembler ces informations.

    La deuxième étape sera de remplacer des valeurs (passer de true à false et inversement).

    Pour info, voici où j'en suis:

    $outputFolder = "c:\audit"
    $outputFile = "output.csv"

    if (!(Test-Path $outputFolder)) {
    New-Item $outputFolder -Type Directory
    }

    $outputPath = $outputFolder + "\" + $outputFile

    Get-ChildItem -Path "C:\Temp\Lister et auditer\Web.config\web.config1\*.config" | ForEach-Object {
    $filePath = $_.FullName
    # Pour voir en live l'affectation
    Write-Debug $filepath

    $fileName = $_.Name
    Copy-Item -LiteralPath $filePath -Destination ($filePath).Replace($fileName,("_"+$fileName))

    (Get-Content $filePath) | ForEach-Object {
    if ($_ -match 'Compilation debug.?=.?"true"') { $CompilationDebug = $true }
    else { $CompilationDebug = $false}
    if ($_ -match 'Trace enable.?=.?"true"') { $TraceEnabled = $true }
    else { $traceEnabled = $false}
    if ($_ -match 'customErrors mode.?=.?"On"') { $customErrorsMode = $On }
    else { $customErrorsMode = $Off}
    if ($_ -match 'directoryBrowse enabled.?=.?"true"') { $directoryBrowseEnabled = $true }
    else { $directoryBrowseEnabled = $false}

    #$_ -Replace 'Compilation debug.?=.?"true"', 'Compilation debug="false"'
    #$_ -Replace 'Trace enable.?=.?"true"', 'Trace enable="false"'
    #$_ -Replace 'customErrors mode.?=.?"On"', 'customErrors mode="Off"'
    #$_ -Replace 'directoryBrowse enabled.?=.?"true"', 'directoryBrowse enabled="false"'

    "$$outputFile;$CompilationDebug;$TraceEnabled;$customErrorsMode;$directoryBrowseEnabled" | Out-File -Path C:\Temp\test.csv $outputPath -Append
    } |
    Set-Content $filePath
    Write-Host "Press any key to continue …"
    $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
    }

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/08/2007, 11h04
  2. Problème de fichier web.config
    Par Zéli dans le forum ASP.NET
    Réponses: 14
    Dernier message: 07/05/2007, 14h44
  3. [WebForms]Peut-on modifier le web.config depuis le site ?
    Par quanou dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 10/08/2006, 22h15
  4. [VB.NET] Peut-on modifier le web config à chaud?
    Par Immobilis dans le forum ASP.NET
    Réponses: 5
    Dernier message: 28/11/2005, 14h13
  5. [C#] Section appSettings du fichier Web.config
    Par pbo dans le forum ASP.NET
    Réponses: 2
    Dernier message: 01/02/2005, 10h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo