Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: zelarra en 9 Octubre 2023, 18:22 pm



Título: Archivo bat para borrar una entrada de registro con comodines
Publicado por: zelarra en 9 Octubre 2023, 18:22 pm
Hola. En primer lugar, gracias por aceptarme.

En segundo lugar, quería pedir ayuda, pues estoy intentando crear un archivo bat para borrar una entrada del registro utilizando comodines.

El problema que tengo es que una de las carpetas de la ruta suele cambiar con cada actualización del programa (en este caso, Skype), lo que me obliga o bien a modificar el reg cada vez que se actualice, o bien crear un bat con comodines que me permita saltar ese inconveniente.

He encontrado un código en Internet, que he adaptado para mi caso, pero no consigo que me funcione. No sé qué puedo estar haciendo mal, pues también he probado a ejecutarlo como administrador.

Código:
@echo off

set "clave=HKLM\SOFTWARE\Classes\PackagedCom\Package\Microsoft.SkypeApp*\Class\{776DBC8D-7347-478C-8D71-791E12EF49D8}"

for /f "tokens=*" %%a in ('reg query "%clave%"') do (
reg delete "%%a" /f
)

echo La eliminación de claves ha terminado.

¿Alguien me puede ayudar?

Muchas gracias.


Título: Re: Archivo bat para borrar una entrada de registro con comodines
Publicado por: EdePC en 10 Octubre 2023, 15:20 pm
Tengo entendido que no se pueden usar comodines para Reg Query de esa manera, tendrías que hacerlo en dos pasos:

1. Busca en la Clave superior la SubClave que tiene el comodín, con /F se especifica esa SubClave

Código
  1. Reg Query HKLM\SOFTWARE\Classes\PackagedCom\Package /F Microsoft.SkypeApp

2. Puedes usar Find o FindStr para limpiar la salida del comando anterior y quedarte solo con la línea respuesta que te interesa

Código
  1. Reg Query HKLM\SOFTWARE\Classes\PackagedCom\Package /F Microsoft.SkypeApp | FindStr Microsoft.SkypeApp

Con eso ya tendrías la parte de la Clave con comodín resuelta y solo te quedaría utilizarla para encadenarla con la otra parte y quede completa, por ejemplo puedes crear un Batch para hacer la prueba primero siempre con un simple Reg Query para ver si va a trabajar bien y no malograr el registro:

Código
  1. For /F %%G In ('HKLM\SOFTWARE\Classes\PackagedCom\Package /F Microsoft.SkypeApp ^| FindStr Microsoft.SkypeApp') Do Reg Query %%G\Class\{776DBC8D-7347-478C-8D71-791E12EF49D8}

Si el resultado es satisfactorio ya puedes reemplazar el último Reg Query por Reg Delete:

Código
  1. For /F %%G In ('HKLM\SOFTWARE\Classes\PackagedCom\Package /F Microsoft.SkypeApp ^| FindStr Microsoft.SkypeApp') Do Reg Delete %%G\Class\{776DBC8D-7347-478C-8D71-791E12EF49D8} /F

Otra opción es llamar a PowerShell que es más robusto y sencillo para tu caso porque soporta comodines directamente:

Código
  1. @Echo Off
  2. Set "clave=HKLM:\SOFTWARE\Classes\PackagedCom\Package\Microsoft.SkypeApp*\Class\{776DBC8D-7347-478C-8D71-791E12EF49D8}"
  3. PowerShell Remove-Item %clave% -Recurse
  4. Echo La eliminacion de claves ha terminado.


Título: Re: Archivo bat para borrar una entrada de registro con comodines
Publicado por: zelarra en 10 Octubre 2023, 20:22 pm
Hola, acabo de encontrar la solución.

He creado un archivo bat, con este código:

Código:
$partialKeyName = "Microsoft.SkypeApp"
$fullKeyPath = "HKLM:\SOFTWARE\Classes\PackagedCom\Package"

# Getting all subkeys
try {
$subkeys = Get-ChildItem -Path $fullKeyPath -Recurse | Where-Object { $_.PSChildName -like "$partialKeyName*" }
} catch {

exit
}

# Looping through the subkeys and delete the specific subkey
foreach ($key in $subkeys) {
$classSubKey = $key.PSParentPath + "\" + $key.PSChildName + "\Class\{776DBC8D-7347-478C-8D71-791E12EF49D8}"
try {
Remove-Item -Path $classSubKey -ErrorAction Stop

} catch {


}
}

Y luego un archivo vbs para ejecutarlo:

set cmd = createobject("wscript.shell")
cmd.run "powershell.exe -ExecutionPolicy Bypass -File D:\Tecnologia\Skype.ps1", vbHide
Set cmd = nothing

Por último, he creado una tarea programada para ejecutar el vbs al iniciar el sistema, y arreglado.

Muchas gracias por las sugerencias.

Un saludo.