Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: ovichan en 13 Octubre 2012, 21:57 pm



Título: [Batch] Instalador selectivo de updates Windows
Publicado por: ovichan en 13 Octubre 2012, 21:57 pm
Hola a todos, el caso es que ya sabeis lo tedioso que puede resultar aplicar las updates de windows manualmente, o de forma automatica cuando su numero asciende a 700 revisiones, como es mi caso. El agente de updates de windows solo me requiere 78 para que este protegido por lo que solo quiero instalar esas. Para ello he utilizado este codigo, para listas todas las updates disponibles:

Código:
@Echo off
Title Instalador con lista
set ruta=F:\HDD negro\Utiles y programas\Programas De Microsoft\Microsoft_Updates\updates\

for /f %%i in ('dir /b /o:n "*kb*.msu"') do (

if not exist "updates_total.txt" (
echo %%i >> "updates_total.txt" )
)

::2 parte
for /f "tokens=1 delims=*" %%i in (updates.txt) do (find /i "%%i" "%ruta%updates_total.txt" >> "updates_instalar.txt"  )

El archivo updates.txt tiene un formato asi:

Código:
*KB2655992*
*KB2691442*
*KB2698365*
*KB3719985*
*KB2506212*
*KB2507618*
*KB2536276*
*KB3544893*
*KB2560656*
*KB2564958*

El caso es que find funciona bien, pero lo que devuelve en el archivo "updates_instalar.txt" tiene un formato muy raro, y yo esperaba que fuese simplemente el nombre de la revision, para posteriormente usar este archivo de texto en otro FOR, y las ejecute. El formato erroneo es este:

Código:
---------- F:\HDD NEGRO\UTILES Y PROGRAMAS\PROGRAMAS DE MICROSOFT\MICROSOFT_UPDATES\UPDATES\UPDATES_TOTAL.TXT
Windows6.1-KB2655992-x64.msu 

---------- F:\HDD NEGRO\UTILES Y PROGRAMAS\PROGRAMAS DE MICROSOFT\MICROSOFT_UPDATES\UPDATES\UPDATES_TOTAL.TXT
Windows6.1-KB2691442-x64.msu 

.....

Imagino que habra alguna manera de eliminar los encabezados esos.

Inicialmente pense que podria kizas, listar las updates que el agente de windows update te informa para instalar, pero no tengo ni idea de como se podria hacer, quizas con wmic. Lo que si he visto por la red es la manera de listar las updates instaladas...

Gracias de antemano.


Título: Re: [Batch] Instalador selectivo de updates Windows
Publicado por: Eleкtro en 14 Octubre 2012, 00:14 am
La que estás liando...  :xD

A ver, en el archivo updates.txt tienes listadas las 75 updates que quieres instalar no? (Solamente las que no estén instaladas en el sistema de esas 75), pues entonces:

Código
  1. @Echo off
  2. Title Instalador automatico de actualizaciones de Windows
  3.  
  4. :: By Elektro H@cker
  5.  
  6. PUSHD "F:\HDD negro\Utiles y programas\Programas De Microsoft\Microsoft_Updates\updates"
  7.  
  8. wmic qfe get HotFixID > "%TEMP%\WIN_Updates.tmp"
  9.  
  10. FOR /F "usebackq" %%@ IN ("UPDATES.TXT") DO (
  11. FIND "%%@" "%TEMP%\WIN_Updates.tmp" >NUL || (
  12. Echo: Instalando update: %%@
  13. (WUSA ".\%%@" /quiet /norestart && (Echo: OK!) || (Echo: ERROR)) | MORE
  14. )
  15. )
  16.  
  17. Pause&Exit
  18.  
  19. REM O PARA INSTALAR (SELECTIVAMENTE) TODA LA CARPETA...
  20. REM
  21. REM PUSHD "F:\HDD negro\Utiles y programas\Programas De Microsoft\Microsoft_Updates\updates"
  22. REM wmic qfe get HotFixID > "%TEMP%\WIN_Updates.tmp"
  23. REM FOR /R %%@ IN (*.MSU) DO (
  24. REM FIND "%%@" "%TEMP%\WIN_Updates.tmp" >NUL || (
  25. REM Echo: Instalando update: %%@
  26. REM (WUSA "%%@" /quiet /norestart && (Echo: OK!) || (Echo: ERROR)) | MORE
  27. REM )
  28. REM )
  29. REM Pause&Exit

Saludos



EDITO: se me olvidaba comentar que ajustes el formato de la lista "updates.txt" con este comando:
Código
  1. WUSA ".\%%@"
Quizás le falte añadir un "%%@.exe"

Saludos


Título: Re: [Batch] Instalador selectivo de updates Windows
Publicado por: ovichan en 14 Octubre 2012, 00:33 am
Jeje cuando no se sabe se buscan mil soluciones... aunque sean retorcidas  ;-). Lo que tengo en el updates.txt son las actualizaciones que me sugiere windows update. Como no se sacar el listado(no el de las que si estan instaladas) desde el gestor de windows update, he copiado a mano el numero de kb, lo he metido en un txt. Da igual que instale de nuevo las updates ya que el sistema detecta si la revision ya esta instalada. No se si me explico.

Con wmic qfe get HotFixID sacas el listado de las ya instaladas, pero no hay algun comando para que me liste las sugeridas por windows update?

Pero antes de eso...  el more si no me acuerdo mal que me lo explicaste es como un assert no??? Si le llega un codigo de error elige entre OK y ERROR??

El uso de @ es indiferente o tiene alguna aplicacion especial en este caso??

Esta parte tampoco la entiendo
Código:
FIND "%%@" "%TEMP%\WIN_Updates.tmp" >NUL || (

Lo interpreto como encuentra el numero de kb en el archivo temporal de las updates instaladas y lo redireccionas a NUL Ó ....


Título: Re: [Batch] Instalador selectivo de updates Windows
Publicado por: Eleкtro en 14 Octubre 2012, 01:10 am
Con wmic qfe get HotFixID sacas el listado de las ya instaladas, pero no hay algun comando para que me liste las sugeridas por windows update?
No, no se puede, al menos con puro Batch.

Hay un programa CLI parecido al WUSA con el que creo que si que puedes hacerlo, pero es de pago, y no intentes buscarle un crack, es un soft muy underground, de todas formas no recuerdo el nombre de la aplicación, la versión básica era muy mala y la despedí :silbar:. Acabo de recordar que lo encontré en el foro software CLI de la página oficial de AutoIt.

more es como un assert no???
Uf, para nada, tienes que dejar de buscarle el punto "C" a Batch, porque no lo tiene.

Cita de: CMD
Código:
C:\Users\Administrador\Desktop>more /?
Muestra la información pantalla a pantalla.

No tiene más uso

Yo lo uso como un un "trick" (o truco) para insertar una línea en blanco, el "MORE" se procesa en esa línea falle o no falle

Prueba este comando directamente en consola para entenderlo mejor:
Código
  1. CMD /Q /C "For %@ in (a b c d e f) do (Echo %@ | MORE | @MORE | @MORE | @MORE | @MORE | @MORE | @MORE | @MORE | @MORE | @MORE)"
o:
Código
  1. dir /B "%WINDIR%" |MORE
PD: Te ahorras bastante escritura de código para añadir líneas de "Echo"

Si le llega un codigo de error elige entre OK y ERROR??
Si, pero por los operadores && y ||, no por el MORE.

El uso de @ es indiferente o tiene alguna aplicacion especial en este caso??
es indiferente, me gustan las arrobas todolocas :rolleyes:

Esta parte tampoco la entiendo
Código:
FIND "%%@" "%TEMP%\WIN_Updates.tmp" >NUL || (

Lo interpreto como encuentra el numero de kb en el archivo temporal de las updates instaladas y lo redireccionas a NUL Ó ....
Pues sencillamente si, lo redirecciona para no mostrar el formato molesto del que hablabas, pero el código de error de FIND es lo que importa y lo que se procesa en esa línea

PD: Voy a tener que empezar a cobrarte xD
Un saludo.


Título: Re: [Batch] Instalador selectivo de updates Windows
Publicado por: ovichan en 14 Octubre 2012, 01:21 am
Jajaja pues esta la cosa como para pagar jajaja... ademas hoy estoy disgustao que un disco duro con un proyecto de anime se me ha borrao por culpa de una movida...

Bueno gracias por todo y un saludote.

PD: Como metodo guarri al final he hecho esto esperando respuesta:

Código:
@Echo off
Title Instalador con lista
set ruta=F:\HDD negro\Utiles y programas\Programas De Microsoft\Microsoft_Updates\updates\


for /f "tokens=1 delims=*" %%i in (updates.txt) do (call :start %%i)
cls
echo La instalacion ha finalizado. & Pause>nul


:start

if exist "Windows6.1-%1-v3-x64.msu" (
wusa /quiet /norestart Windows6.1-%1-v3-x64.msu & echo La actualizacion %1 se ha instalado.
)
if exist "Windows6.1-%1-v2-x64.msu" (
wusa /quiet /norestart Windows6.1-%1-v2-x64.msu & echo La actualizacion %1 se ha instalado.
)
if exist "Windows6.1-%1-x64.msu" (
wusa /quiet /norestart Windows6.1-%1-x64.msu & echo La actualizacion %1 se ha instalado.
)


Título: Re: [Batch] Instalador selectivo de updates Windows
Publicado por: ciberbang en 22 Abril 2015, 20:19 pm
Alguien lo a logrado? podrian subir el codigo completo?. Gracias