Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: CiscoIT en 24 Octubre 2009, 05:14 am



Título: Esto se puede hacer con VBS o Batch?
Publicado por: CiscoIT en 24 Octubre 2009, 05:14 am
Estimados:

Este es mi 1er post. Estoy dando los 1ros pasos de programación y en el trabajo tengo que hacer lo siguiente y quisiera saber si con vbs o batch se puede hacer.
Tengo varias carpetas con archivos web.config que se encuentran en la carpeta \inetpub\wwwroot en el disco C:\

Código:
<configSection name="WSProxies">
<configCache enabled="false" refresh="1 * * * *" />
     <configProvider assembly="Microsoft.ApplicationBlocks.ConfigurationManagement,Version=2.4.5.610,Culture=neutral,PublicKeyToken=ab13f2b83fb40ead"
                type="Microsoft.ApplicationBlocks.ConfigurationManagement.Storage.XmlFileStorage"
                refreshOnChange="false"
                signed="false"
                encrypted="false"
                path="C:\Inetpub\wwwroot\ruta\XXX.Sime.General.WebServices\WSProxies.xml" />
</configSection>

Código:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<CONTABLE>
    <XmlSerializableHashtable xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <Entries>
<Entry>     
<key xsi:type="xsd:string">Contoso </key>
<value xsi:type="xsd:string">Provider=SQLOLEDB.1;Persist Security Info=False;Password=pototo;User ID=usuario;Initial Catalog=Base_de_datos;Data Source=SQLServer;
</value>
</Entry>
</Entries>
    </XmlSerializableHashtable>
</CONTABLE>
</configuration>
en donde varias veces los tengo que editar y modificar el path adonde apuntan, como así también en otros archivos xml, tengo que modificar los nombres del SQL Server, el y el nombre de la base de datos.

Hay manera de poderlo hacer mediante un script en vbs o en batch?
Recién me bajé unos pdf de un tutorial que encontré tuyo en el foro "elhacker" y encontré otro de Batch avanzado.

Con la info de los tutoriales que hay en el foro, me alcanza y sobra para hacer lo que quiero.
O es mejor hacerlo en vb2005.net para todo esto?

Me gustaría luego con el tiempo de hacerle un form donde poner la ruta destino donde hay que apuntar como así los nombres de los server y bases que se deben cambiar y las carpetas a modificar.

Estoy seguro que no debe ser difícil pero para alguien que nunca programó como yo, realmente no sé por donde empezar.

Asimismo, tienen algún librito o apunte para recomendarme sobre la programación de estas cosas?

Gracias y saludos.


Título: Re: Esto se puede hacer con VBS o Batch?
Publicado por: Novlucker en 24 Octubre 2009, 05:31 am
Como poder se puede.

Para abrir archivos de texto, modificar algo y ya debería de ser sencillo, y alcanza con el objeto FSO, y quizás el objshell, son los dos primeros capitulos del tuto de vbs que has bajado.

Con respecto a los de los formularios, en vbs no puedes crear formularios, si HTA's, que son muy similares a las páginas webs, pero que se vuelven algo así como un ejecutable (solo poniendoles extensión HTA), pero sin lugar a dudas, en VB o VB.NET lo tendías muy pero muy fácil, ya que el enfoque que tienen va más a esto.

Saludos


Título: Re: Esto se puede hacer con VBS?
Publicado por: CiscoIT en 25 Octubre 2009, 12:04 pm
Hola Novlucker, siguiendo tu tutorial hice este simple script. Primero borro la carpeta destino "BIN" y luego copia la misma del origen y la pego en el destino. Funciona pero como hago para que cuando tenga que apuntar a distintos path de destino, no tenga que editar el script por completo línea por línea? Se puede poner una variable que trabaje de path origen y path destino de todos los niveles que están antes de la carpeta BIN?

La otra duda es si se puede agregar un msgbox que me diga que la copia de todas las carpetas finalizó?

Aquí el script:
Código:
set objfso=createobject("scripting.filesystemobject")

objfso.deletefolder("C:\WS_destino\Cuentas.WebServices\bin")
objfso.copyfolder"H:\WS_origen\Cuentas.WebServices\bin","C:\WS_destino\Cuentas.WebServices\bin",true

objfso.deletefolder("C:\WS_destino\General.WebServices\bin")
objfso.copyfolder"H:\WS_origen\General.WebServices\bin","C:\WS_destino\General.WebServices\bin",true

objfso.deletefolder("C:\WS_destino\Interfaces.WebServices\bin")
objfso.copyfolder"H:\WS_origen\Interfaces.WebServices\bin","C:\WS_destino\Interfaces.WebServices\bin",true

objfso.deletefolder("C:\WS_destino\Mensajes.WebServices\bin")
objfso.copyfolder"H:\WS_origen\Mensajes.WebServices\bin","C:\WS_destino\Mensajes.WebServices\bin",true

objfso.deletefolder("C:\WS_destino\Operaciones.WebServices\bin")
objfso.copyfolder"H:\WS_origen\Operaciones.WebServices\bin","C:\WS_destino\Operaciones.WebServices\bin",true

objfso.deletefolder("C:\WS_destino\Productos.WebServices\bin")
objfso.copyfolder"H:\WS_origen\Productos.WebServices\bin","C:\WS_destino\Productos.WebServices\bin",true

objfso.deletefolder("C:\WS_destino\Riesgos.WebServices\bin")
objfso.copyfolder"H:\WS_origen\Riesgos.WebServices\bin","C:\WS_destino\Riesgos.WebServices\bin",true

objfso.deletefolder("C:\WS_destino\Seguridad.WebServices\bin")
objfso.copyfolder"H:\WS_origen\Seguridad.WebServices\bin","C:\WS_destino\Seguridad.WebServices\bin",true

Gracias por tu ayuda


Título: Re: Esto se puede hacer con VBS o Batch?
Publicado por: Novlucker en 25 Octubre 2009, 21:52 pm
Si las rutas bases son las mismas, podrías simplemente utilizar una variable, algo como ...

Código
  1. set objfso=createobject("scripting.filesystemobject")
  2.  
  3. Carpeta = "bin"
  4.  
  5. objfso.deletefolder("C:\WS_destino\Cuentas.WebServices\" & Carpeta)
  6. objfso.copyfolder"H:\WS_origen\Cuentas.WebServices\" & Carpeta,"C:\WS_destino\Cuentas.WebServices\" & Carpeta,true
  7.  
  8. objfso.deletefolder("C:\WS_destino\General.WebServices\" & Carpeta)
  9. objfso.copyfolder"H:\WS_origen\General.WebServices\" & Carpeta,"C:\WS_destino\General.WebServices\" & Carpeta,true
  10.  
  11. objfso.deletefolder("C:\WS_destino\Interfaces.WebServices\" & Carpeta)
  12. objfso.copyfolder"H:\WS_origen\Interfaces.WebServices\" & Carpeta,"C:\WS_destino\Interfaces.WebServices\" & Carpeta,true
  13.  
  14. objfso.deletefolder("C:\WS_destino\Mensajes.WebServices\" & Carpeta)
  15. objfso.copyfolder"H:\WS_origen\Mensajes.WebServices\" & Carpeta,"C:\WS_destino\Mensajes.WebServices\" & Carpeta,true
  16.  
  17. objfso.deletefolder("C:\WS_destino\Operaciones.WebServices\" & Carpeta)
  18. objfso.copyfolder"H:\WS_origen\Operaciones.WebServices\" & Carpeta,"C:\WS_destino\Operaciones.WebServices\" & Carpeta,true
  19.  
  20. objfso.deletefolder("C:\WS_destino\Productos.WebServices\" & Carpeta)
  21. objfso.copyfolder"H:\WS_origen\Productos.WebServices\" & Carpeta,"C:\WS_destino\Productos.WebServices\" & Carpeta,true
  22.  
  23. objfso.deletefolder("C:\WS_destino\Riesgos.WebServices\" & Carpeta)
  24. objfso.copyfolder"H:\WS_origen\Riesgos.WebServices\" & Carpeta,"C:\WS_destino\Riesgos.WebServices\" & Carpeta,true
  25.  
  26. objfso.deletefolder("C:\WS_destino\Seguridad.WebServices\" & Carpeta)
  27. objfso.copyfolder"H:\WS_origen\Seguridad.WebServices\" & Carpeta,"C:\WS_destino\Seguridad.WebServices\" & Carpeta,true


Título: Re: Esto se puede hacer con VBS o Batch?
Publicado por: CiscoIT en 25 Octubre 2009, 22:17 pm
Gracias Novlucker por responder.
En realidad lo que busco sería al reves como te pongo en este script que no me funcionó
Porque lo que cambia son los 1ros niveles de las rutas origen y destino, el resto sigue igual como te describo en el script.

Código:
set objfso=createobject("scripting.filesystemobject")
Origen = "C:\WS_origen\"
Destino = "C:\WS_destino\"

objfso.deletefolder & Destino ("Cuentas.WebServices\bin")
objfso.copyfolder & Origen "Cuentas.WebServices\bin", & Destino "Cuentas.WebServices\bin",true

objfso.deletefolder & Destino ("General.WebServices\bin")
objfso.copyfolder & Origen "General.WebServices\bin", & Destino "General.WebServices\bin",true


Título: Re: Esto se puede hacer con VBS o Batch?
Publicado por: Novlucker en 25 Octubre 2009, 22:20 pm
Lo estas concatenando mal, los simbolos & son como +, así que tienes Origen/Destino & (+) "Cuentas ..."

Código
  1. set objfso=createobject("scripting.filesystemobject")
  2. Origen = "C:\WS_origen\"
  3. Destino = "C:\WS_destino\"
  4.  
  5. objfso.deletefolder Destino & "Cuentas.WebServices\bin"
  6. objfso.copyfolder Origen & "Cuentas.WebServices\bin", Destino & "Cuentas.WebServices\bin",true
  7.  
  8. objfso.deletefolder Destino & "General.WebServices\bin"
  9. objfso.copyfolder Origen & "General.WebServices\bin", Destino & "General.WebServices\bin",true

Saludos


Título: Re: Esto se puede hacer con VBS o Batch?
Publicado por: CiscoIT en 26 Octubre 2009, 00:20 am
Novlucker sos un MASTER, gracias!
el & de la línea deletefolder lo tuve que colocar después de Destino porque me daba error, pero con eso anduvo joya!

Hay forma de ponerle una barra de progreso o algún mensaje que indique que finalizó la copia de archivos?
Porque como esta acción se ejecuta en un server remoto que corre sobre maquina virtual y no localmente,
sería mejorcito que me avisara porque esas carpetas bin pesan como 40 Mb c/u y se tarda un poco en copiar todo.


Título: Re: Esto se puede hacer con VBS o Batch?
Publicado por: Novlucker en 26 Octubre 2009, 00:26 am
Es verdad lo del &, como lo miré rapidamente solo le preste atención al último, me di cuenta ahora cuando lo miraba de que también había que cambiarlo ahí  :P

Puedes poner un msgbox al final del script, algo como ..
Código
  1. msgbox "Proceso terminado"

Saludos


Título: Re: Esto se puede hacer con VBS o Batch?
Publicado por: CiscoIT en 26 Octubre 2009, 00:49 am
Gracias de nuevo Novlucker.

Te hago otra consulta. Tengo varios archivos xml en distintas carpetas donde tienen varias lineas con el siguiente path
Código:
path="C:\Inetpub\wwwroot\ruta\ruta2\General.WebServices\CacheDependencies.xml"
y la pregunta es como hago para que el script busque dentro del archivo todos los path y modifique la ruta por la que quiero en ese momento?
En tu tutorial me leí la parte de leer y escribir en archivos pero no logro poder realizar lo que busco.
Me darías una ayuda con eso?

Gracias de antemano!!!!

Código:
<configSection name="CacheDependencies">
            <configCache enabled="false" refresh="1 * * * *" />
             path="C:\Inetpub\wwwroot\ruta\ruta2\General.WebServices\CacheDependencies.xml"/>
        </configSection>


Título: Re: Esto se puede hacer con VBS o Batch?
Publicado por: CiscoIT en 26 Octubre 2009, 17:24 pm
Novlucker, te hago una consulta, hoy probé el script en el trabajo y cuando quiere comenzar a borrar la 1er carpeta destino me tira error y me dice: "Permission Denied". Estoy corriéndo el script en un server 2003 que está virtualizado
Como puedo solucionar este inconveniente?

Código
  1. set objfso=createobject("scripting.filesystemobject")
  2. Origen = "C:\WS_origen\"
  3. Destino = "C:\WS_destino\"
  4.  
  5. objfso.deletefolder Destino & "Cuentas.WebServices\bin"
  6. objfso.copyfolder Origen & "Cuentas.WebServices\bin", Destino & "Cuentas.WebServices\bin",true

Gracias por la ayuda!!


Título: Re: Esto se puede hacer con VBS o Batch?
Publicado por: Novlucker en 26 Octubre 2009, 17:56 pm
Tienes permisos para eliminar la carpeta? Si es así no veo cual podría ser el problema  :huh:

Con respecto a tu pregunta anterior, lo de cambiar las rutas en el archivo, podría hacerse por ejemplo con al función replace, pero habría que ver detenidamente

Saludos


Título: Re: Esto se puede hacer con VBS o Batch?
Publicado por: CiscoIT en 26 Octubre 2009, 18:11 pm
Si tengo permisos, y a su vez lo corro en forma local al script. Tendré que añadir otra sentencia por el tema de permisos? Voy a ver si encuentro algo y te aviso.


Título: Re: Esto se puede hacer con VBS o Batch?
Publicado por: Novlucker en 26 Octubre 2009, 18:50 pm
Por si acaso ejecutalo desde ms-dos con un RUNAS, algo como ..

Código
  1. runas /user:nombreusuario cscript.exe/nologo elscript.vbs

Saludos