Estoy analizando un archivo csproj para una instalación nuget y tengo un nodo que debe modificarse. El nodo en cuestión es el nodo llamado "Generator" donde su valor es igual a "TextTemplatingFileGenerator" y su nodo padre tiene un atributo de "WebConfigSettingsGeneratorScript.tt" (la segunda parte aún no está aquí).PowerShell analizar XML y guardar cambios
Aquí está el script que tengo, pero aún no está terminado. Está funcionando, pero guarda un archivo vacío. Además, no tiene la segunda parte de mi cláusula where, que es
$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
}
}
Aquí hay una versión básica del 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>
muchas gracias. ¡Soy un PowerShell n00b total!
Esto ayuda, pero xml.Save $ ($ file.FullName) está subiendo como una operación no válida. –
La única excepción que se ha documentado que XmlDocument.Save (ruta de la cadena) arroja es una XmlException si el XmlDocument correspondiente no está bien formado. Por cierto, también debería deshacerse del 'Set-Content $ file.FullName $ xml' ya que la llamada' $ xml.Save ($ file.Fullname) 'guardará nuevamente el archivo original. –
Genial, he tomado los cambios que me has ofrecido. Pero, no parece estar haciendo el cambio al archivo. Sin embargo, la secuencia de comandos ES guardando el archivo. –