Code snippet

Open Powershell command line as Admin from a limited user account

Sometimes at work I have to execute something with admin permissions in user’s machines, but normally the final users are not administrators. For these cases my coworkers tell me to log off and switch to an administrator user, but some computers are slow and this process take me minutes.

I wanted to be efficient so I did a research and I found this simple solution: just execute this command:
runas /noprofile /user:DOMAIN\USERNAME "powershell.exe Start-Process powershell.exe -Verb runAs"
(Remember to change DOMAIN\USERNAME with your credentials, you will be asked for the password after executing this command)

The command explained

runas executes something as other user.

The param /noprofile prevents loading the user profile in order to execute anyhing faster. Read this if you are not sure that you can use this param: About User Profiles, or simply remove this param.

"powershell.exe Start-Process powershell.exe -Verb runAs" is the command to be executed. In this case executes a powershell command line with admin privileges. Take in care that it is not possible to execute the command powershell.exe -Verb runAs directly because the powershell window will close immediately.

Code snippet, Programación

Clone Azure DevOps test plans with Powershell

Imagine the situation: You have a test plan in Azure DevOps that is executed every time you create a new version of your product, but Azure DevOps doesn’t provide an easy way to clone test plans and cloning manually is painful.

Fortunately the Azure DevOps REST API has a Clone Operation for test plans: Clone Operation – Clone Test Plan

I wrote a powershell script to make an API call to Clone operation in an easy way, just follow these steps:

  1. Download the script for cloning Azure DevOps Test Plans.
  2. Change these variables values:
    Image of Powershell script with the values for the variables used in this example

    • $organization: Name of the Azure organization of your project. Marked with a green box.
    • $PAT: Your Azure Personal Access Token (PAT). You must set “Test Management permission” to “Read & write”. For more details about PAT follow instructions at Authenticate access with personal access tokens.
    • $project: Project name that contains the test plan. Marked in yellow.
    • $testPlanId: Id of the test plan you want to clone. Marked in red.
    • $testSuiteId: Id of the test suite you want to clone. Marked in purple.

    Image of Powershell script with the parameters marked with colours

Open powershell and execute script, if succeded it will return OK.
After the execution of the Powershell script it returns ok

Clone operation is asyncronous, if the new test plan is empty just wait a few seconds and reload page.
Result of the Powershell script execution

Programación

Feature Switch o como acabar de golpe con los merge monstruosos y errores críticos

Probablemente cuando estudiaste y te enseñaron las virtudes de los sistemas de control de versiones te explicaron como usar branches para separar las nuevas funcionalidades del resto del programa para no tener cosas a medias en el trunk.

A la hora de la verdad esa metodología sólo funciona con pequeños proyectos y al entrar en el mercado laboral chocamos con la realidad que es que la mayoría de proyectos de software son enormes y hay que dedicar muchísimo tiempo a hacer merge de las nuevas funcionalidades, y si a eso le sumas las metodologías Agile en las que el tiempo es limitado tenemos la tormenta perfecta del desarrollo de software.

Pero por suerte alguien pensó en la solución y inventó los Feature Switch que como su nombre indica vienen a ser interruptores lógicos con los que podemos activar y desactivar funcionalidades a nuestro gusto de manera que podemos trabajar sin crear branches adicionales, de forma que nos ahorramos merges y además también sirven para volver a desactivar una funcionalidad rápidamente en caso que detectemos un error crítico en producción.

La forma de activar y desactivar los Feature Switch está en manos de la creatividad y necesidades de cada proyecto. En algunas aplicaciones será un archivo de texto indicando el estado de cada funcionalidad, en otros según la fecha o región donde se ejecuta la aplicación, otras veces será mediante un pago, etc. Tiene un potencial muy grande de usos y utilidades.

¿Cómo implementar un Feature Switch?

En Google encontrarás librerías y ejemplos de Feature Switch para aburrir y por eso no voy a entrar en detalle. Sólo comentar mi preferida para C# que es la librería FeatureToggle de Jason Roberts y que el me gusta por lo siguiente:

using System;
using FeatureToggle;

namespace ConsoleApp1
{

public class Printing : SimpleFeatureToggle { }
public class Saving : EnabledOnOrAfterDateFeatureToggle { }
public class Tweeting : EnabledOnOrAfterAssemblyVersionWhereToggleIsDefinedToggle { }

class Program
{
static void Main(string[] args)
{
var p = new Printing();
var s = new Saving();
var t = new Tweeting();

Console.WriteLine($"Printing is {(p.FeatureEnabled ? "on" : "off")}");
Console.WriteLine($"Saving is {(s.FeatureEnabled ? "on" : "off")}");
Console.WriteLine($"Tweeting is {(t.FeatureEnabled ? "on" : "off")}");

Console.ReadLine();
}
}
}

(Copiado de dontcodetired.com/blog/post/FeatureToggle-v4-RC1-with-NET-Core-Support)

La sencillez y de elegancia de uso de la librería de Jason Roberts es sublime. Con unas pocas líneas tenemos configurado todos los switches y los nombre son muy claros de manera que no hace falta estudiar el código de las clases de este Feature Switch para darse cuenta que por ejemplo EnabledOnOrAfterDateFeatureToggle activará la funcionalidad llegada una fecha indicada. Además es una librería actualizada muy a menudo. Por esas razones la recomiendo.

El Feature Switch es un concepto simple, fácil de implementar, y sirve tanto para proyectos grandes como para pequeños. Usadlo siempre que podáis porque os ahorrará muchos dolores de cabeza.