Powershell: creación y eliminación de snapshots Hyper-V

índice

En un entorno virtual, es una muy buena práctica tener controlados los snapshots de nuestras máquinas virtuales. A diferencia de VMWare, en Hyper-V són puntos de control que se crean muy rápidamente y se consolidan de la misma forma. Es per ello que es una muy buena opción a contemplar como complemento de los backups.

En un caso concreto yo lo uso como estrategia de prevención contra Cryptolockers y ransomware varios haciendo que cada día, antes de que las empresas entren a trabajar se cree un punto de control. Para ello uso una tasca programada con el siguiente script:

Get-VM  * | checkpoint-vm -SnapshotName "[Nombre que le queramos dar] $((Get-Date).toshortdatestring())" –AsJob

Con este script en powershell, cada día se nos ejecutará un punto de control de TODAS nuestras máquinas virtuales. Podemos acotar la búsqueda o filtrar con el comando:

Get-VM –Name [Nombre de la M]

y que podremos filtrar. Por ejemplo: si todas nuestras máquinas virtuales se llaman SRV-[nombre] pero algunas son OLDSRV y solo queremos snapshots de las primeras, podemos hacer:

Get-VM SRV-*

Hecho esto, el siguiente paso es controlar cuantos snapshots queremos guardar. En mi caso solamente guardo un día puesto que como he dicho antes, es una medida de control contra los ransomware, no una backup. Para ello, uso el script siguiente:

Get-VMSnapshot –VMName [nombre_MV]* | Where-Object {$_.CreationTime -lt (Get-Date).AddDays(-1) } | Remove-VMSnapshot

Donde:

  • (Get-Date).AddDays(-1) son los días que quiero almacenar. En mi caso 1. Este valor lo podéis cambiar por el que queráis.
  • [nombre_MV]* es una string del nombre, como si fuera un sufijo. Es para filtrar.

De esta forma, puedo controlar que si nos entra algo que nos engorrine el sistema y es crítico, podemos en tan solo dos clics de ratón, volver al inicio del día. Eso si, para clientes o sistemas más críticos, uso el script varias veces al día y los elimino todos al día siguiente. La secuencia de comandos de la tasca programada es la siguiente:

powershell.exe –ExecutionPolicy Bypass –file “[ruta_del_script]”

Tip: crear carpetas protegidas por contraseña en Windows 7

A veces mucha gente me pregunta como puede crear un directorio o carpeta bajo Windows protegida por contraseña, y me quedo con cara de pasmarote pensando «botón derecho -> proteger por contraseña» pero por lo que se ve, no funciona del todo :p Así que os presento un pequeño truco para hacerlo mediante los ficheros por lotes (los ficheros bat).

  • Creamos una carpeta nueva
  • Dentro de ella, creamos un nuevo documento (botón derecho -> Nuevo -> Documento de texto) lo abrimos y dentro escribimos el siguiente código:
cls
@ECHO OFF
title Folder Privada
if EXIST “Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}” goto UNLOCK
if NOT EXIST Privada goto MDLOCKER
:CONFIRM
echo Quieres proteger tu directorio? (S/N)
set/p “cho=>”
if %cho%==S goto LOCK
if %cho%==s goto LOCK
if %cho%==n goto END
if %cho%==N goto END
echo Error. Contesta SI (s/S) o NO (n/N).
goto CONFIRM
:LOCK
ren Privada “Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}”
attrib +h +s “Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}”
echo Carpeta protegida
goto End
:UNLOCK
echo Password para desproteger
set/p “pass=>”
if NOT %pass%== ENTER YOUR PASSWORD HERE goto FAIL
attrib -h -s “Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}”
ren “Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}” Privada
echo Carpeta desprotegida satisfactoriamente
goto End
:FAIL
echo Password no valido
goto end
:MDLOCKER
md Privada
echo Carpeta Privada creada correctamente
goto End
:End

IMPORTANTE: En la línea 23, veréis que hay un sitio que pone ENTER YOUR PASSWORD HERE que es donde deberéis escribir vuestra contraseña para proteger la carpeta.

  • Guardamos el fichero con extensión .bat con el nombre que queramos.
  • Entonces ejecutamos el fichero [nombre_que_sea].bat y éste nos generará otra carpeta que se llama Privada donde pondremos lo que queramos dentro (que posteriormente protegeremos.)
  • Una vez guardado el contenido en su interior, volvemos a hacer doble clic sobre el fichero [nombre_que_sea].bat y se nos abrirá una ventana cmd que nos preguntará si la queremos proteger (a lo que deberemos responder que si pulsando la tecla ‘s’) y automáticamente la protegerá y la ocultará.

  • Para volver a acceder a ella, ejecutamos de nuevo el fichero [nombre_que_sea].bat y le ponemos el password que previamente hemos escrito en el fichero.

¡TACHÁN! ya tenemos un método para proteger las carpetas.

Via | Google

Tip: Outlook 2003/2007: No se puede abrir la ventana de Outlook (y van 2)

El otro día ya comenté en este post como podemos hacer que MS Outlook deje de reiniciarse constantemente. Pues aquí os dejo el comando definitivo para cuando Outlook no quiere iniciarse.

  • Vamos a inicio -> ejecutar
  • Escribimos outlook.exe /resetnavpane

Este comando prácticamente soluciona todos y cada uno de los problemas de Outlook y lo que hace es crear un nuevo archivo con las carpetas del panel de exploración predeterminado, perdiendo de esta manera cualquier personalización que hayamos hecho en nuestro Outlook.

La otra opción a probar (no siempre funciona) es eliminar el archivo nombre_perfil.xml de la carpeta de archivos de nuestro perfil de usuario en Windows. Para acceder a ella:

  • Inicio -> Panel de Control -> Correo
  • Pulsamos el botón que nos dice «Abrir carpeta». Aquí tendremos almacenado nuestro archivo pst y nuestros archivos xml.

¿La causa del error? Ni los de Microsoft lo saben.

Tip: Solucionar problema de Outlook que se reinicia constantemente

A veces sucede que MS Outlook no quiere iniciarse ni en modo normal ni en modo a prueba de fallos dándonos un error como el que muestro al principio del post, y entrando en lo que parece un bucle infito. Para solucionar este error debemos antes de nada probar lo siguiente abriendo el menu «Ejecutar» de Windows:

  • Inicio -> Ejecutar -> outlook.exe /safe nos inciará Outlook sin extensiones, sin Panel de lectura y sin personalizaciones de barra de herramientas.
  • Inicio -> Ejecutar -> outlook.exe /safe: 1 nos iniciará Outlook con el Panel de lectura desactivado
  • Inicio -> Ejecutar -> outlook.exe /safe: 2 Iniciará Outlook sin hacer comprobaciones de correo, es decir, sin hacer el «Enviar y Recibir» de inicio
  • Inicio -> Ejecutar -> outlook.exe /safe: 3 Iniciará Outlook con las extensiones desactivadas
  • Inicio -> Ejecutar -> outlook.exe /safe: 4 Iniciará Outlook sin cargar los archivos outcmd.dat (barras de herramientas personalizadas) y *.fav.

Este problema aun no he podido detectar al 100% porqué ocurre pero suele venir después de un culegue (y posterior reinicio) de la suite Office y del Sistema Operativo. En el caso de que no nos arranque Outlook con ninguno de estos comandos, lo que haremos será lo siguiente:

  • Mediante el explorador de ficheros, si tenemos Windows XP iremos al menú Herramientas -> Opciones de carpeta y en la pestaña Ver activaremos la opción Mostrar todos los archivos y carpetas ocultos
  • Navegaremos al directorio C:\Documents & Settings\[nombre_de_usuario]\Application Data\Microsoft\Outlook
  • Dentro encontraremos unos ficheros con extensiones *.srs, *.nks y *xml. Cortamos estos ficheros y los copiamos en una carpeta fuera de este directorio (por ejemplo en el Escritorio).
  • Iniciamos Outlook y, en teoria nos tendría que funcionar sin ningún problema

Lo que si que he visto es que cuando sucede este error es porqué hay alguno de estos 3 ficheros que no se crea correctamente y da un conflicto. Entonces, vaciando el directorio de estos ficheros, Outlook no los detecta y los genera de nuevo, creando así unos ficheros que no estan corrompidos ni dañados ni generan conflicto alguno.

Aun aplicando esta solución ¿os ha dado algún problema el Outlook? ¿Habéis podido solucionarlo correctamente?

Tip: Múltiples conexiones Terminal Server en Windows 7

Un dia me encontré que mientras estaba conectado a mi HTPC con Windows 7 (¿que passa?  ^_^ a mi me funciona muy bien), decidí abrir la conexión Terminal Server para poder conecatarme mediante DynDNS y poder gestionat mi JDownloader en mi escritorio remoto y …. ¡tachán! Windows 7 no deja tener 2 usuarios conectados ni por Terminal Server ni por nada. Por lo que leí, se trata de una limitación hecha a propósito por parte de Microsoft.

Al final y googleando un poco (señores de la RAE, una palabra más a tener en cuenta) encontré la solución tanto para la versión 32 bits, como para la de 64 bits.

Se trata de sustituir el fichero termsrv.dll. Una vez hecho esto, hacemos lo siguiente:

  • Para la versión 32 bits:

Inicio -> ejecutar y escribimos

%WINDIR%\system32\termsrv.dll y lo sustituimos

  • Para la versión 64 bits:

Inicio -> ejecutar y escribimos

%WINDIR%\SysWOW64\termsrv.dll

NOTA IMPORTANTE: Debemos renombrar el fichero 32_termsrv.dll por sólo termsrv.dll

Ahora ejecutamos el install.cmd y ¡listo! La única cosa que nos quedará por hacer es crear un usuario nuevo y ponerlo en el grupo de TerminalServer 🙂

Archivo comprimido con los dos dll y el cmd | Descárgalo aquí Si no funciona, mandadme un mail y lo reviso

 

Solucionar «Error en el servicio de perfil de usuario al iniciar sesión» en Windows Vista

Normalmente, casi todos los errores que salen en Windows Vista se pueden solucionar mediante:

  • un chkdsk /f/r (completo) puesto que el sistema, como si de una forma de masoquismo se tratara, se autolesiona él mismo.
  • un format c: /q (como los de antaño)

Seguro que hay más formas de solucionar los problemas pero en Windows si no es una de las anteriores se pierde el tiempo. Esta claro que estoy exagerando un poco, aunque creo que no estoy tan equivocado. En fin … A lo que vamos.

Puede ser que en Windows Vista, al iniciar el pc/portátil, no nos acceda al Escritorio (o cargue nuestro perfil de usuario) y no salga un mensaje que nos diga «Error en el servicio de perfil de usuario al iniciar sesión«. Según el Knowledgment Base de Microsoft, nos dice que se su causa es:

Este problema puede producirse si el perfil de usuario se elimina manualmente (¿?) mediante el uso de la línea de comandos o mediante el Explorador de Windows. Un perfil que se elimine manualmente no quita el identificador de seguridad (SID) de la lista de perfiles en el registro.

Si el SID (Security IDentifier) está presente, intentará cargar el perfil utilizando elProfileImagePathque señala a una ruta de acceso que no existe. Por lo tanto, no se puede cargar el perfil.

Es decir, por arte de magia nos hemos eliminado a nosotros mismos de los perfiles de usuario. ¿a qué mola? (¿entendéis lo que decía antes del masoquismo en Windows Vista?). La solución que dan es, como suele pasar en Windows, eliminar una clave del registro y reiniciar. Puede que así o nos cargamos aun más el sistema o por el contrario, se recupere el perfil de usuario de las backups. Pero existe otra solución, rápida, sencilla y sin (casi) ningún riesgo (en Windows no existe el factor «sin riesgo») y como no, deberemos tocar (un poquito) el registro de Windows. Los procesos a seguir son los siguientes:

  • Reiniciamos y pulsamos F8 para cargar el menu de arranque de Windows
  • Arrancamos en Modo Seguro
  • Accederemos a Windows en modo Administrador
  • Haremos Inicio -> Ejecutar
  • Escribiremos regedit y le daremos al Ejecutar

Aquí dentro vigilad lo que tocáis puesto que nos podemos cargar el sistema operativo enterito. Deberemos buscar la siguiente clave en el registro, expandiendo las diferentes ramas del mismo:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

Expandimos un poco la ventana de la derecha y veremos dos perfiles de usuario con el mismo nombre (p.ej. 000000-111111-222-333-4444) y uno de ellos terminará en .bak. Lo que se trata es de invertir la clave, es decir, cambiar la extensión .bak de una por la otra. Os pongo un ejemplo:

Siguiendo las imágenes siguientes, vemos las dos claves de registro

Modificamos (pulsando F2) el nombre de una y cambiamos .bak por .bak2. Vamos a la que no tiene extensión y le ponemos una extensión .bak

Eliminamos la extensión .bak2 dejando la clave sin extensión

Una vez hecho esto, cerramos el regedit, reiniciamos y ya no nos saldrá más el error y podremos acceder sin ningún problema a nuestra sesión de Windows Vista. Cierto es que este error me salió hace ya tiempo y lo solucioné haciendo un chkdsk del disco duro. Otros compañeros me han comentado que a base de reiniciar varias veces, se ha solucionado el problema (¿?). Si os dejáis aconsejar, en cuanto podáis quitaros el Vista y instalaros Windows 7 o Ubuntu.

No le tengo manía a Windows ni mucho menos. De hecho, uso tanto Ubuntu como Windows 7 y por motivos de faena, casi siempre tengo que lidiar con Windows XP o Windows Vista y la verdad, éste último no me gusta en absoluto.

Espero que os haya servido. Un saludo.