Quería compartirles un post que hace poco escribir sobre un uso practico de powershell en nuestras vidas cotidianas como desarrolladores.
Introducción
Para todo desarrollador, su computador es su estación de trabajo, en ella desempeñan diferentes labores, digamos que el 100% del tiempo no se utilizan para desarrollar. El resto de tiempo, necesitamos que nuestra PC dedique toda su capacidad de procesamiento a las tareas que nosotros necesitemos.
Para el Desarrollo, los servicios de los que mas requerimos son de los Motores de Bases de Datos, pero en otra actividad, no lo necesitamos.
Objetivo
Optimizar el uso de la CPU y de la Memoria RAM descartando servicios innecesarios y levantándolos solo cuando sea necesario.
Este objetivo es relativamente fácil de conseguir utilizando todo el potencial de Scripting de PowerShell[1]. Lo que haremos es un Script el cual pasemos un parámetro de “Inicio” o de “Parada”, y que realice estas acciones sobre los servicios listados en un archivo de texto.
Administrando Servicios
Para nosotros levantar o detener los servicios[3] cuando nosotros queramos, tenemos que indicar que estos van a ser administrados manualmente. Podemos hacer esto por 2 caminos, directamente por el Administrador de Servicios de Windows o directamente con PowerShell:
Manos a la Obra!
Como se dijo anteriormente, vamos a iniciar y a detener los servicios que se listen en un archivo de texto. Creamos nuestro archivo de Texto, y ponemos los servicios en el archivo de texto en el orden en el que se van a iniciar:
Este orden será revertido para detener los servicios.
Para leer un archivo desde PowerShell utilizamos el comando:
Get-Content <Ruta hacia el archivo>
Este comando lee liana por línea el archivo.
Para iniciar los servicios utilizamos el comando:
Start-Service <Nombre del Servicio>
Para detenerlo:
Stop-Service <Nombre del Servicio>
Para verificar su estado con:
Get-Service -Name <Nombre del Servicio>
Resultado:
Ya tenemos el archivo donde están alojados los nombres de los servicios, ya sabemos como administrar servicios desde PowerShell, nos queda es realizar el script.
para crear el Script, creamos un archivo con la extensión “.ps1” desde el bloc de notas, o directamente desde el Power Shell ISE.
El script es sencillo, solo le pasaremos un parámetro para indicarle si inicia o detiene los servicios, este parámetro será el texto “start” ó “stop”.
El diagrama de flujo de nuestro Script es:
Ya sabemos leer el archivo, ya sabemos manipular los servicios. Nos falta leer parámetros y manejar arreglos.
Para manejar parámetros simplemente los declaramos al inicio del script:
Param([string]$Action
)Ya con esto tenemos un parámetro fuertemente tipado (solo admite cadenas) en el cual vamos a guardar, como ya se había dicho, el “start” y “stop”.
Para manejar los arreglos, que es donde debemos poner todo el contenido del archivo línea por línea para recorrerlo inversamente, simplemente descargamos todo el contenido del archivo a un arreglo mediante la línea:
$Services = Get-Content $SvcTxtPathSe puede hacer esto ya que Get-Content devuelve un arreglo línea por línea del archivo leído.
para determinar el numero de líneas, ya que lo vamos a necesitar para el algoritmo de recorrido hacia atrás del arreglo, lo hacemos mediante:
[int]$lineCount = (Get-Content $SvcTxtPath ).Count
Y Listo. teniendo en cuenta estos detalles y el diagrama de flujo de lo que queremos hacer, nos da como resultado el siguiente script.
#autor qjuanp#http://qjuanp.blogspot.com
Param([string]$Action
)$SvcTxtPath = "D:JuanDocumentsPsScriptsdevelopServices.txt"
#echo $Actionif($Action.Equals("start")){"Iniciando Servicios"
Get-Content $SvcTxtPath | Start-Service"Servicios Iniciados"
}elseif($Action.Equals("stop")){
"Deteniendo Servicios"
[int]$lineCount = (Get-Content $SvcTxtPath ).Count
#echo $lineCount$Services = Get-Content $SvcTxtPath#echo $Services[1]for([int]$i=$lineCount-1; $i -ge 0;$i--){"Stop Service: $Services[$i]"
Stop-Service -Force -Name $Services[$i]}"Servicios Detenidos"
}else {"Error"}Ya tenemos listo nuestro script, ahora vamos a hacerlo fácil de acceder.
Antes de poder ejecutar el Script debemos habilitar la ejecución de los mismos, ya que por seguridad, solo se permite la ejecutar Scripts que hayan sido firmados digitalmente, para fines prácticos, deshabilitaremos esta propiedad y en futuras ocasiones veremos como se firman los scripts digitalmente.
Ejecutamos PowerShell con premisos de administrador:
y ejecutamos la siguiente instrucción y respondemos “Si” a la pregunta:
Set-ExecutionPolicy remotesigned
Creando los accesos directos a la ejecución del Script
Simplemente damos click derecho en el lugar donde queremos nuestros accesos directos (yo lo voy a hacer sobre el escritorio), vamos a la opción “Nuevo”-> “Acceso Directo”:
dentro de la la ubicación del item:
Dentro del cuadro de texto ponemos la línea:
%SystemRoot%system32WindowsPowerShellv1.0powershell.exe-File "D:JuanMy PowerShell Scriptsdevelop.ps1"
-Action start
y variamos el parámetro “Action” a “stop” para crear el acceso directo para detener los servicios.
Un truco adicional, cuando ya tengamos listo los accesos, vamos a las propiedades:
Luego, en la pestaña de “Acceso Directo”, vamos a las opciones avanzadas y activamos la casilla de “Ejecutar como administrador”.
Asi nuestro script se ejecutará como administrador y así podrá detener o iniciar los servicios sin problema!
A disfrutar com más espacio disponible en nuestra RAM!, solo cuando sea necesario iniciaremos los servicios que son necesarios para nuestra actividad de desarrollo!
1. Se utilizara PowerShell en su Versión 1.0
2. Para este punto PowerShell debe estar instalado
3. Para este caso, utilizaremos 2 servicios usados comúnmente en el desarrollo por tratarse del Motor de Base de Datos, que pertenecen a SQL Server 2008 Express Edition. Todo lo desarrollado en este tutorial se puede realizar con cualquier servicio registrado en Windows.
cómo instalo y configuro PowerShell en un Windows XP y en un Win2003 ?
algún enlace HOW TO en 10 minutos ??
salu2&grz
Para instalarlo simplemente necesitas descargarlo desde el Centro de Descargas de Microsoft. Ten en cuenta que debes tener ya instalado .NET Framework 2.0. En este enlace encontraras mas informacion y las versiones para XP, WS2003 y otros: http://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx
Grazie, usted recomienda utilizar PowerShell y evitar ya el uso de los .BAT y los VBS ??
Una guía rápida de powershell se agradecería.
salu2&grz
La verdad a mi me ha parecido muy comodo PowerShell, ya que el autocompletado y las ayudas(dentro de la shell get-help), ademas, el lenguaje de scripting es muy similar a C#, si haz trabajado con C# te acostumbraras facil a él. PowerShell trae otra particularidad que la hace sobre salir sobre las que tu mencionas, y es que es orientada a objetos, de ahi que la manipulacion del sistema se haga de una manera mas comprensible y facil. Aca te dejo el enlace a un blog de Geeks.ms donde encontraras una guia sobre PowerShell: http://geeks.ms/blogs/vista-tecnica/archive/tags/PowerShell/default.aspx