Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: precambrico en 24 Abril 2014, 19:32 pm



Título: Necesito ayuda con un script que modifique un archivo xml
Publicado por: precambrico en 24 Abril 2014, 19:32 pm
Buenas a tod@s,

Tengo un problema, he de modificar un archivo xml del filezilla en muchos equipos y estoy atascado a la hora de hacer el script, porque necesito cambiar el nombre del usuario y el la Pass están en rojo, el problema viene cuando se modifica el nombre del usuario también se modifica el del host porque ambos contienen la misma palabra contenidos os adjunto la parte del código del xml

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<FileZilla3>
    <Servers>
        <Folder expanded="1">Redaccion
            <Server>
                <Host>ftp-contenidos.int</Host>
                <Port>21</Port>
                <Protocol>0</Protocol>
                <Type>0</Type>
                <User>contenidos</User>
                <Pass>iW5kexal5M</Pass>
                <Logontype>1</Logontype>
                <TimezoneOffset>0</TimezoneOffset>
                <PasvMode>MODE_DEFAULT</PasvMode>
                <MaximumMultipleConnections>0</MaximumMultipleConnections>
                <EncodingType>Auto</EncodingType>
                <BypassProxy>0</BypassProxy>
                <Name>Contenidos-interno</Name>
                <Comments></Comments>
                <LocalDir></LocalDir>
                <RemoteDir></RemoteDir>
                <SyncBrowsing>0</SyncBrowsing>Contenidos-interno
            </Server>
            <Server>
                <Host>ftp-interno.int</Host>
                <Port>21</Port>
                <Protocol>0</Protocol>
                <Type>0</Type>
                <User>sdl</User>
                <Pass>kJdm43!</Pass>
                <Logontype>1</Logontype>
                <TimezoneOffset>0</TimezoneOffset>
                <PasvMode>MODE_DEFAULT</PasvMode>
                <MaximumMultipleConnections>0</MaximumMultipleConnections>
                <EncodingType>Auto</EncodingType>
                <BypassProxy>0</BypassProxy>
                <Name>ftp-interno</Name>
                <Comments></Comments>
                <LocalDir></LocalDir>
                <RemoteDir></RemoteDir>
                <SyncBrowsing>0</SyncBrowsing>ftp-interno
            </Server>
        </Folder>
    </Servers>
</FileZilla3>

Bueno yo he conseguido lo siguiente, con este código me cambia la pass, esto si funciona aparentemente

@echo off
Setlocal EnableDelayedExpansion

set HOME=\\scripts\chftp
set USER=xxx.int\admin
set PASS=admin

:: ojo, hay que escapar algunos caracteres, el simbolo de dólar entre ellos

set OLDPASS1=contenid0\$
set OLDPASS2=GqedVja8
set OLDPASS3=iW5kexal5M
set NEWPASS=Contenido1
set TIMESTAMP=%DATE:~-4%%DATE:~3,2%%DATE:~0,2%

taskkill /s %1 /u %USER% /p %PASS% /IM filezilla.exe /F

net use \\%1\c$ /d > nul 2>&1
net use \\%1\c$ %PASS% /user:%USER%
if not %errorlevel% EQU 0 goto ERROR
pushd \\%1\c$
if not %errorlevel% EQU 0 goto ERROR

set SEDEXPR1="s/%OLDPASS1%/%NEWPASS%/g"
set SEDEXPR2="s/%OLDPASS2%/%NEWPASS%/g"
set SEDEXPR2="s/%OLDPASS3%/%NEWPASS%/g"

for /D %%a in ("\documents and settings\*.*") do (

set INFILE="%%a\Datos de programa\FileZilla\sitemanager.xml.%TIMESTAMP%"
set OUTFILE="%%a\Datos de programa\FileZilla\sitemanager.xml"
set TMPFILE="%%a\Datos de programa\FileZilla\sitemanager.tmppass"

if exist !OUTFILE! (
copy /Y !OUTFILE! !INFILE!
%HOME%\sed.exe !SEDEXPR1! !INFILE! >!TMPFILE!
%HOME%\sed.exe !SEDEXPR2! !TMPFILE! >!OUTFILE!
del !TMPFILE!
)
)

popd
echo HECHO
goto END

:ERROR
echo FALLO

:END
net use \\%1\c$ /d > nul 2>&1


Esta parte es la que no funciona me modifica todo

@echo off

Setlocal EnableDelayedExpansion

set HOME=\\scripts\chftp
set USER=xxx.int\admin
set PASS=admin

:: ojo, hay que escapar algunos caracteres, el simbolo de dólar entre ellos.
:: En el primer paso del fichero cambiamos el usuario.

set OLDUSER=contenidos
set NEWUSER=informacion


set TIMESTAMP=%DATE:~-4%%DATE:~3,2%%DATE:~0,2%

taskkill /s %1 /u %USER% /p %PASS% /IM filezilla.exe /F

net use \\%1\c$ /d > nul 2>&1
net use \\%1\c$ %PASS% /user:%USER%

if not %errorlevel% EQU 0 goto ERROR
pushd \\%1\c$
if not %errorlevel% EQU 0 goto ERROR

set SEDEXPR1="s/%OLDUSER%/%NEWUSER%/g"
set SEDEXPR2="s/%NEWUSER%/%NEWUSER%/g"

for /D %%a in ("\documents and settings\*.*") do (

set INFILE="%%a\Datos de programa\FileZilla\sitemanager.xml.%TIMESTAMP%"
set OUTFILE="%%a\Datos de programa\FileZilla\sitemanager.xml"
set TMPFILE="%%a\Datos de programa\FileZilla\sitemanager.tmppass"
if exist !OUTFILE! (
copy /Y !OUTFILE! !INFILE!
%HOME%\sed.exe !SEDEXPR1! !INFILE! >!TMPFILE!
%HOME%\sed.exe !SEDEXPR2! !TMPFILE! >!OUTFILE!
del !TMPFILE!
)
)
popd
echo HECHO
goto END

Solo necesito cambiar el user que esta en color rojo, mejor dicho no se como llegar a decirle al programa como llegar a la etiqueta user y modifique unicamente el user y deje el host como esta.

Muchas gracias


[MOD] Deberias usar las etiquetas GeSHi, para poner el código.


Título: Re: Necesito ayuda con un script que modifique un archivo xml
Publicado por: Eleкtro en 25 Abril 2014, 06:56 am
Como veo que no te importa depender de aplicaciones de terceros entonces en lugar de utilizar 'SED' podrías utilizar alguna herramienta óptima para la manipulación de XML, como por ejemplo 'XML Starlet':

Código
  1. @Echo OFF
  2.  
  3. Set "XmlInput=.\FileZilla.xml"
  4. Set "XmlOutput=.\Nuevo documento.xml"
  5.  
  6. Set "UserXPath=FileZilla3/Servers/Folder/Server/User"
  7. Set "UserValue=Nuevo Usuario"
  8.  
  9. Set "PassXPath=FileZilla3/Servers/Folder/Server/Pass"
  10. Set "PassValue=Nuevo Pass"
  11.  
  12. .\xmlstarlet.exe ed -u "%UserXPath%" -v "%UserValue%" -u "%PassXPath%" -v "%PassValue%" "%XmlInput%" > "%XmlOutput%"
  13.  
  14. Pause&Exit

Saludos


Título: Re: Necesito ayuda con un script que modifique un archivo xml
Publicado por: precambrico en 4 Mayo 2014, 19:31 pm
Muchas gracias, por contestar, voy a probarlo y te cuento.

Un saludo.