¿Que es powershell ?. Ejemplos básicos para familiarizarse con la herramienta.
Al terminar de leer este artículo, el lector será capaz de:
- Instalar el powershell
- El hola mundo
- Usar variables en powershell
- Ver lista de drives
- Manejar registros con powershell
- Usar ayuda
- Obtener una lista de todos los comandos de powershell
- Manejar procesos
- Detener, prender servicios
- Generar alias (nombres alternativos a los comandos).
- Ejecutar y habilitar scrips ps1 en powershell
- Ejecutar un script de powershell con doble click.
- Para generar eventos en el visor de sucesos con powershell
- Trabajar con ciclos foreach
- Manejo de varios servidores simulataneamente con PS
- Powershell para SQL Server
- Opciones avanzadas de powershell para SQL Server
Para los que hemos trabajado con UNIX y Linux nos parecía obvia la llegada de un lenguaje similar a PERL. Es decir, un lenguaje potente para manejar variables, ciclos, etc.
Actualmente el cmd es muy limitado para la programación. Visual Script surgió como una alternativa para automatizar tareas, pero es relativamente lento y se necesitan muchas líneas de código para tareas sencillas que en otros lenguajes como PERL se harían mas fácilmente.
No se asusten los que no saben nada de PERL. Voy a resumir lo que hace powershell. Powershell permite automatizar tareas de administración de servidores de una manera rápida, sencilla y eficiente.
Por ejemplo, se puede navegar y cambiar el registro fácilmente, apagar servicios, manejar listas, etc.
Para gente que le gusta UNIX/Linux esto les va a hacer gustar más del sistema operativo Windows. Trata de hacer que se pueda navegar a registros, procesos. Lo vuelve al Windows mucho más fácil de manipular mediante comandos. PowerShell permite automatizar tareas no solamente en el sistema operativo Windows, si no también en SQL Server, Exchange, SharePoint, en la nube de Azure y muchas herramientas más.
Si usted usa scripts para automatizar tareas de Windows aprender PowerShell será de gran utilidad. Si usted es un usuario simple y rupestre que nunca programó nada de tareas (ni lo piensa hacer), powershell es una porquería que no tiene ninguna utilidad.
Instalación.
En Windows 7 y 8 al igual que en Windows 2012 o superior, ya vienen como parte del sistema operativo.
Comenzando mis primeros comandos.Una vez instalado, puede comenzar a jugar con el programa.
Voy a mostrar cómo crear alias de comandos (poner mi propio nombre a los comandos). Por defecto ya hay varios aliases. Por ejemplo yo use en vez del comando get-help para tener ayuda el comando man y también se puede usar el comando help. Entonces uno puede cambiar el nombre a sus comandos y crear nuevos ¡!.
Posteriormente mostrare como crear registros, apagar servicios, procesos.
Como hacer hola mundo
echo ¨hola mundo¨
Como hacer usar variables en powershell
$var=hola mundo
echo $var
Como obtener la ayuda de un comando (ejemplo dir)
Existen tres maneras
get-help dir
man dir
help dir
Para obtener una lista de todos los comandos powershell
get-help *
Para obtener ayuda y ejemplos de todos los comandos powershell
http://technet.microsoft.com/en-us/library/dd347701.aspx
Mostrar los drives del sistema
Get-PSDrive.
Este comando permite mostrar todos los drives. En esta sección la novedad es que podemos navegar en el registro de Windows.
Uso del alias
Para cambiar de nombre a diferentes comandos: Powershell utiliza lo que llamamos alias. Un alias es un sobrenombre que le podemos poner al comando. Por ejemplo:
set-alias get-drive get-psdrive
Esto transforma al comando get-psdrive a get-drive. De ahora en adelante si corremos el comando:
get-drive
Drives realizará la misma función del comando get-psdrive. Parece lindo no ?. Estaba emocionado hasta que me di cuenta que al cerrar el powershell (con exit) y al abrirlo de nuevo ya no funcionaba mi nuevo comando.
La forma más fácil de solucionar esto es usando el profile. En el profile se escribe el comando y listo. Sin embargo si no tenemos profile hay que crearlo y agregar nuestro set-alias get-drive get-psdrive.
Para ver si existe el profile:
test-path $profile
Si sale false hay que crearlo con:
New-Item -Path $Profile -ItemType file –Force
Luego editamos el profile:
Notepad $profile
Ahora en el archivo notepad colocamos esto:
set-alias get-drive get-psdrive
Finalmente, salvamos el archivo y cerramos y abrimos el powershell
REGISTROS
· Para navegar en el registro se pone:
cd hklm:
Para regresar al drive c y dejar de navegar en el registro:
c:
Para limpiar la pantalla en powershell
cls
· Para ver ir al registro hkey local machine
cd hklm:
· Para ir al registro software\clients\Calendar\Microsoft Outlook\protocols
cd software\clients\Calendar\Microsoft*\
Protocols
Algo que no me agrada es que no funciona el cd.. para volver atrás tiene que ser cd .. (con el espacio como en UNIX/LINUX)
Para crear un registro:
· PS HKLM:\software\clients\Calendar\Microsoft Outlook\Protocols>mkdir reg_nuevo
Para volver a la raíz en powershell:
PS HKLM:\software\clients\Calendar\Microsoft Outlook\Protocols>cd /
Para listar los registros dentro de registros (existen varias formas. Get-ChildItem, ls, dir,gci. Las 4 dan los mismos resultados).
Get-ChildItem
ls
gci
dir
Para volver al disco c
c:
PROCESOS
Para mostrar una lista de procesos:
Get-Process
Para detener un proceso:
Stop-Process -processname [process]
Para listar servicios:
Servicios
Get-service
Para iniciar un servicio:
start-service [service_name]
Para detener un servicio:
stop-service [service_name]
EJECUCION DE SCRIPTS
Para ejecutar y habilitar un script en powershell
Primero cree un archivo que se llame prueba.ps1 con el siguiente contenido:
/*Este programa muestra el mensaje hola mundo*/
Echo “hola mundo”
Por defecto le va a salir un mensaje de error cuando trate de ejecutarlo:
./prueba.ps1
Para habilitar la ejecución de scripts y que no salga un mensaje de error:
set-executionpolicy unrestricted
Una vez habilitado, la ejecución en powershell funciona:
./prueba.ps1
Para ejecutar un archivo de powershell ps1 con doble click.
Este es un poquito más difícil de lo que pensé.
Los archivos de powershell (Ps1) no funcionan con doble click así que hay que invocarlo desde el cmd.
Esto por razones de seguridad .
Paso 1.
Tener un archivo con extensión ps1. Mi archivo se va a llamar creardir.ps1. Este ejemplo crea un directorio que se llama Daniel.
Archivo: creardir.ps1
Contenido: mkdir Daniel
Paso 2. Crear un archivo con extensión cmd que llame al archivo creardir.ps1.
Archivo: createdir.cmd
Contenido: powershell.exe -command .\creardir.ps1
Lo único que queda es hacer doble click en el cmd.
Para crear un evento en el visor de eventos:
EVENTCREATE /T ERROR /ID 1000 /L APPLICATION /D "Test Error"
Este mensaje le permitirá generar un evento de error con ID 100 en la categoria de aplicaciones.
Para ver los eventos del visor de eventos en powershell:
PS C:\Documents and Settings\user> Get-EventLog -logName "Application"
Espero que les haya gustado. Si tienen dudas escriban a este blog. Cualquier duda se las aclaro.
Listo para la parte II ?:
Interesante post...pero como observacion ...las librerias .NET no son exactamente requeridas, ya que bien podria usarse powershell sin .NET para hacer consultas a objetos COM o WMI, lo que en realidad provee .NET son definiciones de objetos adicionales del sistema operativo, que en su mayoria han sido diseñadas como mejoras de antiguos objetos COM ... por lo demas...buen post
ResponderEliminarSaludos
Si, me estoy basando en este link para mencionar el requerimiento del framework:
ResponderEliminarhttp://www.microsoft.com/DownLoads/details.aspx?FamilyID=6ccb7e0d-8f1d-4b97-a397-47bcc8ba3806&displaylang=en
System Requirements
Supported Operating Systems: Windows XP Service Pack 2; Windows XP Service Pack 3
Requires .NET Framework Version 2.0
Creo que caigo en la clasificacion de usuario simple y rupestre... porque luego del laburo prefiero estar en modalidad caja boba (dummy terminal). Pero la nota esta muy buena...
ResponderEliminarTengo una duda, este Powershell seria una especie de lenguaje para lograr lo mismo que se hace con las rutinas .bat como el autoexec.bat y etc???
La tendencia de powershell es ser algo tan poderoso como perl.
ResponderEliminarEs un entorno de programación muy amplio.
mmmmmm una pregunta si programo con el j2sdk como puedo conpilarlo con este shell ya que no reconoce el comando javac, sin embargo al correrlo habiendolo compilado en simbolo del sistema si lo corre bien.
ResponderEliminarPowershell 2 ?. Estas corriendo del folder donde esta el archivo javac ?.
ResponderEliminarMuchas gracias por el tutorial.
ResponderEliminar¿Sabrias por casualidad como ejecutar un pequeño script sin que aparezca la ventana del terminal y luego desaparezca?.
Por ejemplo (un poco tonto pero representativo), "Stop-Process -processname calc" para eliminar el proceso de la calculadora pero sin que aparezca la ventana del terminal.
Stop-Process -processname calc
ResponderEliminarTu preguntas como ejecutar sin usar la terminal de powershell ?
Interesante!.
ResponderEliminarMe preguntaba para que servia pues lo exige la instalacion de SqlServer2008 pero ni tiempo habia tenido de revisar, mas bien pensaba que era alguna biblioteca y ya.
Gracias. Deja ver si pongo una referencia a este articulo en mi blog (deisbel.blogspot.com), para compartirlo con mis amigos.
Dale Deisbel. Suerte.
ResponderEliminarCreo que es una corrección para el tema del $profile del principio del articulo.
ResponderEliminarAl poner el "notepad $profile" hay que tener en cuenta que el fichero debe estar firmado sino no te dejara ejecutar la política con tu alias cuando arrancas el powershell de nuevo. Puedes comprobarlo con "get-executionpolicy" devolvera "Restricted" que no te deja ejecutarscript no firmados o "RemoteSigned" que si te dejará.
Para el caso de "Restricted" tendrás que ejecutar 'set-executionpolicy remotesigned' y listo.
para poder ejecutarlo.
Buen punto.
ResponderEliminarNice stuff, un gran trabajo, tienes razón, la tendencia es PowerShell ser tan poderoso como perl.
ResponderEliminarSe trata de un entorno de programación muy completo.
PowerShell, anteriormente conocido como Mónada, es a la vez una muy eficaz y entretenido pasar un desarrollo de la terminología -scripting terminología de la Sra. PowerShell es un ambiente de secuencias de comandos que proporciona una interfaz para Microsoft Windows como tecnología WMI, COM y NET.. PowerShell edición 1 fue publicada por Ms en 2006.
_ Thanks
Scalable and Unified Event Log Management.
Exacto Adam. Es una increible herramienta powershell.
ResponderEliminar