11 votes

PowerShell analyse le xml et enregistre les changements

J'analyse un fichier csproj pour une installation nuget et j'ai un noeud qui doit être modifié. Le noeud en question est le noeud nommé "Generator" où sa valeur est égale à "TextTemplatingFileGenerator" et son noeud parent a un attribut de "WebConfigSettingsGeneratorScript.tt" (la deuxième partie n'est pas encore là).

Voici le script que j'ai, mais il n'est pas tout à fait terminé. Il fonctionne, mais il enregistre un fichier vide. De plus, il n'a pas la deuxième partie de ma clause where, qui est

$path = 'C:\Projects\Intouch\NuGetTestPackage\NuGetTestPackage'
cd $path
$files = get-childitem -recurse -filter *.csproj
foreach ($file in $files){
    ""
    "Filename: {0}" -f $($file.Name)
    "=" * ($($file.FullName.Length) + 10)   

    if($file.Name -eq 'NuGetTestPackage1.csproj'){
        $xml = gc $file.FullName | 
        Where-Object { $_.Project.ItemGroup.None.Generator -eq 'TextTemplatingFileGenerator' } | 
        ForEach-Object { $_.Project.ItemGroup.None.Generator = '' }
        Set-Content $file.FullName $xml
    }   
}

Voici une version de base du XML :

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <None Include="T4\WebConfigSettingGeneratorScript.tt">
      <Generator>TextTemplatingFileGenerator</Generator>
      <LastGenOutput>WebConfigSettingGeneratorScript.txt</LastGenOutput>
    </None>

Merci beaucoup. Je suis un vrai n00b de PowerShell !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X