Planeta Sysadmin

de sysadmins para sysadmins

April 16, 2019

soyadmin.com

Libro: Fundamentos de Programación (C y Java)

Título: FUNDAMENTOS DE LA PROGRAMACIÓN (C y Java)
Autor:
Administración de Sistemas Informáticos
Páginas: 260 Páginas
Tamaño: 2.2 MB
Fomato: PDF

Contenido:

En este trabajo se recogen los Apuntes de Fundamentos de Programación Primer Curso del Ciclo de Grado Superior de ASI (Administración de Sistemas Informáticos).

La relación de temas tratados en este libro es la siguiente:
Tema I:
se introducen los conceptos de algoritmo, programa, ordenador,.. Se explica el funcionamiento y componentes básicos del ordenador, la codificación y operaciones con números binarios y el proceso de creación de aplicaciones y programas así como los distintos tipos de lenguajes y técnicas de programación.

Tema II: las fases de análisis y diseño del ciclo de vida. Introducción a los diagramas de flujo, pseudocódigo y UML.

Tema III: se explica el origen, estructura y funcionamiento básico de Java. Se cubren cuestiones sobre variables, tipos de datos operadores y el uso de la clase Math. Incluye dos apéndices en los que se explica la configuración y funcionamiento básico de Eclipse y Netbeans.

Tema IV: uso de las instrucciones if, switch, while y for, para crear estructuras de control de flujo.

Tema V: uso de las estructuras fundamentales de datos. En concreto el uso de Arrays y de Strings (textos); incluidos los métos de la clase String que facilitan la manipulación de textos. También se explica el envío de parámetros desde la consola del sistema (argumentos del sistema).

Tema VI: bases de la programación orientada a objetos en Java. Clases, objetos, atributos, métodos constructores. Clases estáticas. Métodos finalize,…

Tema VII: segunda parte de las cuestiones relativas a Programación Orientada a Objetos. Se explican cuestiones sobre asociaciones entre clases, agregación, composición y herencia. Incluye los conceptos más críticos sobre POO: casting de clases, clases abstractas, modificador final, clases internas, interfaces, y el uso e importancia de la clase Object.

Tema VIII: control de errores. Excepciones.

by Mauro at April 16, 2019 01:39 PM

April 15, 2019

soyadmin.com

Currports, app para verificar que puertos se usan en nuestro equipo

CurrPorts es un aplicativo para Windows que nos permite verificar que puertos se están utilizando en nuestra PC y detallarnos que software o programa usa cada uno de estos puertos y una detallada información en nuestra máquina.

Este programa nos sirve como monitor Tcp/IP, listando todos los puertos en uso en ese instante, además de darnos detalles del software que usa ese puerto, tipo de protocolo, número de puerto, dirección ip, nombre del host remoto, etc.

Esto nos puede servir para identificar problemas de consumo de ancho de banda, un posible caso de virus o troyanos, al identificar un puerto extraño abierto se puede explorar y verificar si es necesario que este abierto o verificar que sea utilizado como backdoor de algún troyano o virus. Esta página muestra los puertos normalmente utilizados por troyanos o virus.

Además y algo muy interesante de este aplicativo es que nos permite cerrar conexiones TCP no deseadas, matar el proceso que abrió los puertos, y guardar toda esta información en un archivo HTML, archivo XML o txt.
CurrPorts también marcará con el color rosa aquellos puertos sospechosos o que están siendo usados por aplicaciones no identificadas.

CurrPorts puede ser descargado desde aquí

by Mauro at April 15, 2019 10:23 PM

April 12, 2019

soyadmin.com

Solución a: Thunderbird no elimina correos.

Un curioso error se presentó en una de las PC de la empresa, un user me indicaba que su thunderbird no le permitía eliminar correos. Entre mi pensaba que estaba realizando algo mal y me dirigí a su escritorio ya pensando que sería algo realmente sencillo de solucionar.

Para mi sorpresa, tal cual lo había comentado el usuario, cuando uno tocaba un correo y la tecla delete no pasaba nada, tampoco si le daba click derecho sobre el email y eliminar y tampoco hacía nada si dábamos click al botón de eliminar que aparece al abrir el correo.

La cosa se fue complicando aún más al verificar que dentro de la cuenta configurada no aparecía la Papelera. Donde se había ido!!!!??? Comprendí entonces que no se eliminaban los correos porque el problema estaba en la papelera o trash de esa cuenta.

La única manera que podía eliminar correos era hacer un “Mover a” Carpeta local – Papelera, ahí si me dejaba procesarlo y eliminarlo. Ya sabiendo que el problema venía por un error en la carpeta trash, me fui al sistema de carpetas de las cuentas, para eso vamos a la ayuda del Thunderbird:

Allí se nos abrirá una sección de ayudas e información de thunderbird donde podremos abrir la carpeta del perfil, haciendo click en Mostrar carpeta:

En la carpeta que se nos abre vamos a “Mail” y allí nos aparecerán las carpetas de cada una de las cuentas que tengamos configuradas en el thunderbird, al ingresar al correo, verifique que no existía una carpeta trash ni el archivo trash.msf que normalmente se encargan de deborarse los emails.

Como sabía que la papelera de la carpeta local era funcional procedi a copiar ambos archivos Trash y Trash.msf desde la carpeta local a la cuenta personal del usuario (esto debe hacerse con el thunderbird cerrado)

Y GUALA! reiniciando el Thunderbird pudimos ver que permitía eliminar correos correctamente.

by Mauro at April 12, 2019 03:49 PM

¿Como hacer que el GRUB recuerde el último SO ingresado?

El GRUB es nuestro gestor de arranque en Linux, nos permite seleccionar a que Sistema Operativo queremos ingresar o entrar. Esto es una especie de menú donde se listan todos los SO que tenemos instalados en la pc.
Cada vez que prendemos nuestra máquina el GRUB tiene un orden predefinido y arrancará aquel SO en primer puesto, pasados unos segundos.

Existe una manera de que el GRUB recuerde que SO elegimos en la anterior sesión y automáticamente ingrese a ese. Esto nos facilita el acceso y si ingresamos constantemente a nuestro sistema favorito no tengamos que estar al pendiente de seleccionarlo cada vez que entremos a la pc.

El proceso es sencillo:
1)
Primero backupeamos nuestro GRUB:

# sudo cp /etc/default/grub ~/grub.bak

2) Editamos la configuración de nuestro GRUB

# sudo nano /etc/default/grub

Editamos la linea:

GRUB_DEFAULT=saved

Al reemplazar el valor default por saved activamos el GRUB_SAVEDEFAULT que recordará nuestro sistema operativo elegido anteriormente.
Luego agregamos esta linea:

GRUB_SAVEDEFAULT=true

Aqui le indicamos que elija automáticamente el valor que guardo GRUB_SAVEDEFAULT

3) Terminamos aplicando la configuración realizada

# sudo update-grub

Si tenemos instalado el GRUB2 el proceso es exactamente el mismo:
Editamos el archivo de configuración

sudo nano /boot/grub2/grub.cfg

by Mauro at April 12, 2019 03:30 PM

April 11, 2019

soyadmin.com

LOCATE, buscando archivos en Linux

Locate es un comando básico que nos permite localizar archivos en Linux, funciona mediante una base de datos que se genera mediante todos los archivos del sistema. Funciona mucho más rápido que Find comando también utilizado en la búsqueda de archivos.

El funcionamiento es sencillo mediante patrones de nombres compara y busca en la base de datos que es generada automáticamente por el sistema, la cual se actualiza automáticamente mediante el cron o con el comando updatedb.

Para instalar en CentOS Rhel y Fedora:

# yum install rlocate

Para instalar en Debian, Ubuntu y Derivados:

# sudo apt-get install mlocate

Para utilizarlo, directamente colocamos:

# locate nombre_a_buscar

by Mauro at April 11, 2019 11:34 AM

April 10, 2019

soyadmin.com

Inxi, el comando Linux que nos dirá todo sobre nuestro Hardware

Inxi es un script o aplicación que nos brindará muchísima información sobre nuestro equipo, más referentemente al Hardware. Seguramente les habrá pasado que en algún momento necesitemos saber o conocer el procesador o la placa madre de nuestro server, hasta la controladora de salida de nuestra placa de red, etc.
Con Inxi podemos tener esos datos y más sobre el hardware que compone nuestra PC o Servidor.

Para Ejecutarlo tenemos varias maneras, dependiendo de lo que necesitemos conocer en nuestro sistema de hardware:

Un resumen del sistema:

# inxi

Motherboard:

# inxi -M

CPU o Procesador:

# inxi -C

RED

# inxi -N

Particiones

# inxi -l

Toda la info de nuestro equipo

# inxi -v7

Aparte de estos ejemplos podemos concatenarlos con:
-A Información de la tarjeta de sonido.
-C Información del CPU, incluyendo la velocidad de reloj del CPU.
-D Información del disco duro, no sólo el modelo.
-F Salida completa para inxi. Incluye todas las letras en mayúscula, además de -s y -n.
-G Información de la tarjeta gráfica (tarjeta, tipo, resolución, procesador glx, versión, etc.).
-I Información general: procesos activos, tiempo de actividad, memoria, cliente de IRC, versión inxi.
-l Particiones.
-n Información avanzada de la tarjeta de red. Igual que -Nn. Muestra la interfaz, velocidad, dirección MAC, estado, etc.
-N Información de la tarjeta de red. Con -x, muestra PCI BusID, número de puerto.

by Mauro at April 10, 2019 07:50 PM

April 09, 2019

soyadmin.com

Hablemos de SPAM en cPanel (Medidas básicas para detenerlo)

El spam es una de las amenazas a la que cualquier sysadmin esta combatiendo día a día y minuto a minuto. Una sola cuenta de correos de cualquiera de los clientes que posea el servidor que haga SPAM puede desencadenar una serie de problemas (algunos muy graves en nuestro servidor)

El SPAM produce:
– Pérdida de calidad en el servicio.
– Posible pérdida de correos electrónicos.
– Listado de IP del servidor en listas negras de spam.
– Embotellamiento o tráfico desmedido.
– Etc etc.

Un servidor sin configurar o con escasas medidas de seguridad puede ser vulnerado y terminar sin servicio de correos a causa de este problema de SPAM.

Detallaremos las acciones mínimas que todo Sysadmin debe tomar en su servidor Linux con cPanel, la mayoría estan presentes en Tweak Setings o dentro de la configuración de Exim.

1) Count mailman deliveries towards a domain’s Max hourly emails
Los correos enviados desde mailman en las listas de distribución se contabilizarán como enviados por el usuario.

2) Prefix “mail.” onto Mailman URLs
Los correos que se manden desde mailman tendrán el prejifo “mailman” en los logs. Para rastrear envíos desde la consola.

3) Max hourly emails
Coloca un máximo de correos por hora para cada dominio.

4) SpamAssassin spam filter
Software y filtro antispam, sencillo útil y efectivo.

5) Maximum percentage of failed or deferred messages a domain may send per hour
Si los emails que envia un cliente vienen rebotados en su mayoría se suspende el servicio temporalmente para el cliente/sitio que realiza el envío. Cada vez que se envia spam a una base de datos contratada la gran mayoría de correos exitentes posiblemente no exista entonces habrá muchisimos mails rebotados. Esta opción en un 35% será muy eficaz.

6) Utilizar RBL’s
Las RBL’s son entidades que regulan el tráfico de correos bloqueando servidores que envían spam. Si un dominio/ip esta listado en las RBL no se reciben/enviarán los correos.

Tenemos 2 RBL’s para activar en la sección RBLs:

RBL: bl.spamcop.net
RBL: zen.spamhaus.org

7) Query Apache server status to determine the sender of email sent from processes running as nobody
Si no tienen compilado Apache con MailHeaders cPanel consultará el servidor web con el fin de determinar el remitente.
Esto consumirá más recursos que utilizar las cabeceras X-PHP-Script

8) Trust X-PHP-Script headers to determine the sender of email sent from processes running as nobody
Si tenemos MailHeaders en uso (compilado a través de EasyApache) se utilizará X-PHP-Script para determinar el servidor remitente.

Esto es a nivel servidor/admin, más adelante dejaremos algunos tips para los usuarios, referentes a las medidas a tomar si eres dueño de un sitio.

by Mauro at April 09, 2019 11:07 PM

CloudAdmins.org

Barcelona OpenNebula TechDay – May 8, 2019

OpenNebula TechDay - Barcelona, Spain

https://www2.eventsxd.com/event/9187/opennebulatechdaybarcelonaspain/sessions

OPENNEBULA TECHDAY – BARCELONA

MAY 08, 2019 • BARCELONA

 

Containers 2.0 and beyond (LXD, RANCHER, KUBERNETES, UNIKERNELS,…)  

https://www2.eventsxd.com/event/9187/opennebulatechdaybarcelonaspain/sessions

SCHEDULE

OPENNEBULA WELCOME

Wednesday, May 08 – 10:00AM to 10:20AM
Michael Abdou

OPENNEBULA LXD CONTAINER SUPPORT OVERVIEW

Wednesday, May 08 – 10:20AM to 10:40AM

HUAWEI – A LOOK AT DISRUPTIVE TECHNOLOGIES AND WHAT’S TO COME

Wednesday, May 08 – 10:40AM to 11:00AM
Daniel Justicia

RANCHER LABS – YOUR OWN PAAS IN ACTION

Wednesday, May 08 – 11:30AM to 11:50AM
Raúl Sánchez

UDL – OPENNEBULA AND RESEARCH ENVIRONMENTS

Wednesday, May 08 – 11:50AM to 12:10PM
Ivan Teixido

ITHINKUPC – OPENNEBULA AND AWS

Wednesday, May 08 – 12:10PM to 12:30PM

CSUC – UNICORE PROJECT: UNIKERNEL POWER

Wednesday, May 08 – 12:30PM to 01:00PM
Jordi Guijarro

LUNCH

Wednesday, May 08 – 01:00PM to 02:00PM

OPENNEBULA HANDS-ON TUTORIAL

Wednesday, May 08 – 02:00PM to 05:00PM

This hands-on tutorial will give an overview of how OpenNebula is used to build and operate private clouds. The attendees will build, configure and operate their own OpenNebula cloud.

 

Register here -> https://www2.eventsxd.com/event/9187/opennebulatechdaybarcelonaspain/

by Cloudadmin JordiGuijarro at April 09, 2019 05:20 PM

April 08, 2019

RooTeando

Entrevista En Diferido 7: Ernesto(Elav).

Empezamos una nueva entrevista, el entrevistado es Ernesto ,alias Elav, podcaster, blogero,youtuber, linuxero y amante de la tecnología en general. 

 

Entrevista En Diferido: Antes de todo, gracias por participar y apoyar este proyecto. La primera pregunta es una presentación por parte del invitado, para que los lectores te puedan conocer un poco.

¿Te podrías presentar en unas líneas?

 

Ernesto: Hola José, y un saludo a todos los miembros del ...

April 08, 2019 06:10 AM

April 03, 2019

Sobre bits

Cómo utilizar Git con PowerShell (Parte 2): Git en Visual Studio Code

En la primera parte de esta entrada vimos cómo utilizar Git con PowerShell mediante el uso del fantástico módulo posh-git. Si bien esta forma de utilizar Git nos puede resultar muy útil en muchos casos, la realidad es que cuando más necesitaremos el uso de un control de versiones será cuando estemos realizando nuestros desarrollos en un editor. Es por eso que en esta segunda parte nos centraremos en el uso de Git en Visual Studio Code que, con permiso de PowerShell ISE, es el editor por excelencia de PowerShell.

Git con PowerShell: Git en Visual Studio Code

Qué necesitas antes de empezar

Como ni el uso de Visual Studio Code en PowerShell es la primera vez que aparece en este blog ni evidentemente el uso de Git en PowerShell tampoco, reciclaremos parte de lo visto en éstas entradas para sentar las bases de ésta (sería un poco incoherente que me gustara tanto la automatización y repetir el mismo trabajo en cada entrada, ¿no?).

Para continuar necesitaremos:

Inicializando un repositorio de Git desde Visual Studio Code

Tal y como hicimos en la primera parte lo primero que deberemos hacer será crear nuestro repositorio de código para empezar a juguetear con Git.

Lo primero que haremos será crear la carpeta de nuestro ‘proyecto’:

  • Abrimos Visual Studio Code.
  • Nos dirigimos a Explorer y pulsamos en Open Folder.
Abrir una carpeta en Visual Studio Code
  • Creamos la carpeta y pulsamos en Seleccionar carpeta.
Abrir área de trabajo en VSCode

Como podemos ver nuestra ventana de trabajo de Visual Studio Code ha cambiado ligeramente:

  • En la parte superior aparece el nombre del área de trabajo (Sobrebits-VSCode-Git).
  • Y en el explorador también vemos el área de trabajo sin archivos dentro.
Área de trabajo en VSCode

Con nuestra área de trabajo abierta podemos dirigirnos a Source Control, que debería indicar que no hay proveedores de control de código registrados:

Source Control en Visual Studio Code

Ésto puede inducir a error ya que parece indicar que no disponemos de Git en nuestra máquina, pero lo que realmente indica es que nuestro repositorio no está inicializado. Para inicializarlo deberemos:

  • Pulsar sobre el botón con el logo de Git al lado de SOURCE CONTROL.
  • Lo que abrirá la paleta de comandos en la que seleccionaremos nuestra área de trabajo.

Después de ello podremos ver como el error ha desaparecido y ya empezamos a disponer de opciones relacionadas con Git en Visual Studio Code:

Utilizando Git en Visual Studio Code

Ahora sí que ya lo tenemos todo listo para empezar utilizar Git desde nuestro editor. Para probar ésta funcionalidad haremos lo siguiente en nuestro recién creado repositorio:

  • Añadir un archivo.
  • Realizar un commit del mismo.
  • Crear una nueva rama.
  • Hacer un merge de la rama a master.
Añadir un archivo

Lo primero que haremos en el repositorio será crear un archivo para que tenga contenido. Para ello:

  • Nos dirigimos a Explorer.
  • Pulsamos sobre el botón New File.
Crear archivo en Git con VSCode
  • Damos nombre al archivo y pulsamos Enter.
Realizar un commit

Después de crear nuestro archivo podemos ver varias cosas interesantes:

  • El nombre del archivo aparece en color verde y con una U a su derecha.
  • El icono de Source Control tiene un 1.

Lo que se nos está indicando es que existe un archivo en estado ‘untracked’ (la U) y que hay un cambio pendiente (el 1).

Antes de realizar nuestro commit deberemos poner nuestro archivo en estado tracked, es decir, bajo el rastreo de Git:

  • Pulsamos sobre el icono de Source Control.
  • Hacemos clic sobre el icono ‘+’ al lado del nombre, lo que añadirá el archivo a nuestra staging area.
Añadir archivo a staging con VSCode

El archivo ahora pasará al apartado de STAGED CHANGES, indicando que nuestro archivo está preparado para ser commiteado.

Para crear nuestro primer commit lo único que deberemos hacer será rellenar el mensaje del commit y pulsar sobre el check de encima del campo de texto:

Commit en Visual Studio Code

Después de realizar el commit la interfaz vuelve a mostrarse como antes de añadir el archivo, indicando que no hay cambios pendientes.

Interfaz después del primer commit.
Crear una nueva rama

Para crear una nueva rama utilizaremos la paleta de comandos, una de las funcionalidades más importantes de Visual Studio Code. Desde ella podemos acceder a toda la funcionalidad del editor.

  • Abrimos la paleta de comandos de una de estas formas:
    • View > Command Palette.
    • Con la combinación de teclas Ctrl+Shift+P.
  • Escribimos en la paleta ‘git branch’ para mostrar todas las opciones relacionadas con las ramas de git.
Crear rama Git en Visual Studio Code
  • Seleccionamos Git: Create Branch…
  • Escribimos el nombre de la rama y pulsamos Enter.
Nombre de rama Git en Visual Studio Code
  • Seleccionamos el puntero HEAD que nos indica la rama actual.

Después de esto nuestra rama ya estará creada y nosotros estaremos situados en ella. En la esquina inferior izquierda podremos ver sobre la rama que nos encontramos:

Rama actual en VSCode

Si pulsamos sobre el nombre de la misma aparecerá en nuestra paleta de comandos las ramas existentes y la posibilidad de cambiar entre ellas:

Ramas disponibles en VSCode
Hacer merge de una rama a master

Por último vamos a realizar un merge de nuestra rama a master. Para ello lo primero que haremos será realizar algún cambio en la rama:

Archivo modificado en VSCode con Git

Como vemos ahora tanto el color como la letra al lado del nombre del archivo han cambiado. Lo que nos están mostrando en esta ocasión es que el archivo ha sido modificado.

Añadimos la modificación a la staging area y realizamos un commit igual que lo hemos hecho en nuestro primer commit.

Commit en nueva rama en VSCode

Con nuestra modificación ya hecha podemos pasar a realizar el merge:

  • Cambiamos a la rama master.
  • Abrimos la paleta de comandos de una de estas formas:
    • View > Command Palette.
    • Con la combinación de teclas Ctrl+Shift+P.
  • Escribimos git merge y seleccionamos la opción: Git: Merge Branch…
  • Seleccionamos la rama que hemos creado como origen del merge.
Rama desde la que realizar merge

Después de esto podemos ver como los cambios realizados en nuestro archivo en la rama Test-git ya aparecen en la rama master:

Conclusión

Y hasta aquí esta entrada doble en la que hemos podido ver dos de las mejores formas de disfrutar de Git en PowerShell. Sin duda la opción que hemos visto en esta entrada es la más sencilla de las dos, puesto que Visual Studio Code nos abstrae de los comandos de Git para centrarnos simplemente en producir.

Mi recomendación es que si no estáis utilizando ya Git para vuestros desarrollos de PowerShell lo empecéis a utilizar cuanto antes, te cambia la forma de desarrollar para bien.

¡Nos vemos en la próxima

La entrada Cómo utilizar Git con PowerShell (Parte 2): Git en Visual Studio Code aparece primero en Sobrebits.

by Marc Meseguer at April 03, 2019 01:53 PM

March 27, 2019

Sobre bits

Cómo utilizar Git con PowerShell (Parte 1): posh-git

Una de las mejores ideas que podemos tener cuando empezamos a pasar de utilizar PowerShell únicamente como consola de comandos y scripting básico a desarrollos algo más serios es involucrar una herramienta de control de versiones en la ecuación. Sin duda la herramienta de control de versiones de código más extendida en la actualidad es Git, por lo que en la entrada de hoy vamos a ver de qué manera podemos utilizar Git con PowerShell para nuestros desarrollos.

Git con PowerShell: posh-git

Antes de empezar…

En esta entrada voy a suponer que ya dispones de cierta base acerca del funcionamiento de Git. De no ser así te recomiendo que antes de entrar en la parte práctica te empapes un poco del funcionamiento de Git, existen multitud de recursos tanto online como offline para ello. Te aseguro que cada minuto que emplees en ello será un minuto aprovechado.

Insalar Git en Windows

Sea cual sea la forma en la que queramos consumir Git en PowerShell lo primero que deberemos hacer será instalar el cliente de Git para Windows. Para ello descargaremos la aplicación con nuestro navegador desde ésta URL.

La instalación básicamente es un siguiente > siguiente, pero vamos a verla paso por paso por si nos interesa cambiar algo:

  • Information: Aceptamos los terminos y condiciones.
  • Select destionation location: Elegimos la ruta de instalación del cliente.
  • Select components: Para una instalación básica dejamos los componentes marcados por defecto.
    • Si no queremos añadir entradas en el menú del explorador podemos desmarcar las opciones de Windows Explorer integration.
    • Puede resultar interesante marcar el checkeo automático de las actualizaciones para mantener Git siempre al día.
Elegir componentes de Git
  • Select Start Menu Folder: Dejamos por defecto.
  • Choosing the default editor used by Git: Aquí podemos elegir el editor que utilizará Git por defecto. Yo siempre utilizo Vim puesto que es el que utilizo en GNU/Linux, pero tenemos multitud de opciones a nuestra disposición:
Elegir editor de Git
  • Adjusting your PATH environment: Aquí podemos empezar a ver algo de PowerShell en la opción por defecto. Dejando la opción por defecto nos permitirá invocar comandos de Git desde Git Bash (la consola por defecto de Git) así como en cmd o nuestra querida PowerShell.
Path de Git en Windows
  • Choosing HTTPS transport backend: Aquí podemos elegir la opción que pefiramos. Si en vez de marcar la opción por defecto marcamos la segunda utilizaremos nuestro almacén de certificados de Windows y podremos validar contra las CA root de nuestro dominio. A gusto del consumidor.
  • Configuring the line ending conversions: Dejamos la opción por defecto puesto que será la que nos asegurará mayor compatibilidad si realizamos desarrollos multiplataforma en los saltos de línea (para poder utilizar PowerShell Core para GNU/Linux sin problema).
  • Configuring the terminal emulator to use with Git Bash: Dejamos la opción por defecto puesto que nos dejará redimensionarla sin problemas en versiones anteriores a Windows 10. No es una opción que nos interese mucho puesto que la idea es utilizar la propia PowerShell con Git.
  • Configuring extra options: Otra vez podemos dejar los settings por defecto para una instalación básica.
Instalación finalizada de Git para Windows

Como podéis ver es un instalador con muchas pantallas pero que si no deseamos ningún tipo de personalización podremos pasar a base de siguientes.

Ahora que ya tenemos la instalación finalizada podríamos abri la consola Git bash para empezar a trabajar con Git:

Git bash para Windows

Instalación de posh-git

Ahora que ya tenemos el requisito fundamental para trabajar en Git con PowerShell nos falta el módulo que va a complementar la consola para convertirla en una herramienta completa para el uso de Git. El módulo es posh-git, un módulo muy popular que podemos encontrar dentro de la PowerShell Gallery, y que nos ofrece la siguiente funcionalidad:

  • Personalización del prompt al más puro estilo Git en el que podemos ver la rama en la que nos encontramos y los cambios realizados en la misma.
  • Autocompletado de comandos de Git así como de nombres de las ramas.

Para instalar el módulo como siempre nos valdremos de Install-Module:

Install-Module posh-git -Scope CurrentUser -Force

Una vez instalado el módulo lo importaremos con Import-Module o utilizaremos la función Add-PoshGitToProfile que añadirá dicho Import-Module a nuestro perfil de PowerShell

# Opción 1: Importamos manualmente el módulo
Import-Module posh-git

# Opción 2: Modificamos nuestro perfil de PowerShell para que cargue automáticamente 
# (cerramos y abrimos la consola para que cargue el módulo)
Add-PoshToGitProfile

Utilizando Git con PowerShell mediante posh-git

Con posh-git ya instalado y cargado podemos empezar a trastear con Git. Para probar su funcionamiento vamos a hacer lo siguiente:

  • Crear una nueva carpeta (nuestro “proyecto”).
  • Inicializar un repositorio de git en ella.
  • Añadir un archivo.
  • Realizar un commit.

Antes de empezar configuraremos en Git nuestro correo y nuestro email (algo necesario para poder realizar nuestros commits):

C:\Scripts> git config --global user.email "[email protected]"
C:\Scripts> git config --global user.name "Marc"

Con esto hecho podemos empezar con los primeros dos puntos:

Inicializando un repositorio con posh-git

En esta captura vemos un par de cosas interesantes:

  • Los comandos de Git están disponibles en PowerShell gracias a la configuración del instalador en la pantalla “Adjusting your path environment”.
  • Una vez inicializado el repositorio nuestro prompt cambia indicando la rama en la que estamos (master) así como el título de la ventana que nos indica tanto el repositorio (Sobrebits-Git) como la rama.

Si ahora creamos un nuevo archivo en el repositorio veremos nuevos cambios en nuestro prompt:

Nuevo archivo en posh-git

Como podemos observar han aparecido unos números en rojo que nos vienen a indicar unas cuantas cosas:

  • +1: Se ha creado un archivo nuevo en el repositorio.
  • ~0: No se ha modificado ningún archivo.
  • -0: No se ha eliminado ningún archivo.
  • !: Existen archivos en el repositorio no trackeados.

Por último vamos a añadir nuestro nuevo archivo a la staging area y a crear nuestro primer commit:

Primer commit con git-posh
  • Al añadir nuestro nuevo archivo a la staging area vemos como la “!” del final se cambia por una “~”, que nos indica que tenemos archivos pendientes de ser commiteados.
  • Al hacer commit el prompt vuelve a su estado original.

Para más información sobre los cambios en el prompt te recomiendo que revises el README.md del proyecto en GitHub.

Conclusión

Con posh-git disponemos de la capacidad de usar Git con PowerShell sin depender de otras terminales en las que realizar nuestras operaciones de versionado.

En la segunda parte veremos cómo utilizar Git con PowerShell desde Visual Studio Code, el editor de preferencia de muchos para éste lenguaje.

¡Nos vemos en la próxima!

La entrada Cómo utilizar Git con PowerShell (Parte 1): posh-git aparece primero en Sobrebits.

by Marc Meseguer at March 27, 2019 03:30 PM

March 25, 2019

RooTeando

Entrevista En Diferido 6: Carlos del blog de Lázaro.

Hoy empezamos la sexta entrevista. En este caso con Carlos del Blog de Lázaro,https://elblogdelazaro.gitlab.io/.

Antes de todo, darte las gracias por aceptar la invitación para una entrevista y la  primera pregunta sería una pequeña presentación por parte del entrevistado para que los lectores puedan conocerte un poco. 

Entrevista En Diferido: ¿Te podrías presentar en unas líneas?

 

Carlos: 

Gracias  a tí por invitarme a participar.

Soy un gran apasionado ...

March 25, 2019 09:57 AM

March 24, 2019

RooTeando

Tomando Un Café 55: Como diseñar un curso

Nuevo audio de un tema que tenia planificado desde hace tiempo, donde explico de un forma personal, como diseñar un curso enfocado a  programación.  Que pasos hay que seguir, factores que debemos tener en cuenta, como estructurar un curso,generar ficha e índice o como desarrollar un temario.

Canales de Telegram @UnDiaUnaAplicacion @UnPythonAldia @AprendePython @EntrevistaEnDiferido
Podcast @RadioDev  @ARMparaTODOS @TomandoUnCafe

Grupos de Telegram
Alternativas a la Raspberry
https://t.me/AlternativasRaspberry

Twitter 
Podcast
Tomando Un ...

March 24, 2019 10:44 PM

March 20, 2019

Sobre bits

Descubriendo módulos: Listar máquinas Windows con reinicio pendiente con PowerShell

Después de casi cinco meses desde el último descubriendo módulos retomamos la sección para hablar de PendingReboot. PendingReboot es un módulo que, tal y como habréis podido leer en el título, nos ayudará a listar de forma masiva (si queremos) máquinas Windows con reinicio pendiente, algo más que común en sistemas operativos de Microsoft. ¡Vamos a ver cómo funciona!

Listar máquinas Windows con reinicio pendiente con PowerShell

Conociendo cómo funciona el módulo PendingReboot

PendingReboot es un módulo de PowerShell muy pequeño que alberga una única función: Test-PendingReboot. Como decía en la introducción ésta función nos puede ayudar a descubrir máquinas Windows con reinicio pendiente dentro de nuestro entorno.

Cuando una máquina se encuentra en un estado de reinicio pendiente se puede deber a varias causas: instalación de parches del sistema operativo, instalación de roles del sistema, adición a dominio, cambio de hostname, instalación/desinstalación de software de terceros…

PendingReboot nos facilitará la tarea de revisar las posibles señales que determinan si hay un reinicio pendiente en un sistema:

  • Claves de registro que indican un reinicio pendiente:
    • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending
    • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootPending
  • Revisión de si la máquina va a entrar en dominio:
    • HKLM\SYSTEM\CurrentControlSet\Services\Netlogon
  • Comparativa entre el nombre de máquina y el nombre actual de la máquina.
  • Operaciones de renombrado de archivos.
    • HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations
  • Clases utilizadas WMI utilizadas por el SDK de SCCM.

Test-PendingReboot utiliza Invoke-WmiMethod para realizar las consultas contra el registro de Windows de las máquinas remotas (y de la propia máquina local) tal y como vimos en ‘Utilizando CIM y WMI con PowerShell‘.

Primer uso del módulo PendingReboot

Ahora que ya conocemos un poco las entrañas del módulo vamos a sacarle jugo. Para instalarlo como siempre tiraremos de Install-Module:

Install-Module -Name PendingReboot -Scope CurrentUser -Confirm:$false

Con el módulo ya instalado podemos pasar a hacer la consulta sobre nuestra propia máquina utilizando:

PS C:\>Test-PendingReboot -ComputerName localhost -SkipConfigurationManagerClientCheck

ComputerName IsRebootPending
------------ ---------------
localhost               True

Utilizo -SkipConfigurationManagerClientCheck para que no aparezca un error indicando que la máquina no dispone del ClientSDK de SCCM.

Como podemos ver, la máquina local dispone de un reinicio pendiente. Si quisiéramos ver exáctamente qué operación es la que pide el reinicio podremos consultarlo utilizando el flag -Detailed:

PS C:\>Test-PendingReboot -ComputerName localhost -SkipConfigurationManagerClientCheck -Detailed


ComputerName                     : localhost
ComponentBasedServicing          : False
PendingComputerRenameDomainJoin  : False
PendingFileRenameOperations      : True
PendingFileRenameOperationsValue : {\??\C:\Program Files (x86)\Mozilla Firefox\tobedeleted\moz67c...}
SystemCenterConfigManager        :
WindowsUpdateAutoUpdate          : False
IsRebootPending                  : True

Y como podemos apreciar en las líneas resaltadas éste reinicio pendiente se debe a una operación de renombrado de archivos relacionada con Firefox.

Cómo listar máquinas Windows con reinicio pendiente masivamente

Revisar si nuestra propia máquina dispone de reinicio pendiente puede ser útil, pero en la mayoría de los casos se puede quedar en anecdótico. Lo realmente potente será realizar estas consultas a máquinas remotas y hacerlo a gran escala.

Lo primero que necesitaremos será almacenar las credenciales de las máquinas a las que conectaremos en un objeto PSCredential que utilizaremos en cada conexión:

$Credencial = Get-Credential

Para ejecutar masivamente Test-PendingReboot nos valdremos del parámetro -Name que acepta múltiples valores. Una forma de pasarle todos los nombres sería leyendo un archivo txt con un nombre de servidor por cada línea

PS C:\>Test-PendingReboot -ComputerName $(Get-Content C:\Scripts\Computers.txt) -Credential $Credencial -SkipConfigurationManagerClientCheck

ComputerName  IsRebootPending
------------  ---------------
Sobrebits1              False
Sobrebits2               True
Sobrebits3              False
Sobrebits4              False
Sobrebits5              False

Otra forma es utilizar PowerCLI para listar las máquinas virtuales y pasárselas a Test-PendingReboot (deberemos estar conectados a una infraestructura vSphere):

PS C:\>Test-PendingReboot -ComputerName $($(Get-Folder Sobrebits-VMs | Get-VM).ExtensionData.Guest.Hostname) -Credential $Credencial -SkipConfigurationManagerClientCheck

ComputerName  IsRebootPending
------------  ---------------
Sobrebits1              False
Sobrebits2               True
Sobrebits3              False
Sobrebits4              False
Sobrebits5              False

Por último, podríamos hacer una query a una OU desde un DC (o utilizando PSRemoting contra uno) para obtener las máquinas de la misma:

PS C:\>Test-PendingReboot -ComputerName $($(Get-ADComputer -Filter * -SearchBase "OU=Computers,DC=Sobrebits,DC=local").DNSHostName) -Credential $Credencial -SkipConfigurationManagerClientCheck

ComputerName  IsRebootPending
------------  ---------------
Sobrebits1              False
Sobrebits2               True
Sobrebits3              False
Sobrebits4              False
Sobrebits5              False

Conclusión

Con la información obtenida utilizando PendingReboot podremos realizar las acciones correctoras que necesitemos. Antes de realizar un reinicio “a la brava” de las máquinas que detectemos que tienen un reinicio pendiente sería conveniente revisar el motivo por el que se ha llegado a dicho estado por si éste se debe a un comportamiento anómalo de la misma.

¡Espero que os sea de ayuda!

¡Nos vemos en la próxima! 🙂

La entrada Descubriendo módulos: Listar máquinas Windows con reinicio pendiente con PowerShell aparece primero en Sobrebits.

by Marc Meseguer at March 20, 2019 01:00 PM

March 19, 2019

systemadmin.es

MySQL: Your password does not satisfy the current policy requirements

Mediante el plugin validate_password podemos definir unos requisitos minimos de seguridad para las contraseñas de MySQL:

mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER ON `dbdemo`.* TO 'demouser'@'%' identified by 'demopassword';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER ON `dbdemo`.* TO 'demouser'@'1.2.3.4' identified by 'demopassword';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

Evidentemente para ciertos entornos dicho plugin puede resultar un problema por lo que podemos querer desactivarlo.

Podemos desactivar el plugins mediante el siguiente comando:

mysql> uninstall plugin validate_password;
Query OK, 0 rows affected (0.04 sec)

A continuación los password ya no serán examinados con los criterios mínimos de seguridad:

mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER ON `dbdemo`.* TO 'demouser'@'%' identified by 'demopassword';
Query OK, 0 rows affected, 1 warning (0.06 sec)

mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER ON `dbdemo`.* TO 'demouser'@'1.2.3.4' identified by 'demopassword';
Query OK, 0 rows affected, 1 warning (0.01 sec)
Tags:

by Jordi Prats at March 19, 2019 10:49 AM

March 13, 2019

Sobre bits

Redimensionar una máquina virtual de forma programada con PowerCLI

Una de las tareas habituales dentro de una plataforma vSphere es la de redimensionar máquinas virtuales existentes. Si queremos aumentar recursos es probable que con CPU/Memory Hot Add tengamos suficiente para no tener una parada de servicio, pero si dichos settings no están habilitados en nuestra VM o lo que queremos es disminuir los recursos de la máquina sí que la tendremos. En la entrada de hoy veremos cómo redimensionar una máquina virtual de forma programada con PowerCLI para poder ajustar nuestra parada de servicio a horas no productivas.

Redimensionar una máquina virtual de forma programada con PowerCLI

Construyendo el script

Si no te interesa el proceso detallado de la creación del script puedes pasar directamente al siguiente punto. 😉

Antes de empezar a construir un script, por simple que sea, recomiendo siempre planear las acciones que vamos a realizar en el mismo. Para este caso serán las siguientes:

  • Conectar a vSphere.
  • Apagar la máquina virtual (si recurrimos a este método probablemente es porque no podemos tirar de Hot Add).
  • Comprobar que la máquina llegue a apagar. (si intentáramos redimensionar la máquina estando encendida obtendríamos un error)
  • Redimensionar la máquina virtual.
  • Encender la máquina virtual.
  • Desconectar de vSphere.

Nada muy complejo, así que con un script de pocas líneas lo tendremos resuelto. Para empezar crearemos una pequeña zona de configuración del script:

#### Configuración del script ####
# Conexión a vCenter
$VcenterIp = '192.168.168.168'
$VcenterCred = Import-Clixml -Path "$PSScriptRoot\Credenciales\VMware.xml"

# Nombre de la máquina virtual a modificar
$VmName = 'Sobrebits01'
# Número de CPUs (Para no modificarlo dejar el valor en '')
$Cpu = '3'
# GBs de RAM (Para no modificarlo dejar el valor en '')
$Memory = ''
  • Líneas 3-4: Datos de la conexión a vCenter. Para almacenar las credenciales utilizamos el método en ésta entrada.
  • 7-11: Configuramos los valores de la máquina virtual. Para las $Cpu y $Memory si dejamos el valor vacío implicará no modificar dicho valor.
    • En este caso de ejemplo modificaríamos la CPU a 3 y dejaríamos la memoria con el valor ya configurado en la máquina.

Con el apartado de configuración finalizado pasamos a conectar al vCenter, apagar la máquina y esperar a que se haya apagado:

#### Cuerpo del script ####
# Conectamos al vCenter
Connect-VIServer -Server $VcenterIp -Credential $VcenterCred -WarningAction SilentlyContinue | Out-Null

# Apagamos la máquina virtual
Get-VM $VmName | Shutdown-VMGuest -Confirm:$false | Out-Null

# Esperamos hasta que la máquina se apague
Do {
    Start-Sleep -Seconds 5
    $Vm = Get-VM -Name $VmName
} Until ($Vm.PowerState -eq 'PoweredOff')

Creo que todo es bastante autoexplicativo, pero vamos a verlo por encima:

  • 3: Conectamos a vCenter utilizando la IP y credenciales generadas en el área de configuración.
  • 6: Obtenemos la máquina virtual y la apagamos de forma “amigable” con Shutdown-VMGuest.
    • De no tener las VMware Tools instaladas y activas la máquina virtual no se apagaría. Para hacer un apagado forzoso deberíamos utilizar Stop-VM.
  • 9-12: Ejecutamos el bucle hasta que la propiedad PowerState de la máquina virtual no sea PoweredOff.

Con la máquina apagada ya podemos pasar a redimensionar la máquina, iniciarla y desconectar del vCenter:

# Redimensionamos en función de lo que hayamos especificado en la configuración
if ($Cpu -and $Memory) {
    Get-VM $VmName | Set-VM -NumCpu $Cpu -MemoryGB $Memory -Confirm:$false | Out-Null
}
elseif ($Cpu) {
    Get-VM $VmName | Set-VM -NumCpu $Cpu -Confirm:$false | Out-Null
}
elseif ($Memory) {
    Get-VM $VmName | Set-VM -MemoryGB $Memory -Confirm:$false | Out-Null
}

# Iniciamos la máquina virtual
Get-VM $VmName | Start-VM | Out-Null

# Desconectamos del vCenter
Disconnect-VIServer -Confirm:$false
  • 2-10: Redimensionamos la máquina virtual con Set-VM en función de los parámetros especificados.
    • 2-4: Si especificamos tanto $Memory como $Cpu modificamos ambas configuraciones.
    • 5-7: Si únicamente hemos especificado $Cpu la modificamos.
    • 8-10: Si únicamente hemos especificado $Memory la modificamos.
  • 13: Iniciamos la máquina virtual con Start-VM.
  • 16: Desconectamos del vCenter.

Script para redimensionar una máquina virtual de forma programada con PowerCLI

El resultado final del script sería el siguiente:

#### Configuración del script ####
# Conexión a vCenter
$VcenterIp = '192.168.168.168'
$VcenterCred = Import-Clixml -Path "$PSScriptRoot\Credenciales\VMware.xml"

# Nombre de la máquina virtual a modificar
$VmName = 'Sobrebits01'
# Número de CPUs (Para no modificarlo dejar el valor en '')
$Cpu = '3'
# GBs de RAM (Para no modificarlo dejar el valor en '')
$Memory = ''

#### Cuerpo del script ####
# Conectamos al vCenter
Connect-VIServer -Server $VcenterIp -Credential $VcenterCred -WarningAction SilentlyContinue | Out-Null

# Apagamos la máquina virtual
Get-VM $VmName | Shutdown-VMGuest -Confirm:$false | Out-Null

# Esperamos hasta que la máquina se apague
Do {
    Start-Sleep -Seconds 5
    $Vm = Get-VM -Name $VmName
} Until ($Vm.PowerState -eq 'PoweredOff')

# Redimensionamos en función de lo que hayamos especificado en la configuración
if ($Cpu -and $Memory) {
    Get-VM $VmName | Set-VM -NumCpu $Cpu -MemoryGB $Memory -Confirm:$false | Out-Null
}
elseif ($Cpu) {
    Get-VM $VmName | Set-VM -NumCpu $Cpu -Confirm:$false | Out-Null
}
elseif ($Memory) {
    Get-VM $VmName | Set-VM -MemoryGB $Memory -Confirm:$false | Out-Null
}

# Iniciamos la máquina virtual
Get-VM $VmName | Start-VM | Out-Null

# Desconectamos del vCenter
Disconnect-VIServer -Confirm:$false

Conclusión

Si utilizamos éste script junto con lo que vimos anteriormente en Ejecutar un script de PowerShell de forma programada podremos pasar a realizar nuestras redimensiones de máquinas virtuales de forma totalmente desatendida, ahorrándonos acciones manuales fuera de horario, que creo que a ninguno nos gustan. 🙂

Eso sí, hay que tener en cuenta que el script no hace comprobaciones posteriores de que el servicio de nuestra máquina virtual levante correctamente, por lo que o lo scriptamos, o lo tenemos monitorizado o habrá que hacer un chequeo manual antes de empezar el horario productivo.

¡Espero que os sea útil!
¡Hasta la próxima!

La entrada Redimensionar una máquina virtual de forma programada con PowerCLI aparece primero en Sobrebits.

by Marc Meseguer at March 13, 2019 04:00 PM

March 12, 2019

RooTeando

Tomando Un Café 54: Fragmentación en Linux

Nuevo audio, donde doy mi opinión sobre la fragmentación en Linux,  me centro mas en el porque de la fragmentación que en decir si es bueno o malo.

 

Canales de Telegram @UnDiaUnaAplicacion @UnPythonAldia @AprendePython @EntrevistaEnDiferido
Podcast @RadioDev  @ARMparaTODOS @TomandoUnCafe

Grupos de Telegram
Alternativas a la Raspberry
https://t.me/AlternativasRaspberry

Twitter 
Podcast
Tomando Un Café https://twitter.com/Tomando_Un_Cafe
RadioDev https://twitter.com/RadioDevPodcast

Canales de Telegram
Un Día Una Aplicación https://twitter ...

March 12, 2019 09:20 AM

March 11, 2019

debianhackers.net

[Short] FreshRSS: aloja tu propio servidor RSS

Como un soplo de aire fresco, llega FreshRSS un agregador de canales RSS libre y ligero donde mantener al día y sincronizados vuestros feed RSS. Es compatible tanto con Apache como con Ngnix, así que debería funcionar sin problema aunque vayáis un poco justos de hardware (RasPi calling!). El funcionamiento es simple, instalas un servidor web (guía aquí -de momento sólo está en inglés-) y accedes a él desde cualquier dispositivo, bien vía web o desde la aplicación android (la podéis encontrar en F-droid pero ojo que aún está en versión alpha).

Aquí podéis indagar un poco sobre el funcionamiento de la aplicación y aquí se explica como programar cron para que actualice los feeds automáticamente cada cierto tiempo.

Happy hacking!

by Debish at March 11, 2019 07:34 PM

March 10, 2019

RooTeando

Entrevista En Diferido 5: Laura

Hoy empezamos una entrevista a Laura,  podcaster, participante activa en la  Unión Podcastera y usuaria de Bullet Journal. 

Antes de todo, darte las gracias por aceptar la invitación para una entrevista y la  primera pregunta sería una pequeña presentación por parte del entrevistado para que los lectores puedan conocerte un poco. 

 

Entrevista En Diferido: ¿Te podrías presentar en unas líneas?

Laura:  Lo primero agradecerte la invitación a participar en este proyecto que ...

March 10, 2019 11:45 PM

March 06, 2019

RooTeando

Tomando Un Café 53: Charla con Rafa, casi un monográfico de C y C++.

Nuevo audio, un crossover con Rafa del podcast Leña al mono que es goma y Loleido, hablamos sobre Linux, lenguaje de programación (mucho C/C++ y algo Python) y otros temas.

Podcast de Rafa
Leña al mono que es de goma:  https://www.ivoox.com/lena-al-mono-es-goma_sq_f1479496_1.html
Loleido  https://www.ivoox.com/loleido-libros-sin-horas_sq_f1650517_1.html

Canales de Telegram @UnDiaUnaAplicacion @UnPythonAldia @AprendePython @EntrevistaEnDiferido
Podcast @RadioDev  @ARMparaTODOS @TomandoUnCafe

Grupos de Telegram
Alternativas a la Raspberry ...

March 06, 2019 10:17 PM

debianhackers.net

[Truco] Convierte un vídeo en imágenes con ffmpeg

¿Pulsaste el botón de vídeo en lugar del de la foto en aquel lugar y momento difícilmente repetible? ¿Te gustaría tener una de las escenas icónicas de tu película favorita de fondo de pantalla? Con ffmpeg es muy sencillo. Imaginemos que necesitamos extraer los primeros 30 segundos de un vídeo en fotogramas. Basta con teclear:

ffmpeg -ss 00:00 -i video.mp4 -t 00:30 fotograma%05d.png

En detalle:

  • -ss indica el inicio temporal a partir del cual empezar a extraer fotogramas.
  • -t el intervalo de tiempo en el que queremos extraerlos
  • %05d es una wildcard que sirve para añadir el número de fotograma con 5 dígitos al final del nombre de cada .png generado

Fácil ¿verdad? Esta es solo una pequeña muestra del potencial de ffmpeg, os invito a echar un vistazo más detallado a esta navaja suiza del multimedia. Aquí os dejo el enlace a la lista de formatos de vídeo soportados.

¡Que aproveche!

by Debish at March 06, 2019 08:05 PM

Sobre bits

3 formas distintas de crear objetos en PowerShell

Como ya hemos visto en entradas anteriores, cuando trabajamos con PowerShell acostumbramos a pasarnos todo el tiempo manipulando objetos, ya sea consultándolos, modificándolos, creándolos o eliminándolos. En la entrada de hoy vamos a ver de qué formas podemos crear objetos en PowerShell, cuál es la más adecuada y por qué deberíamos hacerlo.

3 formas distintas de crear objetos en PowerShell

Antes de nada: ¿por qué es importante crear objetos en PowerShell?

Como decía en la introducción y como ya he dicho en más de una ocasión en este blog, en PowerShell todo es un objeto.

Cuando utilizamos cualquier cmdlet éste va a devolvernos un objeto. Lo potente de ello es que podemos utilizar todo el set de herramientas habituales para procesar dicho objeto, estemos tratando con un objeto que representa un servicio de Windows o con uno que representa una máquina virtual de vSphere indistintamente.

En la medida de lo posible, cuando desarrollemos nuestras propias funciones o scripts deberíamos seguir dicha práctica e intentar devolver objetos en vez de texto. Hacerlo garantiza que cualquier persona que vaya a ejecutar dicha herramienta pueda manipular la salida de la misma de la forma que está acostumbrada con cualquier otro cmdlet de PowerShell.

Ahora que ya conocemos los beneficios de devolver objetos en nuestras funciones y scripts pasemos a la acción y empecemos a ver cómo crearlos.

Método 1: Crear objetos en PowerShell con New-Object y Add-Member

La primera forma que vamos a utilizar para crear objetos en PowerShell será utilizando New-Object y Add-Member. New-Object nos permitirá crear el objeto y con Add-Member le podremos añadir propiedades y métodos.

# Creamos el objeto
$ObjetoSobrebits = New-Object -TypeName PSCustomObject

# Le añadimos las propiedades
$ObjetoSobrebits | Add-Member -MemberType NoteProperty -Name Nombre -Value "Sobrebits"
$ObjetoSobrebits | Add-Member -MemberType NoteProperty -Name URL -Value "https://sobrebits.com"
$ObjetoSobrebits | Add-Member -MemberType NoteProperty -Name Autor -Value "Marc Meseguer"

Si ahora examinamos el contenido de nuestro objeto $ObjetoSobrebits veremos lo siguiente:

Objeto creado con New-Object

Como podemos observar New-Object ha creado un nuevo objeto del tipo PSCustomObject y Add-Member ha añadido nuestras propiedades. Como decía al principio con Add-Member también podemos añadir métodos a nuestro objeto:

$ObjetoSobrebits | Add-Member -MemberType ScriptMethod -Name Status -Value {(Invoke-WebRequest https://sobrebits.com).StatusDescription}

Si ahora invocamos al método Status de nuestro objeto nos devolverá, en este caso, el estado de la transacción web a sobrebits.com:

Método en objeto creado con New-Object

Método 2: Utilizando New-Object y una hashtable

Después de ver el primer método la sensación que se nos puede quedar es que para crear un objeto hay que picar mucho código. Nada más lejos de la realidad, con este método vamos a intentar disminuir la cantidad de código a escribir con el uso de una hashtable (o diccionario en otros lenguajes de programación):

# Creamos las propiedades del objeto
$Propiedades = [ordered]@{
    Nombre = "Sobrebits"
    URL = "https://sobrebits.com"
    Autor = "Marc Meseguer"
}

# Creamos el objeto con las propiedades creadas anteriormente
$ObjetoSobrebits2 = New-Object -TypeName PSCustomObject -Property $Propiedades

Veamos qué hemos hecho:

  • Líneas 2-6: Creamos una hashtable con las propiedades que daremos al objeto y la almacenamos en $Propiedades.
    • En la creación utilizamos [ordered] para que se conserve el orden en el que definimos los valores de la hashtable. De no hacerlo aparecerían desordenados.
  • Línea 9: Creamos el objeto utilizando las propiedades definidas en la hashtable.
Objeto de PowerShell creado con hashtable

Como podemos comprobar tenemos el mismo objeto que en el primer método pero generado de una forma mucho más rápida al ahorrarnos todos los Add-Member.

Método 3: Utilizando una Hashtable y un acelerador de tipo

Si bien el método 2 supone un gran ahorro a la hora de crear nuestros objetos, éste método viene para hacerlo todo aún más minimalista. Para ahorrarnos la creación del objeto con New-Object utilizaremos el acelerador de tipo [pscustomobject] delante de la definición de la hashtable. Con ello tendremos el objeto creado con un solo paso.

$ObjetoSobrebits3 = [pscustomobject]@{
    Nombre = "Sobrebits"
    URL = "https://sobrebits.com"
    Autor = "Marc Meseguer"
}

Si miramos el contenido de nuestra variable veremos que nada ha cambiado respecto a los métodos anteriores más allá de la reducción del código utilizado:

Objeto creado mediante hashtable y acelerador de tipo

Nota: Utilizando el acelerador de tipo [pscustomobject] ya incluye el uso de [ordered] en la hashtable que hemos visto en el método anterior.

Conclusión

Como he dicho al principio de la entrada es muy importante que utilicemos siempre que sea posible objetos como salida de nuestros scripts y funciones.

Espero que estos tres métodos os sean útiles. Si bien hay más éstos son los más utilizados. Yo particularmente utilizo el 3 siempre que puedeo desde que lo descubrí, todo lo que sea ahorrar en líneas es bienvenido en mi código. 🙂

¡Hasta la próxima!

La entrada 3 formas distintas de crear objetos en PowerShell aparece primero en Sobrebits.

by Marc Meseguer at March 06, 2019 02:53 PM

March 03, 2019

fraterneo.blogspot.com.es

February 28, 2019

www.rootzilopochtli.com

Fedora México: 1er meetup


Desde hace ya mucho tiempo, tenía la inquietud de poder colaborar con la comunidad Fedora en México. Por muchas razones que no vale la pena mencionar, la comunidad se había estancado un poco.

Gracias a la invitación del buen Alberto Rodríguez y Efrén Robledo, pude cumplir esta meta de re-impulsar la comunidad, con el reinicio de la comunidad en la plataforma Meetup.com, dando la primer plática-taller: Fedora Containers Lab.

En esta larga plática, les compartí como realizo mis pruebas de laboratorio con KVM, probando podman para la administración de containers.

Alberto ha organizado grandes eventos para la comunidad, como el Fedora Women’s Day y las Fedora Release Party en la UAM Azcapotzalco y que decir del buen Efrén con el estupendo trabajo que ha realizado en Eva Fedora.

Uniendo estos esfuerzos es como queremos impulsar y reavivar la llama de la comunidad en México.

Pueden unirse en meetup.com o al grupo de telegram, para conocer los siguientes eventos que estaremos organizando y participando como comunidad.


Les dejo el link de la presentación, así como el archivo tlog de la sesión.

Espero les sirva…

by Alex Callejas at February 28, 2019 04:51 PM

RooTeando

Entrevista En Diferido 4: Juan Febles

Volvemos con una nueva Entrevista En Diferido, con un entrevistado bastante conocido en el ambito de Linux y software Libre. Entrevistamos a Juan Febles, podcaster de PodcastLinux y Linux Express, creador de proyectos como Maraton Linuxero, defensor del Linux y software libre.

En esta entrevista, Juan ha preferido responder mediante audios, donde en cada audio leía la pregunta y respondia . He pensado que la forma mas cómoda es juntar todos los audios y ponerlo ...

February 28, 2019 12:35 AM

February 27, 2019

Sobre bits

Mostrar conexión a vSphere en el prompt de PowerShell

Algo que me ocurre habitualmente cuando estoy trabajando es que acabo con varias consolas de PowerShell abiertas a la vez y al final me cuesta distinguir desde qué terminal estoy conectado a algún servidor vCenter y aún más determinar contra cuál estoy conectado. En la breve entrada de hoy os enseñaré cómo mostrar la conexión a vSphere en el prompt de PowerShell, que es como he solucionado este problema.

Mostrar conexión a vSphere en el prompt de PowerShell

Determinando a qué servidor estamos conectados

Antes de ponernos a personalizar el prompt de nuestra consola necesitamos saber contra qué servidor o servidores estamos conectados. Para hacerlo podemos valernos de la siguiente variable global que se asigna una vez nos conectamos a algún servidor vSphere: $global:DefaultVIServers. Lo bueno de $global:DefaultVIServers es que nos refleja si estamos conectados a un servidor, a múltiples servidores o no estamos conectados a ninguno. Veamos como se comporta:

Conectado a un servidor:

PowerCLI un servidor

Conectado a dos servidores:

PowerCLI dos servidores

Sin servidores conectados:

Sin conexiones PowerCLI


Mostrando la conexión a vSphere en el prompt de PowerShell

Ahora que ya tenemos claro dónde ir a buscar nuestra conexión de PowerCLI podemos pasar a modificar nuestro prompt.

Como vimos en la entrada Cómo personalizar nuestro perfil de PowerShell para hacer dicha modificación necesitamos crear una función especial llamada prompt. La función prompt es llamada cada vez que se muestra una nueva línea, por lo que después de cada comando se refrescará el estado de nuestro prompt. Vamos a ver cómo quedaría:

function prompt { 
    if ($global:DefaultVIServers) { 
        Write-Host "[PowerCLI: $(($global:DefaultVIServers.Name) -join (', '))] " -ForegroundColor DarkGreen -NoNewline 
        "PS $pwd>" 
    } 
    else { 
        "PS $pwd>" 
    } 
}

Vamos a diseccionar la función

  • Línea 2: Determinamos si existe contenido dentro de $global:DefaultVIServers.
    • 3:
      • Write-Host “[PowerCLI: Mostramos [PowerCLI al principio del prompt.
      • $(($global:DefaultVIServers.Name) -join (‘, ‘)): Juntamos los posibles nombres de los servidores vSphere y los separamos por comas.
      • -ForegroundColor DarkGreen -NoNewline: Cambiamos el color de la letra a DarkGreen e impedimos que se cree una nueva línea.
    • 4: Añadimos PS y el path donde estamos ubicados (el prompt clásico de PowerShell).
  • 6-8: En caso de que no exista contenido en $global:DefaultVIServers volvemos a establecer el prompt clásico de PowerShell (ésto es útil para restablecer el prompt al desconectar de un servidor).

¿Cuál sería el resultado de esto? Ahí va:

Prompt PowerShell servidor PowerCLI

Ahora con un simple vistazo podremos determinar si estamos conectados a algún servidor vSphere y saber concretamente a cual.

Bola extra: Mostrando la conexión a vSphere en el título de PowerShell

Además de mostrar la conexión a vSphere en el prompt de PowerShell podemos hacer lo propio en el título de nuestra ventana de terminal. Éste cambio podemos incorporarlo también a nuestra función prompt para que se refresque en cada nueva línea:

function prompt { 
    if ($global:DefaultVIServers) { 
        $host.ui.RawUI.WindowTitle = "PowerCLI: $(($global:DefaultVIServers.Name) -join (', '))" 
        Write-Host "[PowerCLI: $(($global:DefaultVIServers.Name) -join (', '))] " -ForegroundColor DarkGreen -NoNewline 
        "PS $pwd>" 
    } 
    else { 
        $host.ui.RawUI.WindowTitle = "Windows PowerShell" 
        "PS $pwd>" 
    } 
}

Como podemos ver simplemente hemos modificado dos líneas:

  • 3: Mostramos el mismo contenido que en nuestro prompt en el título de la terminal en el caso de que exista contenido en $global:DefaultVIServers.
  • 8: De no existir contenido en $global:DefaultVIServers mostramos el título clásico de PowerShell.

Y el resultado sería el siguiente:

Título PowerShell servidor PowerCLI

Conclusión

Con esto ya estaría todo, lo único que nos faltaría sería añadir el contenido de esta función a nuestro perfil de PowerShell para que éstas configuraciones apliquen en cada nueva ventana de terminal que abramos.

¡Espero que os haya sido útil!

La entrada Mostrar conexión a vSphere en el prompt de PowerShell aparece primero en Sobrebits.

by Marc Meseguer at February 27, 2019 04:01 PM

February 20, 2019

Sobre bits

Cómo crear un entorno de prueba para PowerCLI con govcsim

Un gran problema al que nos enfrentamos cuando realizamos cualquier tipo de desarrollo es el de tener una infraestructura de test contra la que probar nuestros avances (a no ser que tengamos ganas de hacer algún destrozo en una infraestructura productiva). En un desarrollo en PowerCLI puede resultar especialmente complicado puesto que deberemos disponer de servidores ESXi, vCenter y máquinas virtuales sobre las que testear, lo que nos supone una gran cantidad de recursos que no siempre es sencillo tener a mano. En la entrada de hoy vengo a presentaros govcsim (vCenter Server Simulator), un desarrollo que nos permitirá crear un entorno de prueba para PowerCLI muy liviano y portable.

Cómo crear un entorno de prueba para PowerCLI con govcsim

¿Qué es govcsim (vCenter Server Simulator)?

vCenter Server Simulator (govcsim) es un simulador open source de la API de vCenter y ESXi desarrollado en Go utilizando la librería govmomi. Lo que nos ofrece govcsim es un entorno vCenter/ESXi totalmente funcional sobre el que desarrollar nuestros scripts de PowerCLI sin la necesidad de desplegar todos los elementos citados en la introducción.

En este simulador encontraremos desde el primer momento los elementos típicos que componen dichas infraestructuras: datacenter, hosts, cluster, resource pools, redes y datastore. Podemos utilizar estos elementos para realizar todo tipo de operaciones que necesitemos como:

  • Desarrollar nuevos proyectos en PowerCLI u otro lenguaje que ataque contra la API de vSphere.
  • Realizar tests de nuestros desarrollos.
  • Probar desarrollos de terceros en un entorno seguro.
  • Aprender a utilizar PowerCLI de forma segura.

Cómo instalar vCenter Server Simulator

La forma más sencilla para instalar govcsim es utilizando un contenedor docker con la aplicación ya instalada. Gracias a ello podremos tener nuestro entorno de desarrollo en cualquier plataforma y de forma muy sencilla.

En esta entrada me centraré en el uso de govcsim mediante Docker Desktop for Windows, la forma más “nativa” de tener el entorno corriendo en sistemas Windows. Si no lo tienes instalado puedes seguir estas sencillas instrucciones.

Una vez tengamos nuestra plataforma Docker corriendo ejecutaremos el siguiente comando que ejecutará nuestro contenedor:

docker run --rm -d -p 443:443/tcp nimmis/vcsim:latest

Vamos a desgranar la línea:

  • docker run: Ejecutamos el contenedor.
  • –rm: Eliminamos el contenedor después de pararlo. (Esto es opcional pero nos ayudará a tener un entorno limpio cada vez que ejecutemos el contenedor)
  • -d: Ejecutamos el contenedor en modo “detached”, es decir, que corra en background.
  • -p 443:443/tcp: Exponemos el puerto 443TCP del host de docker al contenedor.
  • nimmis/vcsim:latest: Utilizamos la última versión de la imagen nimmis/vcsim para crear nuestro contenedor.

Una vez ejecutado el comando, si es nuestra primera vez, deberíamos ver algo parecido a la siguiente captura, en la que antes de ejecutar el contenedor descargamos la imagen:

Descarga contenedor govcsim

Con la ejecución del comando completada ya podemos ejecutar docker ps para ver que nuestro contenedor está corriendo en background:

docker ps 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
141543f1548c nimmis/vcsim:latest "/docker-entrypoint.…" 11 minutes ago Up 11 minutes 0.0.0.0:443->443/tcp gallant_rosalind

Utilizando nuestro entorno de prueba para PowerCLI

Antes de comenzar a utilizar nuestro contenedor debemos saber la IP de nuestro servidor docker. En nuestra instalación de Docker Desktop for Windows la forma más fácil de hacerlo es, como no, con PowerShell:

(Get-NetIPAddress -InterfaceAlias *docker* -AddressFamily IPv4).IPAddress

10.0.75.1

Con esto ya lo tenemos todo para conectarnos a nuestro flamante vCenter simulado:

Conectara govcsim con PowerCLI

Como podemos ver las credenciales por defecto de govcsim son:

  • Usuario: u
  • Password: p

Si investigamos un poco lo que nos ofrece este vCenter simulado veremos que tenemos todo lo que podamos imaginar de un vCenter normal:

Recursos govcsim

Y podemos realizar acciones que afecten al estado del “servidor” como parar una máquina virtual:

Apagar VM de govcsim

O poner un “nodo” en mantenimiento:

Nodo en mantenimiento govcsim

Conclusión

Desarrollar y testear nuestros scripts directamente contra una infraestructura VMware productiva nunca es una buena idea, por lo que os recomiendo muchísimo que le deis una oportunidad a vCenter Server Simulator, y generéis vuestro entorno de prueba para PowerCLI desde ya. Es sin duda la manera más segura de desarrollar en PowerCLI y con la que seguro que os ahorraréis más de un disgusto.

¡Nos vemos en la próxima!

La entrada Cómo crear un entorno de prueba para PowerCLI con govcsim aparece primero en Sobrebits.

by Marc Meseguer at February 20, 2019 01:00 PM

RooTeando

Tomando Un Café 52: Telegram no es WhatsApp

Nuevo audio, que grabe hace un tiempo y ahora publico, es una pequeña reflexión sobre Telegram, WhatsApp y las diferencias que hay entre estos dos programas y que uso que le podemos dar a cada uno.

Música: Podingtoon Bear- Piano I: Surface Tension 2

Canales de Telegram @UnDiaUnaAplicacion @UnPythonAldia @AprendePython @EntrevistaEnDiferido
Podcast @RadioDev  @ARMparaTODOS @RadioDev

Grupos de Telegram
Alternativas a la Raspberry
https://t.me/AlternativasRaspberry

Twitter 
Podcast
https://twitter.com/Tomando_Un_Cafe ...

February 20, 2019 11:39 AM

February 17, 2019

www.rootzilopochtli.com

tlog – grabar sesiones en la terminal

One person can keep a secret, but not two
Ernest Cline, Ready Player One

Hace ya varios años, les recomendaba un muy buen complemento para sudo, con el cual se podía grabar la sesión que utilizaba dicho comando. La herramienta (sudosh) fue abandonada en 2006 y recuperada en 2 versiones, actualmente en github:

sudosh
sudosh2

Y aunque son buenas versiones, siempre sentí que no cumplían al 100% con lo que necesitaba, principalmente, porque al sustituir la shell con dichos programas, la experiencia de usuario disminuía, ya que en ocasiones no se ejecutaba correctamente y mandaba diversos errores que no le permitían trabajar de la mejor forma.

Recientemente, como parte del proyecto Scribery (Open-Source User Session Recording) se desarrolló tlog, un paquete de grabación y reproducción de I/O de terminal adecuado para implementar la grabación centralizada de sesiones de usuario.

Tlog no depende de sudo, lo cual simplifica mucho su instalación y uso. Para instalarlo, en mi caso, utilice el rpm proporcionado en github, pero también se puede clonar el repositorio y compilarlo para cada distribución.

Instalando el rpm:

[[email protected] ~]# dnf localinstall tlog-5-1.fc28.x86_64.rpm


Una vez instalado, para grabar una sesión ejecutamos:

[[email protected] ~]# tlog-rec --writer=file --file-path=tlogtest.log


A partir de entonces, todo lo que tecleemos en la terminal, incluso los errores y la corrección de los mismos, será grabada en el log.

Para salir de la grabación tecleamos:

[[email protected] ~]# exit


Para revisar la grabación de la sesión, ejecutamos

[[email protected] ~]# tlog-play --reader=file --file-path=tlogtest.log


Si quisiéramos grabar todas las sesiones de algún usuario en particular, primeramente personalizamos la configuración de la grabación y localización de los archivos en:

/etc/tlog/tlog-rec-session.conf


Y modificamos la shell que utilizará el usuario:

[[email protected] ~]# usermod -s /usr/bin/tlog-rec-session <user>

Espero les sirva… 🙂

by Alex Callejas at February 17, 2019 03:51 PM

February 16, 2019

RooTeando

Monográfico del canal de Telegram Un Día Una Aplicación

En mi canal de Telegram Un Dia Una Aplicación, @UnDiaUnaAplicacion, cada mes realizó un monográfico donde durante cinco días, Lunes a Viernes, cada día pongo una aplicación de un sola temática. A continuación muestro todos los monográficos que se han realizado en el canal.

Monográficos

 

Herramientas de programación

GitLab: https://about.gitlab.com/

Fabric: http://www.fabfile.org/

Ligth Table: http://lighttable.com/

Plastic SCM: https://www.plasticscm.com/

Repl.it: https://repl.it ...

February 16, 2019 12:11 AM

February 13, 2019

Sobre bits

Primeros pasos con PowerShell para Google Cloud Platform

Cuando alguien me pregunta si realmente merece la pena aprender a manejarse con PowerShell siempre uso como uno de los argumentos a favor el gran apoyo de los fabricantes sobre éste. Compañías como VMware, Veeam, Amazon o Google (además de la propia Microsoft) han creado módulos oficiales con los que administrar sus productos. En la entrada de hoy vamos a ver cómo empezar a utilizar PowerShell para Google Cloud Platform, la plataforma de cloud público de Google.

Primeros pasos con PowerShell para Google Cloud Platform

Un vistazo al módulo de PowerShell para Google Cloud

Las Cloud Tools for PowerShell, que es el nombre que da Google a su módulo, nos van a permitir interactuar con la sintaxis habitual de PowerShell y usar todas sus bondades directamente contra los servicios y recursos de nuestra cuenta de Google Cloud Platform.

Si bien no todos los productos de Google Cloud Platform están cubiertos en su módulo de PowerShell a fecha de hoy, podemos ver que existen cmdlets para una buena cantidad de ellos:

A fecha de hoy ésto supone una nada despreciable cifra de 144 cmdlets disponibles una vez hayamos instalado su módulo, que es lo que vamos a hacer a continuación.

Cómo instalar el módulo de PowerShell para Google Cloud

Para obtener éste módulo de PowerShell tenemos dos opciones:

  • Instalar el módulo mediante Install-Module y luego instalar el SDK de Google.
  • Instalar directamente el SDK de Google que también nos instalará el módulo de PowerShell.

Para esta entrada vamos a ir con la segunda opción, por lo que podemos dirigirnos a la página de descarga del SDK de Google para Windows y descargaremos y ejecutaremos el instalador.

La instalación básicamente es un siguiente > siguiente > siguiente, pero debemos fijarnos en que en la pantalla para elegir componentes tengamos marcado Cloud Tools for PowerShell:

PowerShell para Google Cloud

Y en la pantalla final también nos aseguraremos de dejar marcado Run ‘cloud init’ to configure the Cloud SDK para configurar nuestra conexión a Google Cloud Platform una vez finalice el asistente.

Iniciar gcloud init tras instalacion

Tras pulsar en Finish se iniciará gcloud init, el cuál nos preguntará si queremos logear en nuestra cuenta. Evidentemente introduciremos Y para logear:

Tras ésto se abrirá una nueva pestaña en nuestro navegador por defecto en la que deberemos logear con nuestra cuenta de Google y permitir el acceso que se nos solicita.

Una vez hecho deberemos volver de nuevo a nuestra pantalla de gcloud init en la que deberemos indicar:

  • Proyecto a utilizar.
  • Zona por defecto.

Y tras finalizar la configuración deberíamos recibir un mensaje indicando que la instalación de Google Cloud SDK se ha completado con éxito:

Your Google Cloud SDK is configured and ready to use!

Trasteando con el módulo de PowerShell para Google Cloud Platform

Ahora que ya lo tenemos todo listo podemos empezar a cacharrear con nuestros nuevos cmdlets. Si queremos ver una lista completa de los cmdlets disponibles podemos ejecutar:

Get-Command -Module GoogleCloud

Si queremos ver el detalle de la funcionalidad de algún cmdlet podemos acudir a la referencia del módulo o bien ejecutar Get-Help sobre alguno de ellos.

A partir de aquí toca trastear el módulo. Algo que podríamos querer hacer sería programar un backup de algún archivo o carpeta hacia nuestro Google Cloud Storage. El procedimiento para ello sería sencillísimo.

Primero creamos el bucket donde guardaremos nuestro backup con New-GcsBucket:

 
New-GcsBucket -Name "sobrebits" -StorageClass COLDLINE 

Name        TimeCreated         Updated 
----        -----------         ------- 
sobrebits   10/02/2019 21:34:30 10/02/2019 21:34:30 

Con -Name le damos nombre al bucket y con -StorageClass seleccionamos el tipo de almacenamiento del bucket.

Y posteriormente creamos un nuevo objeto en nuestro bucket con New-GcsObject utilizando el que queremos copiar:

 
New-GcsObject -Bucket sobrebits -File C:\Scripts\Archivo_para_backup.txt -ObjectName "Archivo_par a_backup$((Get-Date).Day)" 

Name                      Size ContentType TimeCreated         Updated 
----                      ---- ----------- -----------         ------- 
Archivo_para_backup10     0    text/plain  10/02/2019 21:44:12 10/02/2019 21:44:12 

Con -Bucket indicamos el bucket creado en el paso anterior, con -File el archivo que utilizaremos para nuestro nuevo objeto y con -ObjectName el nombre que le daremos al objeto en destino añadiendo el día del mes con Get-Date.

Con esto lo último que nos faltaría sería programar una tarea de PowerShell que ejecutara esta última línea cada día y ya tendríamos nuestro backup externalizado a GCP con PowerShell en 2 minutos.

Conclusión

Y hasta aquí esta entrada introductoria sobre PowerShell para Google Cloud Platform. En próximas entradas nos centraremos en algunos de los productos de GCP para ver qué somos capaces de hacer con PowerShell y qué posibilidades de automatización tenemos con éste módulo.

¡Os espero en la próxima!

La entrada Primeros pasos con PowerShell para Google Cloud Platform aparece primero en Sobrebits.

by Marc Meseguer at February 13, 2019 01:30 PM

February 10, 2019

RooTeando

Entrevista En Diferido 3: Pedro, alias Mosquetero Web.

Hoy empezamos la tercera entrevista en @EntrevistaEnDiferido a Pedro, alias Mosquetero Web, podcaster  youtuber,usuario de Linux y Chromebook, profesor y mucho mas.

 

Entrevista En Diferido. Buenas Pedro,la primera pregunta sería una pequeña presentación por parte del entrevistado para que los lectores puedan conocerte un poco. 

¿Te podrías presentar en unas líneas?

 

Pedro.  Hola, soy Pedro Mosqueteroweb quiero dar las gracias a Jose por contar conmigo y desearle mucho éxito ...

February 10, 2019 09:55 PM

February 08, 2019

RooTeando

Tomando Un Café 51: Probando Linux, cambiando mentalidad

Nuevo audio con una reflexión sobre como probar Linux pero desde un punto de vista mas filosófico, el  cambio de mentalidad que requiere y el proceso de adptación que requiere para entender Linux para poder utilizarlo correctamente.

Música: Chad Crouch- Western Tanager- Bird Watching: Piano Preludes.
 

Canales de Telegram @UnDiaUnaAplicacion @UnPythonAldia @AprendePython
Podcast @RadioDev  @ARMparaTODOS @RadioDev

Grupos de Telegram
Alternativas a la Raspberry
https://t.me/AlternativasRaspberry

Twitter 
Podcast
https://twitter.com ...

February 08, 2019 11:48 PM

February 06, 2019

Sobre bits

Migrar VMs de datastore masivamente con PowerCLI

Recientemente por un renovación de storage en una infraestructura VMware tuvimos que migrar de forma masiva un gran número de máquinas virtuales desde una LUN del storage antiguo a varias del nuevo. Dado que era una gran cantidad de VMs todas ellas productivas queríamos hacer el cambio con el menor impacto posible, por lo que me decidí a crear este pequeño script con el que migrar vms de datastore masivamente con PowerCLI de forma secuencial.

Migrar VMs de datastore masivamente con PowerCLI

Requisitos del script

Como apuntaba en la introducción ante todo requeríamos que el rendimiento de las máquinas virtuales del entorno se viera afectado lo mínimo posible y, evidentemente, que no tuvieramos problemas de espacio en ninguna LUN ni nada por el estilo. Es por ello que el script dispone de esta “funcionalidad”:

  • Migración de VMs de forma secuencial: Para evitar posibles problemas en la red o en el rendimiento de las cabinas de origen y destino el script migra VMs una a una. La migración de la siguiente máquina virtual no empieza hasta que la anterior finaliza.
  • Balanceo de máquinas virtuales entre las LUNs destino: Dado que teníamos más de una LUN de destino en la que poner las máquinas virtuales el script migra siempre la VM hacia el datastore más vacío (también funciona con una sola LUN destino).
  • Revisión del espacio libre en las LUNs destino: Evidentemente lo que nunca puede pasar es que el datastore destino se quede sin espacio. Es por ello que antes de iniciar una migración se comprueba que existe espacio en la LUN (contando con una reserva del 10% de espacio libre) y de no haberlo se para el script con un error.

Script para migrar VMs de datastore masivamente con PowerCLI

Ahora que ya está claro lo que obligatoriamente debía hacer el script vamos a ver el código:

############### CONFIGURACION ###############
# Obtenemos la lista de VMs
$Vms = Get-Content C:\Scripts\VMs.txt

# Definimos los datastores de destino
$DestinationDatastores = 'New_Datastore1','New_Datastore2'
#############################################

# Recorremos las VMs
ForEach ($Vm in $Vms) {
    # Determinamos el datastore menos ocupado
    $DestinationDatastore = Get-Datastore -Name $DestinationDatastores | Sort-Object -Property FreeSpaceGB -Descending | Select-Object -First 1

    # Calculamos el 10% del datastore como reserva
    $WarningSpace = $DestinationDatastore.CapacityGB * 0.10

    # Comprobamos que exista espacio en el datastore de destino
    if ((Get-VM $Vm).UsedSpaceGB -gt ($DestinationDatastore.FreeSpaceGB - $WarningSpace)) {
        Write-Error -Message "Espacio disponible insuficiente para mover $Vm a $($DestinationDatastore.Name)" -ErrorAction Stop
    }

    # Movemos la VM
    Get-VM $Vm | Move-VM -Datastore $DestinationDatastore -RunAsync

    # Esperamos a que haya finalizado el movimiento
    Do {
        Start-Sleep -Seconds 30
    }
    While ($(Get-VM -Name $Vm | Get-Datastore | Select-Object -ExpandProperty Name) -notcontains $DestinationDatastore.Name)
}

Como veis tampoco es un script muy extenso, vamos a ver el detalle de lo que hace:

  • 3: Obtenemos el listado de VMs a migrar de un archivo .txt con un nombre de VM por línea. (Podemos extraerlas con Get-VM)
  • 6: Declaramos los datastores en los que alojaremos las máquinas virtuales migradas.
  • 10-30: Recorremos las VMs del archivo una a una.
    • 12: Seleccionamos el datastore menos ocupado.
    • 15: Calculamos el 10% del tamaño total del datastore.
    • 18-19: Comprobamos que exista espacio en el datastore y de no haberlo lanzamos error y finalizamos el script.
    • 23: Migramos la VM de datastore.
    • 26-29: Esperamos hasta que la máquina virtual se haya migrado al datastore de destino.

Conclusión

Y hasta aquí la entrada de hoy, si como yo os enfrentáis en el futuro a una migración de cabina dadle una oportunidad al script o adaptadlo a vuestro gusto, os puede ahorrar mucho tiempo mirando como la barrita de progreso va avanzando :-).

¡Hasta la próxima!

La entrada Migrar VMs de datastore masivamente con PowerCLI aparece primero en Sobrebits.

by Marc Meseguer at February 06, 2019 12:34 PM

RooTeando

Tomando Un Café 50: Opiniones

Nuevo audio con una reflexión sobre las opiniones sin conocimiento, cuando alguién opina sobre un tema sin haberse informado o utilizado previamente. Todo esto me ha surgido después de escuchar el último audios de podcast PodcastInside.
 

Podcast Inside https://tupodcast.com/podcastinside/
Blog https://www.systeminside.net/

 

Canales de Telegram @UnDiaUnaAplicacion @UnPythonAldia @AprendePython
Podcast @RadioDev  @ARMparaTODOS @RadioDev

Grupos de Telegram
Alternativas a la Raspberry
https://t.me/AlternativasRaspberry

Twitter 
Podcast
https ...

February 06, 2019 11:00 AM

January 30, 2019

Sobre bits

PSRemoting (Parte 3): Cómo utilizar PowerShell Remoting

Ahora que tenemos claro qué es PowerShell Remoting y cómo habilitarlo es hora de pasar a la acción. En la entrada de hoy veremos las distintas formas de utilizar PowerShell Remoting para poder sacar el máximo partido a esta tecnología.

Aquí tenéis el índice de la serie:

Cómo utilizar PowerShell Remoting

PowerShell Remoting de forma interactiva con Enter-PSSession

Como decía en la introducción de la entrada, existen distintas formas de utilizar PowerShell Remoting. La primera que veremos será la sesión interactiva, cuya funcionalidad gira entorno al cmdlet Enter-PSSession.

¿Qué es el modo interactivo de PowerShell Remoting?

Podemos pensar en el modo interactivo de PowerShell Remoting como en el Telnet o SSH de PowerShell. Cuando iniciamos una sesión interactiva de PSRemoting contra una máquina remota obtenemos una sesión de PowerShell que a todos los efectos es como si la ejecutáramos en dicha máquina. Los comandos ejecutados durante una sesión interactiva se ejecutarán en la máquina remota y serán mostrados en nuestra consola de PowerShell.

Cuando utilizamos Enter-PSSession debemos tener ciertas cosas en consideración:

  • Como hemos indicado anteriormente, los comandos se ejecutan en la máquina remota.
  • Por lo indicado en el punto anterior los módulos de PowerShell que queramos utilizar deberán existir en la máquina destino, así como variables de entorno, archivos y cualquier cosa que invoquemos desde la sesión remota.
  • Sólo se puede ejecutar una sesión remota a la vez en una misma consola de PowerShell.
  • Cuando iniciamos la conexión no se utiliza ningún perfil de PowerShell.
  • No se puede hacer una nueva sesión remota desde una ya existente.
Cómo utilizar PowerShell Remoting de forma interactiva

Utilizar PowerShell Remoting de forma interactiva es muy sencillo. Si PSRemoting está habilitado lo único que deberemos hacer es ejecutar:

# En un entorno de dominio no requeriremos introducir credenciales si estamos logeados con un usuario con permisos de administrador en la máquina destino:
Enter-PSSession -ComputerName DC01
# De no ser así podemos aportar las credenciales:
$Creds = Get-Credential
Enter-PSSession -ComputerName DC01 -Credential $Creds

Una vez estemos logeados en la máquina remota deberíamos ver algo parecido a esto:

Sesión PSRemoting con Enter-PSSession

Como podemos ver el principio de nuestro prompt ha cambiado y ahora podemos ver el nombre de la máquina seguido de dos puntos ([DC01]:), lo que nos ayudará a distinguir la máquina en la que vamos a ejecutar nuestros comandos.

Si queremos comprobar que realmente estamos en la máquina remota podemos ejecutar hostname:

Hostname en Enter-PSSession

A partir de aquí somos libres de ejecutar las acciones que requiramos y cuando queramos salir únicamente deberemos ejecutar exit para volver a nuestra sesión local.

Ejecutar comandos remotos con PowerShell Remoting

Otra forma de ejecutar PowerShell Remoting es mediante la ejecución remota de comandos, que como veremos a continuación desbloquea algunas opciones interesantes para nuestras automatizaciones.

¿En qué consiste la ejecución remota de comandos con PowerShell Remoting?

La ejecución remota de comandos con PowerShell Remoting consiste en mandar uno o más comando para ser ejecutados en la máquina remota. La diferencia fundamental con la sesión interactiva es que después de la ejecución de nuestros comandos se nos devuelve el control del prompt en nuestra máquina local.

Los puntos a tener en cuenta en este modo son los mismos que en la sesión interactiva. Este tipo de ejecución, en contra de lo que ocurre en la sesión interactiva, nos va a permitir ejecutar comandos remotos a múltiples máquinas a la vez de forma paralela.

Ejecutar comandos remotos de PowerShell Remoting contra una sola máquina (1:1)

Para ejecutar comandos de forma remota utilizando PowerShell Remoting utilizaremos Invoke-Command.

Hay distintas formas de pasar los comandos a nuestra máquina remota. Para empezar podemos utiliza el parámetro -ScriptBlock, con el que enviaremos los comandos directamente desde Invoke-Command:

Invoke-Command con ScriptBlock

Aquí podemos ver un par de cosas interesantes:

  • El contenido de -ScriptBlock debe ir entre {} y tenemos total libertad para escribir las órdenes que deseemos.
  • La salida del ScriptBlock es la misma que si lo ejecutáramos en local con la diferencia de que se añade una propiedad PSComputerName que indica la máquina en la que se ha ejecutado el ScriptBlock.

En el caso de que queramos enviar órdenes complejas es posible que escribir todo dentro del ScriptBlock resulte poco usable. Es por ello que podemos valernos de -FilePath, un parámetro que nos permitirá pasarle un archivo .ps1 con el script a ejecutar de forma remota.

Invoke-Command con FilePath

Como podemos ver la salida es la misma, pero no hemos tenido que escribir los comandos dentro de Invoke-Command.

Ejecutar comandos remotos de PowerShell Remoting contra múltiples máquinas (1:N)

Donde Invoke-Command alcanza todo su potencial es en la ejecución contra múltiples máquinas a la vez. Invoke-Command nos permite reducir tareas que implicarían horas a unos pocos segundos gracias a su ejecución masiva.

Si queremos ejecutar una tarea contra múltiples máquinas a la vez únicamente deberemos facilitar un parámetro -ComputerName con los nombres de todas las máquinas contra las que ejecutar nuestros comandos:

Invoke-Command multiples destinos

En este caso coge más sentido la propiedad PSComputerName, que nos permitirá diferenciar a qué máquina corresponde cada línea. Aquí podemos ver que DC01 tiene más shares que SRV01 puesto que se trata de un DC.

Algo interesante de Invoke-Command es que por defecto nos permite la ejecución en paralelo en todas las máquinas que facilitemos. Esto se resume en tiempos mucho más cortos a la hora de ejecutar tareas de forma masiva. Veamos un ejemplo en el que ejecutamos Get-Process en nuestras dos máquinas:

Invoke-Command multiples destinos tiempos

Como podemos ver por los tiempos de respuesta, cuando ejecutamos Get-Process sobre las máquinas individuales tardamos unos 7-10 segundos en obtener la respuesta. Al lanzarlo sobre ambas máquinas a la vez el comando se ejecuta en el mismo tiempo. Evidentemente esta ganancia de tiempo será cada vez mayor conforme aumentemos el número de máquinas a procesar.

Estos tiempos pueden variar según la carga de los servidores y de la latencia de la red, pero nos ayudan a darnos cuenta de la ejecución paralelizada de Invoke-Command.

Conclusión

Hasta aquí esta nueva entrega sobre PowerShell Remoting. Os recomiendo que introduzcáis ésta tecnología en vuestras automatizaciones ya que os harán la vida mucho más facil y os ahorrará una cantidad de tiempo brutal.

¡Nos vemos en la próxima!


La entrada PSRemoting (Parte 3): Cómo utilizar PowerShell Remoting aparece primero en Sobrebits.

by Marc Meseguer at January 30, 2019 01:04 PM

January 28, 2019

RooTeando

Entrevista en Diferido 02: Joseda

Comenzamos la segunda entrevista del canal de Telegram @EntrevistaEnDiferido, donde se realiza una entrevista a lo largo de una semana.

El entrevistado es mi ccompañero del podcast @RadioDev  , Joseda, desarrollador web. 

Entrevista En Diferido.  Buenas Joseda,  ,la primera pregunta sería una presentación por parte del entrevistado para que los lectores puedan conocerte un poco. 

¿Te podrías presentar en unas líneas?

Joseda. Hola Jose, antes que nada, encantado de estar ...

January 28, 2019 06:41 AM

Tomando Un Café 49: Charla con Lorenzo (alias atareao)

 

Audio nuevo con invitado, una charla muy amena con Lorenzo, del blog y podcast atareao, donde hablamos de muchos ; comunidades, documentación y fragmentación en Linux, programación, git, Django, Flask, podcast y mas temas.  

Canales de Telegram @UnDiaUnaAplicacion @UnPythonAldia @AprendePython
Podcast @RadioDev  @ARMparaTODOS @RadioDev

Grupos de Telegram
Alternativas a la Raspberry
https://t.me/AlternativasRaspberry

Twitter 
Podcast
https://twitter.com/Tomando_Un_Cafe
https://twitter.com/RadioDevPodcast

Canales de Telegram
Un Día Una Aplicación ...

January 28, 2019 06:39 AM

January 23, 2019

debianhackers.net

DataDetox: controla tu presencia on-line

De la mano del Tactical Technology Collective y la Fundación Mozilla llega esta fantástica iniciativa que busca concienciar sobre privacidad on-line. Decenas de aplicaciones y sitios web rastrean a diario nuestra actividad, preferencias de navegación y gustos en busca de un trocito del suculento pastel del Big Data.

¿Conoces tu huella digital? ¿Qué saben las redes de ti? ¿Y qué sabes tú de lo que las redes hacen con tus datos?

DataDetox nos invita a indagar en nuestra huella digital, descubrir cual es nuestra identidad on-line y prevenir la fuga masiva de datos a la que estamos expuestos.

8 días, menos de media hora al día ¿te atreves?

Ahí va el programa:

Día 0.- ¿Por qué Detox? Nos vamos preparando.

Día 1.- Descubrir. ¿Quién eres según otras personas?

Día 2.- Todo en un mismo lugar. ¿Cuánto te conoce Google?

Día 3.- Ser sociable. Desintoxicando tus cuentas en redes sociales.

Día 4.- Buscar&navegar. ¿Qué estás compartiendo a través de tu navegador?

Día 5.- Conectando. ¿Con quién habla tu móvil?

Día 6.- Limpieza. Hora de limpiar nuestras aplicaciones.

Día 7.- ¿Quién crees que eres? Porqué crear perfiles no se trata simplemente de mostrarte anuncios.

Día 8.- Creando un nuevo yo. Convierte tu “data detox” en un nuevo estilo de vida.

by Debish at January 23, 2019 05:00 PM

January 17, 2019

Sobre bits

Corregir VMs con Sistema Operativo invitado mal configurado con PowerCLI

Un error común que podemos encontrarnos en infraestructuras vSphere es el de tener máquinas virtuales cuya versión de Sistema Operativo difiere entre la configurada en ESXi/vCenter y la del SO instalado en la máquina virtual en si. Ésto puede ocurrir en el caso de que se actualice el sistema operativo de la máquina virtual o simplemente por una mala configuración inicial. En la entrada de hoy veremos cómo detectar y corregir VMs con el Sistema Operativo invitado mal configurado con PowerCLI para asegurarnos de tener el mínimo de parada de servicio en el proceso.

Corregir VMs con Sistema Operativo invitado mal configurado con PowerCLI

Cómo detectar éstas Máquinas Virtuales

El primer paso para acabar con este problema de configuración será detectar exáctamente qué máquinas virtuales están afectadas. Hacerlo máquina por máquina si disponemos de muchas puede ser un proceso tedioso, pero la buena noticia es que con PowerCLI podemos listarlas todas con un solo one-liner (aunque un poco largo):

Get-VM | 
Where-Object {$_.ExtensionData.Config.GuestFullName -ne $_.ExtensionData.Guest.GuestFullName -and $_.ExtensionData.Guest.GuestFullName -ne $null} | 
Select-Object Name,@{N="SO configurado";E={$_.ExtensionData.Config.GuestFullName}},@{N="SO activo";E={$_.ExtensionData.Guest.GuestFullName}}

Vamos a verlo paso por paso:

  • Get-VM: Listamos todas las máquinas virtuales.
  • Where-Object: Filtramos los resultados con las siguientes condiciones:
    • $_.ExtensionData.Config.GuestFullName -ne $_.ExtensionData.Guest.GuestFullName: Objetos cuyo SO invitado difiera entre el activo y el configurado.
    • $_.ExtensionData.Guest.GuestFullName -ne $null: Objetos cuyo SO activo no esté vacío (máquinas virtuales apagadas o sin VMware Tools).
  • Select-Object: Seleccionamos los campos deseados para el objeto devuelto:
    • Name: El nombre de la máquina virtual.
    • @{N=”SO configurado”;E={$_.ExtensionData.Config.GuestFullName}}: El sistema operativo configurado.
    • @{N=”SO activo”;E={$_.ExtensionData.Guest.GuestFullName}}: El sistema operativo activo.
    • Get-VM: Listamos todas las máquinas virtuales.
  • Where-Object: Filtramos los resultados con las siguientes condiciones:
    • $_.ExtensionData.Config.GuestFullName -ne $_.ExtensionData.Guest.GuestFullName: Objetos cuyo SO invitado difiera entre el activo y el configurado.
    • $_.ExtensionData.Guest.GuestFullName -ne $null: Objetos cuyo SO activo no esté vacío (máquinas virtuales apagadas o sin VMware Tools).
  • Select-Object: Seleccionamos los campos deseados para el objeto devuelto:
    • Name: El nombre de la máquina virtual.
    • @{N=”SO configurado”;E={$_.ExtensionData.Config.GuestFullName}}: El sistema operativo configurado.
    • @{N=”SO activo”;E={$_.ExtensionData.Guest.GuestFullName}}: El sistema operativo activo.

Si este one-liner no nos devuelve nada quiere decir que no tenemos máquinas virtuales con este problema. En caso de tener máquinas virtuales afectadas veremos una salida parecida a la siguiente:

VMs mal configuradas

Como podemos ver en la captura tenemos tres máquinas virtuales mal configuradas, una con WS2012, una con WS2008R2 y otra con WS2008 cuando todas ellas en realidad corren Windows Server 2016.

Si la lista es muy grande y queremos mejorar su manejo podemos exportarla a Excel como vimos en entradas anteriores:

Get-VM | Where-Object  {$_.ExtensionData.Config.GuestFullName -ne  $_.ExtensionData.Guest.GuestFullName -and  $_.ExtensionData.Guest.GuestFullName -ne $null} | Select-Object  Name,@{N="SO  configurado";E={$_.ExtensionData.Config.GuestFullName}},@{N="SO  activo";E={$_.ExtensionData.Guest.GuestFullName}} | Export-Excel -Path 'C:\Scripts\SO_mismatch.xlsx' -AutoSize -BoldTopRow -AutoFilter

Con lo que obtendremos nuestro bonito Excel ya filtrado:

VMs mal configuradas Excel

Corregir el Sistema Operativo invitado mal configurado con PowerCLI de forma masiva

Ahora que ya tenemos localizadas las máquinas virtuales que queremos reconfigurar podemos pasar a crear un mini script para arreglar nuestro problema. Lo que queremos que haga nuestro script es lo siguiente:

  • Apagar la máquina virtual a reconfigurar (el cambio debe hacerse en frío).
  • Cambiar el sistema operativo configurado por el correcto.
  • Volver a encender la máquina virtual.

Nada muy complicado, esto es lo que os propongo:

#### Variables ####
# Conexión a vCenter
$vcenterIp = "192.168.168.168"
$vcenterCreds = Import-Clixml -Path "$PSScriptRoot\Credenciales\VMware_rw.xml"

# Obtenemos VMs
$vmNames = 'Test-1','Test-2','Test-3'

#### Cuerpo script ####
# Conectamos al vCenter
Connect-VIServer -Server $vcenterIp -Credential $vcenterCreds -WarningAction SilentlyContinue | Out-Null

# Recorremos las VMs
ForEach ($vmName in $vmNames) {
    # Obtenemos la VM
    $vm = Get-VM -Name $vmName
    # Apagamos la VM
    $vm | Shutdown-VMGuest -Confirm:$false | Out-Null

    # Esperamos hasta que la VM se apaga
    do {
        Start-Sleep -Seconds 5
        $vm = Get-VM $vm.Name
    } until ($vm.PowerState -eq 'PoweredOff')

    # Modificamos el Guest ID de la VM
    $vm | Set-VM -GuestId windows9Server64Guest -Confirm:$false | Out-Null
    Start-Sleep -Seconds 5
    # Iniciamos la VM
    $vm | Start-VM -Confirm:$false | Out-Null
}

# Cerramos conexión
Disconnect-VIServer -Confirm:$false

Si bien el script tiene comentarios bastante explicativos voy a desarrollarlo un poco más:

  • 3-4: Definimos los datos de conexión al vCenter.
  • 7: Definimos los nombres de los servidores a corregir.
  • 11: Conectamos a vCenter.
  • 14-31: Recorremos las VMs a corregir y:
    • 18: Apagamos la VM.
    • 20-24: Esperamos hasta que la VM haya finalizado el apagado.
    • 27: Configuramos el Sistema Operativo invitado correctamente.
    • 30: Encendemos la VM.
  • 34: Desconectamos del vCenter.

En la línea 27 veréis que utilizo ‘windows9Server64Guest‘ para configurar Windows 2016 Server de 64 bits en la máquina virtual. Existe una lista con todos los códigos que podéis utilizar para cada sistema operativo a corregir. Deberéis sustituir éste código por el correspondiente de la versión de sistema operativo que queréis configurar.

Una vez haya finalizado la ejecución de nuestro script si volvemos a ejecutar nuestro one-liner del punto anterior veremos como éstas VMs no aparecen.

Resumen

Es importante mantener la configuración de sistema operativo invitado de forma correcta pues una mala configuración puede provocar problemas de rendimiento, problemas al instalar y actualizar las VMware Tools o imposibilidad de realizar algunos ajustes en las máquinas virtuales.

Debido a que el procedimiento implica parada os recomiendo que programéis una tarea de PowerShell para realizar el proceso fuera de horario de producción para reducir el impacto en vuestros sistemas.

La entrada Corregir VMs con Sistema Operativo invitado mal configurado con PowerCLI aparece primero en Sobrebits.

by Marc Meseguer at January 17, 2019 01:00 PM

January 16, 2019

RooTeando

ARM para TODOS: 07: Lista de placas ARM favoritas.

En este audio hablaré sobre el objetivo de este podcast y del grupo, también comentaré una lista de mis 5 placas, alternativas a la Raspberry, favoritas.

Lista
▪️Banana Pi R2 http://www.banana-pi.org/r2.html

▪️ Banana Pi W2 http://www.banana-pi.org/w2.html

▪️ Libre Computer Renegade  https://libre.computer/products/boards/roc-rk3328-cc/

▪️Rock 64 Pro  https://www.pine64.org/?page_id=61454

▪️Rock Pi 4 http://rockpi.org/

Música:  Pierce M-To Japan-02 So ...

January 16, 2019 12:05 PM

January 13, 2019

RooTeando

Entrevista en Diferido 01: Daniel Primo

Cada entrevista que finalice una entrevista en el canal de Telegram de Entrevista En Diferido, https://t.me/entrevistaendiferido, la convertiré a un post en mi blog. 

Comenzamos con la primera entrevista a Daniel Primo, desarrollador web, podcaster con Web Reactiva y otros proyectos.

EntrevistaEnDiferido Hoy empezamos una entrevista a Daniel Primo desarrollador web freelance, podcaster, youtuber,emprendedor y compañero del podcast RadioDev. Buenas Daniel,la primera pregunta sería una pequeña presentación por parte ...

January 13, 2019 03:36 PM

January 10, 2019

Sobre bits

PSRemoting (Parte 2): Cómo configurar PowerShell Remoting

Ahora que ya sabemos qué es y cómo funciona PowerShell Remoting gracias a la entrada anterior de la serie, estamos listos para empezar con la acción. En la entrada de hoy veremos cómo configurar PowerShell Remoting tanto en origen como en destino para empezar a ponernos en marcha.

Os dejo el índice de la serie:

Cómo configurar PowerShell Remoting

Configuraciones necesarias en la máquina destino

Si bien no es estrictamente necesario conocer el detalle de qué necesita tener configurado una máquina para poder conectarnos a ella mediante PowerShell Remoting, sí que es interesante conocer las distintas partes involucradas. Ésto va a sernos útil en el caso de que queramos hacer troubleshooting de una conexión y, en el caso de que queramos habilitar PowerShell Remoting mediante GPO, se va a volver imprescindible. Las configuraciones necesarias son las siguientes:

  • Configurar el servicio de escucha de WinRM.
  • Habilitar el servicio de WinRM para el autoarranque.
  • Crear una regla en el firewall local de la máquina para aceptar el tráfico entrante de WinRM.

Para nuestra suerte desde Windows Server 2012 estas tres configuraciones vienen habilitadas por defecto, por lo que en dichos sistemas (si no se ha deshabilitado después de la instalación alguno de estos puntos) no haría falta realizar ninguna configuración extra a no ser que intentemos conectar desde una subnet distinta a la de la máquina, puesto que la regla de Firewall por defecto no permite el tráfico desde subredes distintas en redes públicas.

Habilitar PowerShell Remoting en destino mediante Enable-PSRemoting

Sin duda a la hora de configurar PowerShell Remoting la opción más sencilla es utilizar Enable-PSRemoting siempre y cuando queramos habilitarlo en unas pocas máquinas, pues tendremos que ejecutar este cmdlet en cada una de ellas. Enable-PSRemoting se va a encargar de habilitar PowerShell Remoting sin más intervención por nuestra parte. Es importante remarcar también que no se requiere reinicio para aplicar los cambios.

Para usarlo abriremos una consola de PowerShell como administrador y ejecutaremos:

Enable-PSRemoting -Force

Ejecutamos el cmdlet con -Force para que no pida confirmaciones.

Una vez finalice la ejecución ya tendremos lista nuestra máquina.

Si estamos realizando esta operación en una máquina Windows cliente y no estamos en dominio es muy probable que nos encontremos con el siguiente error:

La excepción de firewall de WinRM no funcionará porque uno de los tipos de conexión de red de este equipo está establecido en Público. Cambie el tipo de conexión de red a Dominio o Privado e inténtelo de nuevo.

Para corregirlo deberíamos ejecutar Enable-PSRemoting con el parámetro SkipNetworkProfileCheck, con el que se crearía la regla igualmente pese a estar en una red pública:

Enable-PSRemoting -Force -SkipNetworkCheck

Por último, si quisiéramos acceder a nuestras máquinas (tanto Windows Server como cliente) desde una subnet distinta deberíamos modificar la regla de Firewall creada que por Enable-PSRemoting para que acepte peticiones desde cualquier dirección remota:

Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP" -RemoteAddress Any

Habilitar PowerShell Remoting en destino mediante GPO

Si bien configurar PowerShell Remoting mediante GPO es un poco más laborioso que hacerlo con Enable-PSRemoting, nos va a permitir hacerlo en gran cantidad de máquinas de una sola vez y asegurarnos de que nadie deshabilita PowerShell Remoting.

Para ello crearemos una nueva política de grupo en la que realizaremos las siguientes tres configuraciones.

Configurar el servicio de escucha de WinRM

Configuración del equipo > Directivas > Plantillas administrativas > Administración remota de Windows (WinRM) > Servicio WinRM > Permitir la administración de servidores remotos a través de WinRM

Habilitar WinRM GPO 1


Configurar autoarranque del servicio de WinRM

Configuración del equipo > Directivas > Configuración de Windows > Configuración de seguridad > Servicios del sistema > Administración remota de Windows (WS-Management)

Configurar el Firewall de Windows

Configuración del equipo > Configuración de Windows > Configuración de seguridad > Firewall de Windows con seguridad avanzada > Reglas de entrada

Aquí haremos clic derecho y pulsaremos en nueva regla.

Habilitar WinRM GPO 3
Habilitar WinRM GPO 4
Habilitar WinRM GPO 5

Si queremos permitir la conexión por PowerShell Remoting desde una subred distinta deberemos hacer botón derecho en la regla de perfil Público creada y en la pestaña Ámbito permitir cualquier dirección IP remota:

Habilitar WinRM GPO 6

Después de aplicar la GPO a las máquinas correspondientes ya deberíamos ser capaces de conectar mediante PowerShell Remoting.

Comprobar conectividad de PSRemoting

Una vez tenemos PowerShell Remoting en nuestra máquina destino deberemos probar que la conectividad funciona correctamente. Para ello nos valdremos del cmdlet Test-WSMan:

Uso de Test-WSMan

Si tras ejecutarlo nos devuelve una salida parecida a la siguiente sin errores quiere decir que hemos triunfado.

Configurar PowerShell Remoting en origen

Por último, si planeamos utilizar PowerShell Remoting en un entorno fuera de dominio de Active Directory deberemos realizar un pequeño cambio en nuestra máquina cliente (si vas a utilizar PowerShell Remoting en dominio puedes ignorar este paso).

Si intentamos una conexión remota sin hacer cambios en un entorno de dominio encontraremos el siguiente error:

El cliente WinRM no puede procesar la solicitud. Si el esquema de autenticación es distinto de Kerberos o si el equipo cliente no está unido a un dominio, se debe usar el transporte HTTPS o agregar el equipo de destino al valor de configuración TrustedHosts. Use winrm.cmd para configurar TrustedHosts. Tenga en cuenta que es posible que no se autentiquen los equipos de la lista TrustedHosts.

El error es muy autoexplicativo: por motivos de seguridad, si la autenticación no se realiza por Kerberos o si el equipo cliente no está unido a dominio tenemos que elegir una de las siguientes opciones para realizar la conexión:

  • Utilizar WS-Man sobre HTTPS.
  • Añadir el equipo destino a la configuración TrustedHosts.

Por el momento vamos a ver cómo modificar la configuración de TrustedHosts (PowerShell con permisos de administrador):

# Añadir una máquina de destino:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value '192.168.253.10'
# Añadir múltiples máquinas destino:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value '192.168.253.10,192.168.253.11'
# Añadir un wildcard para permitir todas las máquinas destino (inseguro)
Set-Item WSMan:\localhost\Client\TrustedHosts -Value '*'

Después de esto ya deberíamos ser capaces de conectarnos a las máquinas destino que deseemos.

Cómo deshabilitar PowerShell Remoting

Por último, si queremos deshabilitar PowerShell Remoting disponemos de dos opciones:

  • Utilizar el cmdlet Disable-PSRemoting.
  • Crear una GPO que haga lo contrario de la que hemos visto en puntos anteriores.

Resumen

A modo de resumen, debido a que existen distintos escenarios a cubrir y puede parecer un poco lioso, estas son las acciones que hay que realizar según cada escenario posible:

  • Si vas a utilizar PSRemoting en dominio:
    • Servidores destino iguales o superiores a Windows 2012: No es necesario configurar nada.
    • Servidores destino anteriores a Windows 2012: Hay que habilitar PSRemoting con GPO o Enable-PSRemoting.
  • Si vas a utilizar PSRemoting fuera de dominio:
    • Máquinas en la misma subnet: Habilitar PSRemoting con GPO o Enable-PSRemoting y modificar TrustedHosts.
    • Máquinas en distinta subnet: Habilitar PSRemoting con GPO o Enable-PSRemoting, modificar TrustedHosts y modificar regla de Firewall.

Espero que os haya servido la entrada. En la próxima vamos a empezar a trastear con PowerShell Remoting y ver qué podemos hacer.

La entrada PSRemoting (Parte 2): Cómo configurar PowerShell Remoting aparece primero en Sobrebits.

by Marc Meseguer at January 10, 2019 01:16 PM

January 07, 2019

RooTeando

Tomando Un Café 48: Nuevo proyecto en Telegram

En este audio hablo sobre mi nuevo proyecto en Telegram, un canal para realizar entrevistas. Explicaré un poco el funcionamiento del proyecto y porque lo he creado.

 

Canales de Telegram @UnDiaUnaAplicacion @UnPythonAldia @AprendePython
Podcast @RadioDev  @ARMparaTODOS @RadioDev

Grupos de Telegram
Alternativas a la Raspberry
https://t.me/AlternativasRaspberry

Twitter 
Podcast
https://twitter.com/Tomando_Un_Cafe
https://twitter.com/RadioDevPodcast

Canales de Telegram
Un Día Una Aplicación https://twitter.com/UnDiaUnaApp
Un Python Al ...

January 07, 2019 10:00 PM

January 03, 2019

Sobre bits

PSRemoting (Parte 1): ¿Qué es PowerShell Remoting?

Si bien ejecutando scripts de PowerShell de forma local en nuestras máquinas y servidores podemos realizar grandes automatizaciones, cuando PowerShell empieza a brillar es cuando ejecutamos acciones directamente en máquinas remotas y de forma masiva. Empezamos esta serie de entradas en la que profundizaremos sobre esta tecnología viendo qué es PowerShell Remoting y cómo funciona.

Os dejo el índice de la serie:

Qué es PowerShell Remoting

¿Qué es PowerShell Remoting?

PowerShell Remoting es una tecnología introducida en Windows PowerShell 2.0 (y refinada en Windows PowerShell 3.0) con la cual podremos ejecutar órdenes de PowerShell en máquinas remotas a través de la red de una forma estandarizada y muy sencilla.

Con PowerShell Remoting conseguimos la capacidad de administrar cientos de máquinas a la vez y ejecutar órdenes en las mismas sin la necesidad de aumentar nuestro tiempo de dedicación.

Es importante no confundir PowerShell Remoting con la capacidad que tienen algunos cmdlets como Get-Process o Get-Service de facilitar un parámetro -ComputerName con el que ejecutar dicho cmdlet de forma remota.

  • PowerShell Remoting trabaja sobre WS-Man, en cambio estos cmdlets utilizan DCOM/RPC. Tal y como vimos en la entrada sobre CIM y WMI, WS-Man es un protocolo más ‘Firewall friendly’ basado en HTTP/HTTPS que DCOM/RPC.
  • PowerShell Remoting proporciona capacidades de ejecución remota a cualquier cmdlet o función que la máquina sea capaz de ejecutar. Con DCOM/RPC cada cmdlet tiene que ser desarrollado con dicha funcionalidad.
  • Con PowerShell Remoting la carga del procesamiento de las tareas se realiza en la máquina remota, con DCOM/RPC ésta se genera en la máquina local.
  • Si realizamos una ejecución masiva a diferentes máquinas con PowerShell Remoting se ejecutan las tareas en paralelo gracias a lo comentado en el punto anterior. De hacerlo con DCOM/RPC se realizan de forma secuencial, con su correspondiente aumento de tiempos de ejecución.

¿Cómo funciona PowerShell Remoting?

Una vez entendido qué es PowerShell Remoting es importante tener claro cómo funciona para poder sacar el máximo partido de él. Para ilustrar mejor su funcionamiento he creado este diagrama donde podemos ver una transacción de PowerShell Remoting:

Cómo funciona PowerShell Remoting

PowerShell Remoting funciona a modo cliente-servidor. Cuando iniciamos una comunicación de PowerShell Remoting desde la máquina cliente ésta manda una petición utilizando WS-Man a la máquina servidor por defecto por el puerto 5985/TCP utilizando HTTP (también se puede ejecutar utilizando HTTPS en cuyo caso utilizaría el puerto 5986/TCP).

Una vez llega dicha petición a la máquina servidor el servicio WinRM (Windows Remote Management) es el encargado de recepcionarla y facilitársela al servicio de background de PowerShell para que la procese y se mantiene a la espera. Cuando el servicio de background de PowerShell finaliza la ejecución devuelve el resultado a WinRM que se encarga de devolver el resultado a la máquina cliente utilizando el mismo canal.

Requisitos de PowerShell Remoting

Como hemos visto anteriormente, PowerShell Remoting fue lanzado para Windows PowerShell 2.0, pero no fue hasta la versión 3.0 que se añadió la funcionalidad completa. Es por ello que desde Microsoft se facilitan dos “juegos” de requisitos:

Para utilizar la funcionalidad de PowerShell Remoting de PowerShell 3.0 o superior tanto cliente como servidor deben disponer de:

  • PowerShell 3.0 o superior.
  • .NET Framework 4.0 o superior.
  • Windows Remote Management 3.0.

Estos requisitos vienen instalados por defecto en todos los sistemas operativos de Microsoft a partir de Windows 8 y Windows Server 2012.

Si en cambio vamos a utilizar la funcionalidad de 2.0 tanto cliente como servidor deben disponer de:

  • PowerShell 2.0.
  • .NET Framework 2.0 o superior.
  • Windows Remote Management 2.0

Si bien podríamos realizar conexiones desde una máquina con PowerShell 2.0 a una con 3.0 dicha comunicación se realizaría perdiendo la funcionalidad que ofrece la versión 3.0.

Por último, a estos requisitos a nivel de máquina deberíamos añadir los siguientes requisitos a nivel de red:

  • Comunicación entre cliente y servidor por el puerto 5985 TCP (para utilizar WS-MAN sobre HTTPS).
  • Comunicación ente cliente y servidor por el puerto 5986 TCP (para utilizar WS-MAN sobre HTTPS).

Conclusión

Y hasta aquí la entrada de hoy, la más teórica de las de esta serie pero sin duda necesaria para entender lo que haremos en las partes más prácticas.

En la próxima entrada veremos qué opciones tenemos para habilitar PowerShell Remoting tanto en origen como en destino y así empezar a trastear con esta tecnología.

¡Nos vemos pronto!

La entrada PSRemoting (Parte 1): ¿Qué es PowerShell Remoting? aparece primero en Sobrebits.

by Marc Meseguer at January 03, 2019 02:12 PM

December 31, 2018

RooTeando

Tomando Un Café 47: Charla con Samuel de Yo Virtualizador

En este audio tengo una charla informal con Samuel, podcast Yo Virtualizador, sobre un distro de Linux que el conoce bien como Red Hat y  mi distro de cabecera que Fedora, que también conoce muy bien. Hablamos sobre diversos temas como el futuro de estas distros, los mitos que tienen, la compra de Red Hat de IBM, paquetería, aderezado con diversas opiniones sobre otros temas. Es un audio largo pero entretenido.

Este audio será el ...

December 31, 2018 02:28 PM

December 27, 2018

blog de Rodolfo Pilas

Rocket Chat super rápido con Vagrant

Rocket Chat es un excelente sistema corporativo de chat completamente software libre (clientes y servidores), con todo el glamour de un sistema de chat moderno (canales, integración, componentes embebitos, chatbots, etc. etc.)

En este Vagrantfile es posible levantarlo de forma tan simple como escribir vagrant up

# -*- mode: ruby -*-
# vi: set ft=ruby :

# https://rocket.chat/docs/installation/updating/#snap-installation
#
# Access Rocket.Chat:  http://localhost:3000

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"

  config.vm.network "forwarded_port", guest: 3000, host: 3000

  config.vm.provision "shell", inline: <<-SHELL
    snap install rocketchat-server
  SHELL
end

by pilasguru at December 27, 2018 01:51 AM

December 19, 2018

Sobre bits

Cómo ejecutar PowerShell y PowerCLI desde Docker

Con la aparición de PowerShell Core se abrió un inmenso abanico de posibilidades a la hora de ejecutar PowerShell desde distintos sistemas operativos. Hoy en día es posible ejecutar PowerShell en Linux y en MacOS, cosa que años atrás era impensable con Windows PowerShell. En los últimos tiempos son muchos los módulos que se han adaptado para poder correr en PowerShell Core, entre ellos PowerCLI. En la entrada de hoy vamos a avanzar un paso más y vamos a ver cómo ejecutar PowerShell y PowerCLI desde Docker.

Cómo ejecutar PowerShell y PowerCLI desde Docker

Descargando las imágenes de Docker de PowerShell y PowerCLI

Una de las grandes bazas a favor de Docker es la gran cantidad de imágenes de contenedores que podemos encontrar en su Docker Hub. Tanto Microsoft como VMware en los últimos tiempos han estado acercándose hacia el software libre y eso se nota en este caso, ya que podemos encontrar imágenes oficiales de Microsoft y VMware en Docker Hub para PowerShell y PowerCLI.

Si queremos descargar la imágen de Docker de PowerShell podemos ejecutar:

Descarga de imágen Docker de PowerShellPara descargar la imágen de Docker de PowerCLI ejecutaremos lo siguiente:

Descarga de imagen Docker de PowerCLI

Inspeccionando los contenedores de PowerShell y PowerCLI

Una vez tenemos los contenedores descargados podemos entrar a inspeccionarlos para ver qué tenemos dentro.

Para entrar en el contenedor de forma interactiva podemos ejecutar:

docker run --rm -it mcr.microsoft.com/powershell

Vamos a revisar parte por parte:

  • docker run: Ejecutamos un nuevo contenedor.
  • –rm: Elimina automáticamente el contenedor una vez salgamos de él.
  • -it: Ejecutamos el contenedor de forma interactiva.
  • mcr.microsoft.com/powershell: Indicamos la imagen que utilizaremos para crear nuestro nuevo contenedor.

Una vez dentro podemos ver los detalles del contenedor:

Detalles docker PowerShell

Como se aprecia en la imagen tenemos una versión 6.1.1 de PowerShell Core corriendo en una Ubuntu 18.04.

Si hacemos lo propio con la imágen de PowerCLI:

Detalles docker PowerCLIEn este caso vemos que se trata de una versión 6.0.1 de PowerShell Core corriendo sobre PhotonOS 2.0. Además podemos ver que el contenedor trae 28 módulos de VMware, con lo que desde éste podremos correr comandos contra toda clase de productos de la compañía.

Ejecutando scripts de PowerShell y PowerCLI desde Docker

Hasta aquí todo puede quedar como algo anecdótico, pero en el momento en el que somos capaces de pasarle código para ejecutar a nuestro contenedor podemos empezar a encontrar utilidad a la ejecución de PowerShell y PowerCLI desde Docker.

Para ejecutar un script dentro del contenedor necesitaremos, antes que nada, tener dicho script en alguna ubicación de la máquina que correrá el contenedor. Para nuestro caso será el siguiente script ubicado en C:\Scripts\Hola-Mundo.ps1:

Write-Host "Hola desde Sobrebits.com en PSCore $($PSVersionTable.PSVersion)"

Nada muy complicado, un simple “Hola mundo” que nos mostrará la versión de PowerShell Core de nuestro contenedor.

Ahora ya podemos pasar a ejecutarlo en ambos contenedores:

docker run --rm -it --entrypoint='/usr/bin/pwsh' -v C:/Scripts:/tmp/scripts mcr.microsoft.com/powershell /tmp/scripts/Hola-Mundo.ps1
Hola desde Sobrebits.com en PSCore 6.1.1
docker run --rm -it --entrypoint='/usr/bin/pwsh' -v C:/Scripts:/tmp/scripts vmware/powerclicore /tmp/scripts/Hola-Mundo.ps1
Hola desde Sobrebits.com en PSCore 6.0.1

Repasemos lo que acabamos de hacer:

  • docker run: Ejecutamos un nuevo contenedor.
  • –rm: Elimina automáticamente el contenedor una vez salgamos de él.
  • -it: Ejecutamos el contenedor de forma interactiva.
  • –entrypoint=’/usr/bin/pwsh’: Especificamos el ejecutable a iniciar cuando el contenedor arranca, en nuestro caso el binario de PowerShell Core.
  • -v C:/Scripts:/tmp/scripts: Montamos la carpeta C:\Scripts de nuestra máquina anfitriona en el volumen /tmp/scripts del contenedor.
  • mcr.microsoft.com/powershell: Indicamos la imagen que utilizaremos para crear nuestro nuevo contenedor.
  • /tmp/scripts/Hola-Mundo.ps1: El script que ejecutaremos mediante PowerShell Core en nuestro contenedor.

Como vemos cada contenedor ha devuelto su versión de PowerShell Core. Con esto ya deberíamos ser capaces de lanzar nuestros propios scripts tanto de PowerShell como de PowerCLI desde Docker sin problema.

Conclusión

Ejecutar scripts de PowerShell y PowerCLI desde Docker nos va a permitir hacer nuestras automatizaciones portables a cualquier plataforma capaz de correr Docker y nos puede ayudar a ejecutar scripts de PowerShell de forma programada con un menor consumo de recursos.

¡Os animo a probarlo!

La entrada Cómo ejecutar PowerShell y PowerCLI desde Docker aparece primero en Sobrebits.

by Marc Meseguer at December 19, 2018 04:00 PM

December 12, 2018

Sobre bits

Equivalentes en PowerShell a comandos de Linux

Si provienes del mundo GNU/Linux y tienes cierta experiencia en el manejo de su línea de comandos es posible que al empezar con PowerShell busques instintivamente herramientas parecidas a las que ya conoces para usarlas. La buena notícia es que Microsoft se ha encargado de facilitar lo máximo posible la transición de una shell a la otra, por lo que en la entrada de hoy revisaremos una serie de cmdlets equivalentes en PowerShell a comandos de Linux así como sus alias.

Equivalentes en PowerShell a comandos de Linux

Antes de empezar: diferencias entre sistemas operativos

Si bien en la introducción he apuntado que Microsoft ha facilitado muchísimo la transición para alguien que proviene del mundo GNU/Linux hacia PowerShell hay que tener en cuenta que las diferencias entre GNU/Linux y Windows son muy grandes.

GNU/Linux es un sistema operativo basado en texto. Cualquier configuración se realiza editando archivos de texto y es por ello que bash está repleto de herramientas para manipularlo. Herramientas que además, después de realizar sus modificaciones, devuelven texto.

Windows es un sistema operativo basado en objetos. Dada la base del sistema operativo, PowerShell está lleno de de herramientas orientadas a tratar con objetos. Herramientas que, una vez realizadas sus operaciones, devuelven objetos.

Es por ello que, si bien PowerShell también ofrece herramientas para tratar con texto, hay que tener en cuenta que éstas probablemente no sean la primera opción a escoger, puesto que la salida de nuestro comando probablemente nos estará devolviendo objetos y no texto.

Lista de equivalentes en PowerShell a comandos Linux

Con esta aclaración hecha podemos ponernos con las equivalencias:

Sistema de archivos

Aquí vamos a enumerar los distintos cmdlets relacionados con la gestión del sistema de archivos.

# cd

Para cambiar de directorio en PowerShell tenemos Set-Location:

PS C:\Script> Set-Location C:\Scripts

Alias: cd, chdir, sl

# ls

Para listar el contenido de un directorio en PowerShell podemos utilizar Get-ChildItem:

PS C:\Script> Get-ChildItem C:\Scripts


    Directorio: C:\Scripts


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       09/12/2018     20:58              0 Bienvenido a Sobrebits.txt

Alias: dir, gci, ls

# pwd

Si queremos obtener nuestra ubicación actual disponemos de Get-Location:

PS C:\Scripts> Get-Location

Path
----
C:\Scripts

Alias: gl, pwd

# find

El equivalente a find en PowerShell es, al igual que para listar el contenido de una carpeta, Get-ChildItem pero en esta ocasión con el modificador -Filter (y añadiendo -Recurse si queremos buscar de forma recursiva):

PS C:\Scripts> Get-ChildItem 'C:\Scripts' -Filter '*Bienvenido a sobrebits*' -Recurse


    Directorio: C:\Scripts\Carpeta


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       09/12/2018     21:08              0 Bienvenido a sobrebits.txt

Alias: dir, gci, ls

# touch, mkdir, cp, move y rm

Para crear un nuevo archivo o carpeta (touch y mkdir) disponemos de New-Item, para copiar un archivo o carpeta (cp) disponemos de Copy-Item, para mover un archivo o carpeta (mv) tenemos Move-Item y para eliminar un archivo o carpeta (rm) disponemos de Remove-Item:

PS C:\Scripts> New-Item -ItemType File Sobrebits.txt
PS C:\Scripts> New-Item -ItemType Directory 'Sobrebits folder'
PS C:\Scripts> Copy-Item .\Sobrebits.txt .\Sobrebits2.txt
PS C:\Scripts> Move-Item .\Sobrebits2.txt .\Sobrebits3.txt
PS C:\Scripts> Remove-Item *.txt

Alias New-Item: ni
Alias Copy-Item: copy, cp, cpi
Alias Move-Item: mi, move, mv
Alias Remove-Item: del, erase, rd, ri, rm, rmdir

Manipulación de archivos

# cat

Para mostrar el contenido de un archivo en PowerShell utilizaremos Get-Content:

PS C:\Scripts\Carpeta> Get-Content '.\Bienvenido a sobrebits.txt'
¡Gracias por visitar el blog y compartir!

Alias: cat, gc, type

# tail y head

Tanto para mostrar el final de un archivo (tail) como para mostrar el principio de un archivo (head) en PowerShell utilizaremos Get-Content con los parámetros -Tail y -TotalCount respectivamente:

PS C:\Scripts\Carpeta> Get-Content '.\Bienvenido a sobrebits.txt' -Tail 10
PS C:\Scripts\Carpeta> Get-Content '.\Bienvenido a sobrebits.txt' -TotalCount 10

Alias: cat, gc, type

# grep

Si queremos utilizar el equivalente a grep en PowerShell deberemos utilizar Select-String con el parámetro -Pattern:

PS C:\Scripts\Carpeta> 'Bienvenido','a','Sobrebits'
Bienvenido
a
Sobrebits
PS C:\Scripts\Carpeta> 'Bienvenido','a','Sobrebits' | Select-String -Pattern 'Sobrebits'

Sobrebits

Alias: sls

# diff

Si queremos mostrar las diferencias entre dos archivos tal como lo hace diff usando PowerShell podemos utilizar Compare-Object:

PS C:\Scripts\Carpeta> Compare-Object '.\Bienvenido a sobrebits.txt' '.\Bienvenido a sobrebits2.txt'

Alias: compare, diff

Utilidades

# wget

Para utilizar una funcionalidad parecida a la de wget en PowerShell deberemos utilizar Invoke-WebRequest con el parámetro -OutFile:

PS C:\Scripts> Invoke-WebRequest https://sobrebits.com -OutFile sobrebits.html

Alias: curl, iwr, wget

# curl

Si lo que queremos es utilizar una funcionalidad similar a curl en PowerShell disponemos de Invoke-WebRequest y de Invoke-RestMethod en el caso de que queramos interactuar con una API REST:

PS C:\Scripts> Invoke-WebRequest https://sobrebits.com
PS C:\Scripts> Invoke-RestMethod https://sobrebits.com -Method Get

Alias Invoke-WebRequest: curl, iwr, wget
Alias Invoke-RestMethod: irm

# man

Si queremos consultar la ayuda en PowerShell podemos valernos de Get-Help:

PS C:\Scripts> Get-Help -Name Invoke-WebRequest

Alias: help, man (realmente help y su alias man son aliases de Get-Help añadiendo paginación de los resultados)

# tee

Si queremos guardar la salida de un comando a un archivo y seguir pasándolo por nuestro pipeline podemos utilizar Tee-Object:

PS C:\Scripts> 'Bienvenido a Sobrebits' | Tee-Object -FilePath 'C:\Scripts\Bienvenido a sobrebits.txt'

Alias: tee

# scp

Si bien para SCP no existe una herramienta nativa en PowerShell que la reemplace podemos tirar de WinSCP para PowerShell como vimos en entradas anteriores:

PS C:\Scripts> Receive-WinSCPItem -WinSCPSession $WinScpSession -RemotePath "/tmp/sobrebits.txt" -LocalPath 'C:\Windows\Temp'

Conclusión

Si bien la lista puede seguir y seguir creo que esta es una buena representación de los principales equivalentes en PowerShell a comandos en Linux para cualquier persona recién aterrizada en PowerShell desde el sistema operativo del pingüino. Algo importante a tener en cuenta es que en casi todos los casos existe un alias igual al comando de Linux al que ‘sustituye’, por lo que la transición puede ser muy sencilla.

¡Si echáis de menos algún comando os animo a que lo dejéis en los comentarios!

La entrada Equivalentes en PowerShell a comandos de Linux aparece primero en Sobrebits.

by Marc Meseguer at December 12, 2018 01:00 PM

RooTeando

Tomando Un Café 46:Primer aniversario

Este audio es un episodio especial para celebrar el primer aniversario del podcast, el primer año y espero que sean muchos mas. Contaré un poco la historia y experiencia con mis canales de Telegram,grupos y podcast, también contaré mis futuros proyectos. 

Pedí la colaboración de los oyentes del podcast, para que me enviasen audios o mensajes respondiendo a dos preguntas, pondre esos audios y mensajes, con algunos comentarios mios.

A continuación pondré toda ...

December 12, 2018 10:40 AM

December 04, 2018

Sobre bits

Cómo exportar una máquina virtual con PowerCLI

En más de una ocasión me ha tocado exportar una máquina virtual de un vCenter para luego cargarla en otro y, por algún oscuro misterio, la exportación del cliente web de vSphere no me lo ha permitido. En esas situaciones nos puede ser muy útil saber exportar una máquina virtual con PowerCLI, una tarea la mar de sencilla que además nos aportará algunas funciones extra.Cómo exportar una máquina virtual con PowerCLI

Encontrando el cmdlet correcto

Cuando instalamos PowerCLI en nuestra máquina podemos ver que éste se compone de varios módulos. Los módulos relacionados con vSphere se encuentran en VMware.VimAutomation.Core, por lo que siempre que queramos buscar un módulo de vSphere deberemos buscar en él.

Sabiendo esto vamos a ver qué cmdlets tenemos disponibles que contengan el verbo ‘Export’:

Exportar máquina virtual con PowerCli

Como podemos ver existe el cmdlet Export-VM, que tiene pinta de hacer lo que estamos buscando, pero un detalle importante es que éste es un Alias de Export-VApp como podemos ver en la columna CommandType. Dado que es un alias y que en Hyper-V ya existe un cmdlet llamado Export-VM para esta entrada utilizaremos el cmdlet original: Export-VApp.

Exportar una máquina virtual con PowerCLI mediante Export-VApp

Ahora que ya tenemos localizado el cmdlet que vamos a utilizar podemos ponernos en marcha. Exportar una VM con PowerCLI es tan sencillo como:

# Obtenemos la VM a exportar
$Vm = Get-VM -Name 'Sobrebits VM'

# Apagamos la VM para poderla exportar
$Vm | Stop-VM

# Exportamos la VM
$Vm | Export-VApp -Destination 'C:\Export\'

Vamos a repasar el código:

  • Línea 2: Aquí obtenemos la máquina virtual a exportar con PowerCLI y la guardamos en la variable $Vm con la que trabajaremos en adelante.
  • Línea 5: Apagamos la VM para poder exportarla.
  • Línea 8: Exportamos la máquina virtual y marcamos el Path en el que ubicar los archivos de la misma con la variable -Destination.

Cuando acabe la exportación deberíamos ver algo parecido a esto:

Máquina exportada a OVF con PowerCLI

Este es el uso básico del cmdlet, pero si consultamos su ayuda podemos ver que dispone de alguna funcionalidad extra la mar de interesante:

# Exportamos la VM a OVA y de forma asíncrona
$Vm | Export-VApp -Destination 'C:\Export\' -RunAsync -Format Ova

Vamos a explicar los dos nuevos parámetros:

  • RunAsync:  Este parámetro es común en muchos otros comandos de PowerCLI. Si activamos este flag la tarea que estemos ejecutando (en este caso la exportación de una VM) se ejecuta en segundo plano y nos libera al instante la línea de comandos. Esto nos puede ser útil si queremos ejecutar más de una exportación a la vez puesto que las podemos dejar como tareas y seguir trabajando en nuestra sesión actual de PowerCLI.
  • Format: Por defecto este cmdlet exporta las máquinas virtuales en formato .ovf. Utilizando -Format podemos alterar este comportamiento y exportar una máquina virtual a .ova desde PowerCLI, con lo que conseguiremos tener empaquetada nuestra máquina virtual en un solo archivo.

Una vez finalice la exportación de la VM a OVA podremos ver que en la carpeta existe un único archivo .ova:

Exportar OVA con PowerCLI

Conclusión

Con Export-VApp vamos a ser capaces de ejecutar tareas de exportación de máquinas virtuales desde la línea de comandos, lo que combinado con un poco de scripting básico y la programación de la ejecución de los mismos puede resultar en exportacines de VMs fuera de horario y de forma totalmente desatendida.

Espero que os haya gustado la entrada.

¡Nos leemos en la próxima!

La entrada Cómo exportar una máquina virtual con PowerCLI aparece primero en Sobrebits.

by Marc Meseguer at December 04, 2018 01:27 PM

November 28, 2018

blog de Rodolfo Pilas

Publicar la llave pública SSH

Los principales repositorios (Gitlab y Github) exponen las llaves públicas SSH de sus usuarios de forma que están accesibles para descarga:

https://(gitlab|github).com/<usuario>.keys

Es la URL de donde se obtienen, y aquí las mías:

La ventaja es tener un sitio disponible donde está nuestra clave (y la de nuestros colegas) para usar en automatismos como esta task de Ansible:

- name: Enable pilasguru root access
  authorized_key:
    user: root
    state: present
    key: https://gitlab.com/pilasguru.keys
    validate_certs: False

by pilasguru at November 28, 2018 07:33 PM

Sobre bits

PSSonicWall: Consultas a SonicWall desde PowerShell

Una de las tecnologías con las que acostumbro a trabajar en mi día a día son firewalls SonicWall. Hace un tiempo busqué en la PowerShell Gallery algún módulo para trabajar nativamente con SonicWall desde PowerShell y mi sorpresa fue que no encontré ninguno.

En las últimas semanas he estado trabajando en un módulo con el que realizar consultas a firewalls SonicWall desde PowerShell y hoy os traigo la primera versión de PSSonicWall.

Acerca de PSSonicWall

PSSonicWall es un módulo hecho 100% con PowerShell del que podéis encontrar el código fuente en su repositorio de GitHub. Se sirve de la SonicOS API, la REST API del sistema operativo de SonicWall introducida en la versión 6.5.1.

Con PSSonicWall podremos, en su primera versión, realizar consultas a cualquier firewall SonicWall desde PowerShell gracias a que todos los appliances utilizan el mismo sistema operativo. Podremos sacar la configuración de las interfaces, las zonas, objetos y muchas cosas más.

PSSonicWall en PowerShell Gallery

Cómo habilitar la SonicOS API

Por defecto en todos los firewalls SonicWall la SonicOS API viene desactivada, por lo que antes de nada deberemos habilitarla:

  • Nos logeamos a nuestro firewall con una cuenta de administrador.
  • Entramos en la pestaña Manage.
  • Appliance > Base Settings.
  • Buscamos la sección SonicOS API.
  • Marcamos:
    • Enable SonicOS API.
    • Enable RFC-2617 HTTP Basic Access authentication.

SonicWall desde PowerShell

Si no disponemos de estas opciones lo más probable es que nuestro firewall tenga una versión inferior a 6.5.1, por lo que si queremos utilizar PSSonicWall antes deberemos actualizarlo.

Instalando PSSonicWall

PSSonicWall es el primer módulo que subo a la PowerShell Gallery (más acerca de esto en futuros post), lo que hace que instalarlo en cualquier sistema sea de lo más sencillo:

# Para el usuario actual:
Install-Module -Name PSSonicWall -Scope CurrentUser

# Para todos los usuarios de la máquina:
Install-Module -Name PSSonicWall

Una vez acabado el proceso ya tendremos todo lo necesario para interactuar con nuestro appliance SonicWall desde PowerShell. Como siempre podemos consultar todas las funciones disponibles con Get-Command:

Funciones de PSonicWall

Conectar y desconectar a SonicWall desde PowerShell

El primer paso para interactuar con SonicWall desde PowerShell es autenticarse contra el firewall en cuestión. Para ello nos valdremos de Connect-SWAppliance, al que podremos pasarle un objeto PSCredential o, de no hacerlo, nos solicitará unas credenciales.

Connect-SWAppliance -Server 192.168.168.168

Una vez finalice la ejecución ya podremos empezar a interactuar con nuestro appliance.

Es recomendable que cuando acabemos de ejecutar los comandos pertinentes sobre nuestro SonicWall desconectemos la sesión. Para ello simplemente debemos ejecutar Disconnect-SWAppliance:

Disconnect-SWAppliance

Ejecutando comandos sobre SonicWall desde PowerShell

En esta primera versión de PSSonicWall, como habréis podido comprobar en la captura superior, únicamente se incluyen funciones con el verbo Get, por lo que por el momento únicamente podremos listar información. En futuras releases se irán incorporando nuevas funciones con las que podremos automatizar la creación de NATs y ACLs de SonicWall desde PowerShell.

Las funciones actualmente disponibles son las siguientes:

  • Get-SWAccessRule: Lista las Access Rules.
  • Get-SWAddressGroup: Lista los Address Groups.
  • Get-SWAddressObject: Lista los Address Objects.
  • Get-SWDns: Lista los DNS.
  • Get-SWInterface: Lista las Interfaces.
  • Get-SWNatPolicy: Lista los NAT.
  • Get-SWRoutePolicy: Lista las reglas de Routing.
  • Get-SWSchedule: Lista las programaciones.
  • Get-SWServiceGroup: Lista los service Group.
  • Get-SWZone: Lista las Zonas.

Si, por ejemplo, quisieramos listar un objeto llamado ‘Sobrebits test’ podríamos hacerlo de la siguiente manera:

Listar Address Objects de SonicWall desde PowerShell

Hay que tener en cuenta que todo lo que devuelven estas funciones son objetos, por lo que nos podremos valer de cmdlets típicos de manipulación de objetos para hacer lo que queramos con el resultado:

# Podemos filtrar un resultado con Where-Object
Get-SWAddressObject | Where Name -eq 'Sobrebits Test'

# Podemos seleccionar campos con Select-Object
Get-SWAddressObject | Select Name,Zone

# O incluso podemos exportar el resultado a csv con Export-Csv
Get-SWAddressObject | Export-Csv -Path 'C:\Sobrebits\export.csv'

Obteniendo ayuda en PSSonicWall

Como en todo módulo que se precie, todas las funciones incluidas en PSSonicWall traen su propia ayuda. Podemos utilizar Get-Help para consultar la funcionalidad detallada de cada una de las funciones así como ejemplos de uso:

Ayuda en PSSonicWallConclusión

De momento esto es todo lo que os quería contar sobre PSSonicWall, en futuras entradas veremos casos de uso más concretos del módulo e iré informando sobre nuevas funciones añadidas. ¡Nos vemos en próximas entradas!

La entrada PSSonicWall: Consultas a SonicWall desde PowerShell aparece primero en Sobrebits.

by Marc Meseguer at November 28, 2018 07:00 AM

November 25, 2018

MagMax Blog

Organización

Muchos de los artículos más curiosos comienzan en un hilo en Twitter. Ése es el caso de éste.

En un hilo con @recena, éste dijo:

I am really tired of the trends around job titles etc.... We should talk about
software engineer and responsibilities, that's all.

Y eso es lo que ha inspirado este artículo.

Leer más… (quedan 3 minutos de lectura)

by Miguel Ángel García at November 25, 2018 02:25 PM

November 23, 2018

debianhackers.net

[truco] mariadb se va de paseo (MySQL server has gone away)

O dicho en el idioma de los errores de sistema, ERROR 2006 (HY000) at line 21232: MySQL server has gone away.

$ mysql -h localhost -u user -pUltraSecurePass mydatabase &lt; dump.sql
ERROR 2006 (HY000) at line 21232: MySQL server has gone away
$

El lío

mariadb

mariadb

El error me apareció cuando intentaba importar la base de un wordpress en una instalación de MariaDB 10.1.37-0+deb9u1. Tengo que decir que el fichero SQL no es muy diferente al montón de importaciones que he hecho con MySQL, tiene un tamaño aproximado aunque sí que ha habido ficheros varios megas más grandes en el mismo servidor. Lo inusual del error, el que no fuese un error de sintaxis del fichero me hacía sospechar de la configuración de MariaDB.

La solución

Hay que aumentar una variable del sistema que se encarga del tamaño máximo del buffer donde se almacenan los paquetes, max_allowed_packet. Basta con añadir (o modificar) el valor y ponerlo a algo tremendo para que no falle, en este caso, 2 GB.

sudo sed -i '/max_allowed_packet/d' /etc/mysql/my.cnf
echo "max_allowed_packet = 2G" | sudo tee -a /etc/mysql/my.cnf
sudo /etc/init.d/mysql restart

Tras aplicar el cambio, ya se puede importar sin problema volcados de wordpress o de lo que sea.

$ mysql -h localhost -u user -pUltraSecurePass mydatabase &lt; dump.sql
$

by Diego Martínez Castañeda at November 23, 2018 12:31 PM

November 22, 2018

RooTeando

Diario de Aprendizaje: 02 Programación y niños.

Segundo episodio de este minipodcast que es una sección de mi podcast principal de Tomando Un Café. En esta ocasión hablaré de como enseñar programación a niños, por ese motivo he creado una pequeña lista de recomendaciones que pueden ser útiles a la hora de afrontar una formación de programación a niños:

▪️Los niños no son tontos.
▪️No infantilizar el material.
▪️Centrar la atención de los niños.
▪️Empezar por el final, primero enseñar el resultado ...

November 22, 2018 10:33 AM

Sobre bits

Iniciar RDP o SSH sobre una VM desde PowerCLI

Si como yo os pasáis el día conectados a una infraestructura VMware vSphere haciendo conexiones remotas a diferentes máquinas virtuales sabréis que utilizar la consola integrada de VMware no es la mejor de las opciones. Como sustitución acostumbro a utilizar RDP para las máquinas virtuales Windows y SSH para las GNU/Linux, el gran problema para mi siempre ha sido cómo gestionar toda esa cantidad de conexiones remotas.

Si bien existe software para gestionar dichas conexiones siempre he encontrado que es una solución demasiado manual y que escala muy mal conforme añadimos máquinas a la ecuación. Puesto que me tiro todo el día con una consola de PowerShell abierta y conectado a mi infraestructura me decidí a crear un par de funciones muy sencillitas con las que hacer dicha gestión desde PowerShell de una forma muy fácil y dinámica.

Averiguar la IP enrutable de una VM

La primera problemática para crear una solución de este tipo es obtener la IP correcta sobre la que queremos conectarnos. Es posible que esto no aplique a todo el mundo, pero cuando una VM tiene más de una IP debemos obtener la que esté en el mismo rango que su gateway para asegurarnos de que seremos capaces de enrutar hacia ella en el caso de estar en una VLAN distinta.

Para conseguir la IP correcta de la máquina virtual utilizo esta función:

Function Get-VMIP {
    # Devuelve la IP principal de la VM (Determinado por la primera IP de la misma subred del GW)
    Param(
        [Parameter(
            Position = 0,
            ValueFromPipeline=$true,
            Mandatory=$true
        )]
        [string]$Name
        )
    $ips = (Get-VM $Name).ExtensionData.Guest.Net.IpAddress

    # Si solo existe una IP la devolvemos como principal
    if ($ips.Count -eq 1) {
        Return $ips
    }
    # Si existe más de una IP devolvemos como principal la que está en la misma subred que el GW (solo aplica a las /24)
    elseif ($ips.Count -gt 1) {
        # Obtenemos el gateway para comparar
        $gateway = (Get-VM $Name).ExtensionData.Guest.Ipstack.IpRouteConfig.IpRoute.Gateway.IpAddress
        # Recorremos las IPs
        foreach ($ip in $ips) {
            if ($gateway[0].Split('.')[2] -eq $ip.Split('.')[2]) {
                Return $ip
            }
        }
    }
    # Si no existen IP's devolvemos null
    else {
        Return $null
    }
}

Hay que teneren cuenta que esta solución sólo funciona con redes /24, que es con las que trabajo yo en mi infraestructura, pero se podría adaptar para funcionar con cualquier máscara.

Como siempre vamos a ver qué hace cada parte del código:

  • Líneas 3 a 10: Definimos el parámetro $Name que corresponderá al nombre de la VM de la que obtendremos la IP.
  • $ips = (Get-VM $Name).ExtensionData.Guest.Net.IpAddress: Obtenemos todas las IPs de la máquina virtual.
  • Líneas 14 a 16: Si sólo existe una IP la devolvemos.
  • Líneas 18 a 27: Si existe más de una IP sacamos el gateway y comparamos todas las IPs con éste hasta encontrar la que pertenezca a la misma subred. Una vez encontrada devolvemos la IP.
  • Líneas 29 a 31: Si no existen IPs devolvemos $null.

Con nuestra nueva función cargada ya podríamos ejecutar Get-VMIP para obtener la IP de una máquina virtual:

Iniciar RDP con PowerCLI

Iniciar RDP o SSH sobre una VM

Ahora que ya tenemos creada nuestra función Get-VMIP podemos seguir con la función que realmente utilizaremos: Start-VMRc. Para la conexión SSH Start-VMRC se apoyará en Putty, por lo que deberemos descargarlo y ubicarlo en algún lugar de nuestro path, como C:\Windows\System32.

function Start-VMRc {
    # Inicia una conexión remota RDP o SSH en función del sistema operativo
    param  
    (  
        [Parameter(
            Position = 0,
            ValueFromPipeline=$true,
            Mandatory=$true
        )]
        [ValidateNotNullOrEmpty()]
        [string]$Name
    )
    # Determinamos la IP enrutable de la máquina
    $ip = Get-VMIP -Name $Name
    # Si es una máquina Windows iniciamos RDP
    if ((Get-VM -Name $Name).GuestId -like '*windows*'){
        mstsc /v:$ip
    }
    # Si es una máquina linux iniciamos Putty
    else {
        putty $ip
    }
}

Vamos a desglosar la función:

  • Líneas 3 a 12: Definimos el parámetro $Name que corresponderá al nombre de la VM a la que nos conectaremos remotamente.
  • $ip = Get-VMIP -Name $Name: Invocamos Get-VMIP para obtener la IP de la VM.
  • Líneas 16 a 18: Determinamos si es una máquina Windows y, en caso de serlo, iniciamos un RDP a la IP de la misma.
  • Líneas 20 a 22: De no ser una máquina Windows iniciamos SSH mediante Putty a su IP.

Si tenemos las dos funciones cargadas ya podemos ejecutar Start-VMRC para iniciar RDP contra nuestro servidor con:

Start-VMRC 'Sobrebits VM'

Conclusión

Una vez tengamos creadas las dos funciones podemos añadirlas a nuestro perfil tal y como vimos en la entrada ‘Cómo personalizar nuestro perfil de PowerShell‘.

Yo particularmente utilizo a diario estas dos funciones y os puedo asegurar que si os acostumbráis a ellas os pueden ahorrar una cantidad tremenda de tiempo.

¡Espero que os sea útil!

La entrada Iniciar RDP o SSH sobre una VM desde PowerCLI aparece primero en Sobrebits.

by Marc Meseguer at November 22, 2018 08:00 AM

November 21, 2018

blog de Rodolfo Pilas

Fundamentos y doctrinas de la Guerra Fría

Tuve el gusto de presentar ante dos sextos años de la Escuela Elbio Fernandez un análisis de los fundamentos y las doctrinas de la Guerra Fría, con la idea de complementar el estudio que previamente ellos habían hecho sobre ese período histórico, pero acercando una visión desde la “academia”, gracias a Von Neumann, claro.

Me divertí muchísimo contándoles cómo explota una bomba nuclear y explicando cómo la Teoría de Juegos de John Von Neumann y Oskar Morgenstern podía responder por qué la Guerra Fría fue, precisamente, fría.

Hasta nos hicimos tiempo para representar el dilema del prisionero y el equilibrio de Nash.

Agradezco a las maestras Irene y Annie que me permitieron estar frente a sus alumnos.

by pilasguru at November 21, 2018 08:28 PM

November 20, 2018

blog de Rodolfo Pilas

Enviar correo SMTP por telnet

Nada nuevo, esto está por todo internet explicado en muchas formas, tamaños y colores. Pero sucede que lo utilizo mucho y lo que siempre hago es entrar a mi blog y hacer una búsqueda por el término “telnet” y ahi me doy cuenta que tengo todas las formas de telnet para correo, menos la común y corriente. Eso motiva este artículo.

Como enviar un correo electrónico al puerto 25 por telnet:

# telnet localhost 25
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 mail.mydomain.com ESMTP

HELO yourdomain.com
250 mail.mydomain.com

MAIL FROM: you@server.com
250 2.1.0 Ok

RCPT TO: rpilas@mydomain.com
250 2.1.5 Ok

DATA
354 End data with <CR><LF>.<CR><LF>
From: "Some One" <you@server.com>
To: "Rodolfo Pilas" <rpilas@mydomain.com>
Subject: Testing
MIME-Version: 1.0
Content-Type: multipart/alternative;
        boundary="boundary-type-1234567892-alt"
--boundary-type-1234567890
--boundary-type-1234567892-alt
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable


Testing the text to see if it works!

--boundary-type-1234567892-alt
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable


<html>Does this actually work?</html>

--boundary-type-1234567892-alt--
--boundary-type-1234567890
Content-Transfer-Encoding: base64
Content-Type: text/plain;name="Here2.txt"
Content-Disposition: attachment;filename="Here2.txt"

KiAxMyBGRVRDSCAoQk9EWVtURVhUXSB7NjU5fQ0KLS1fZjZiM2I1ZWUtMjA3YS00ZDdiLTg0NTgtNDY5YmVlNDkxOGRhXw0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJpc28tODg1OS0xIg0KQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQ0KDQoNCkp1c3Qgc2VlaW5nIHdoYXQgdGhpcyBhY3R1
YWxseSBjb250YWlucyEgCQkgCSAgIAkJICA9DQoNCi0tX2Y2YjNiNWVlLTIwN2EtNGQ3Yi04NDU4LTQ2OWJlZTQ5MThkYV8NCkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PSJpc28tODg1OS0xIg0KQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQ0KDQo8aHRtbD4NCjxoZWFkPg0KPHN0eWxlPjwhLS0N
Ci5obW1lc3NhZ2UgUA0Kew0KbWFyZ2luOjBweD0zQg0KcGFkZGluZzowcHgNCn0NCmJvZHkuaG1tZXNzYWdlDQp7DQpmb250LXNpemU6IDEwcHQ9M0INCmZvbnQtZmFtaWx5OlRhaG9tYQ0KfQ0KLS0+PC9zdHlsZT48L2hlYWQ+DQo8Ym9keSBjbGFzcz0zRCdobW1lc3NhZ2UnPjxkaXYgZGlyPTNEJ2x0cic+DQpKdXN0IHNlZWluZyB3aGF0IHRo
aXMgYWN0dWFsbHkgY29udGFpbnMhIAkJIAkgICAJCSAgPC9kaXY+PC9ib2R5Pg0KPC9odG1sPj0NCg0KLS1fZjZiM2I1ZWUtMjA3YS00ZDdiLTg0NTgtNDY5YmVlNDkxOGRhXy0tDQopDQpmbHlubmNvbXB1dGVyIE9LIEZFVENIIGNvbXBsZXRlZA


--boundary-type-1234567890--


.
QUIT
250 2.0.0 Ok: queued as 1EDE71400DE

221 2.0.0 Bye
Connection closed by foreign host.

(esto lo he extraido de internet)

by pilasguru at November 20, 2018 03:34 PM

November 19, 2018

blogofsysadmins.com

Mostrar información del certificado SSL desde consola (CLI)

Este pequeño post que os escribo hoy os va a servir a todos aquellos sysadmins, que quieran monitorizar en (nagios por ejemplo) o simplemente ver las fechas de expiración u otros datos de los certificados SSL desde consola. Para ver la fecha de expiración, usamos nmap: Articulos relacionados:Magazine Hacker Highschool [PDF] (0)Actualizar y recrear en …

by GhOsTi at November 19, 2018 12:24 PM