Aprende Informatica Conmigo

  • Inicio
  • Contenido Anterior
    • VIDEOTUTORIALES
    • Windows Server 2008
    • POWERSHELL

2 junio, 2009 Por oscar 3 comentarios

Script Powershell – Apagar equipos remotamente – Ver. 2.0

Vamos a trabajar un poco mas con el script que escribimos en el articulo anterior dedicado a scripts en Powershell y vamos a añadirle una linea que nos ayudara.

Si habeis probado el script que os comento, os habra pasado que si el equipo que queriais a apagar ya estaba apagado, os mostrara un mensaje de error. Para solucionar este problema, vamos a comprobar el estado del equipo antes de lanzar el apagado.

Para ello utilizaremos la clase «win32_pingstatuscode» que nos facilita Windows a traves de WMI.

Hay varias formas de trabajar con esta funcion, pero yo he preferido utilizar la siguiente:

get-wmiobject -query «select statuscode from win32_pingstatus where address = ‘$equipo'»

Con esta line de codigo, lo que hacemos es una consulta, de esas del tipo de sql, ¿os suena algo, no?

La consulta lo que hace es recoger el valor de la propiedad «statuscode» de la clase «win32_pingstatus» del equipo en cuestion.  Como esta linea por si misma no nos va a mostrar nada, tendremos que guardarla en una variable para que podamos trabajar con el valor devuelto y, en funcion del resultado, hacer una cosa u otra.

La linea de codigo completa quedaria de la siguiente forma:

$estado = get-wmiobject -query «select statuscode from win32_pingstatus where address = ‘$equipo'»

Vale, ahora tenemos almacenado el valor del estado del equipo en la variable «$estado«.

En esta pagina nos describen la clase «win32_pingstatus» y sus miembros. Nos viene bien para saber los posibles valores que puede tomar «statuscode«.

Bueno, no esperamos mas y os pongo como quedaria el codigo:


#Script: apagarequipos.ps1
#Version: 2.0
#
#Autor: Oscar Abad Folgueira
#Web:   https://www.aprendeinformaticaconmigo.com
#Fecha: 25 de Abril de 2009
#
#Tipo: Powershell
#Funcion: Apagar equipos remotamente. Estga version comprueba el estado del equipo

#antes de lanzar el apagado.
#
#Parametros: nombre el equipo a apagar.
#Uso: apagarequipos.ps1 equipo
#
#

Param($equipo)         #parametro de entrada (Nombre del equipo a apagar).

$equipo = $_
$estado = get-wmiobject -query «select statuscode from win32_pingstatus where address = ‘$equipo'»
if ($estado.statuscode -eq 0) {
(get-wmiobject -class win32_operatingsystem -computername $equipo).win32shutdown(12)
}


Ademas de lo que hemos comentado antes, podemos ver que hemos añadido un if para evaluar el estado del equipo en cuestion. Si el equipo esta apagado, no hace nada, pero si no lo esta, lanza el apagado.

No hay mucho mas que decir, simplemente que lo probeis y me comenteis que tal os ha ido y si os es util.

En la siguiente version de este script, veremos como podemos utilizar un fichero de texto en el que hemos introducido previamente el nombre de los equipos que queremos apagar para que nos apague una serie de equipos uno detras de otro sin tener que hacer uno a uno a mano. Ademas, nos servira para crear una tarea programada para que se apaguen por la noche o el fin de semana.

Venga, a pasarlo bien!!

—–
Oscar Abad
http://www.xulak.com – Consultoría informática

oscar
oscar

Programador WordPress freelance

Publicado en: powershell, programacion, scripts powershell, sistemas, tutoriales Etiquetado como: aprendeinformaticaconmigo, powershell, script, script powershell, windows, wmi

30 mayo, 2009 Por oscar Deja un comentario

Powershell – 15 – Get-Wmiobject

15.1 Get-Wmiobject

Obtiene instancias de las clases de WMI o informacion sobre las clases disponibles.

El parametro «computername» se puede usar para especificar un equipo remoto.

Este cmdlet nos sera de gran utilidad para trabajar con las clases WMI y ademas remotamente.

15.2 Parametros

-class <string>

Especifica el nombre de una clase de WMI. Si se usa este parametro, el cmdlet nos mostrara instancias de la clase de WMI.

-property <string[]>

Especifica la propiedad o el conjunto de propiedades de la clase de WMI que se va a recuperar.

-computername <string[]>

Espercifica el o los equipos en los que se ejecutara el cmdlet. Puede ser un nombre de equipo o una ip. Se puede especificar el equipo local mediante un punto (.).

-filter<string>

Especifica una clausula where que se usara como filtro.

-credential <pscredential>

Usa las credenciales especificadas para autentificar al usuario. Si especificamos un nombre de usuario, nos pedira la contraseña de este. Tambien podemos utilizar un objeto «credential» creado mediante get-credential, pero eso es otra historia…

-query <string>

Especifica una instruccion del lenguaje de consultas WMI (WQL) que debe ejecutarse.

Otros parametros:

-list

-namespace

14.3 Ejemplos

Ejemplo 1

>get-wmiobject -class win32_process

Este comando nos muestra informacion sobre todos los procesos que se estan ejecutando en el equipo.

Ejemplo 2

>get-wmiobject -class win32_process -computername equipo1

En este caso, al igual que el anterior, nos mostrar informacion sobre los procesos que se estan ejecutando. Pero en este caso los procesos corresponderan a los del equipo «equipo1«, ya que hacemos una consulta remota a la clase «win32_process» de «equipo1«.

Personalmente veo muy util este cmdlet para realizar tareas administrativas en ordenadores remotos sin que tengamos que apagarlos ni reiniciarlos. Ademas, el usuario no se entera de nada de lo que estamos haciendo.

Ejemplo 3

>get-wmiobject -class win32_bios

No creo que sea necesaria ninguna explicacion al respecto, ¿no?

No os preocupes si no entendeis todo sobre este cmdlet. El mayor problema reside en que trabajaremos con clases WMI normalmente, y de estas hay muchisimas. Pero ya vereis como haremos algunos ejemplos y/o ejercios de scripts que utilizan este cmdlet y alguna que otra clase WMI.

Venga, nos vemos en el siguiente…

A pasarlo bien!!

—–
Oscar Abad
http://www.xulak.com – Consultoría informática

oscar
oscar

Programador WordPress freelance

Publicado en: powershell, sistemas, tutoriales Etiquetado como: aprendeinformaticaconmigo, gestion remota, get-wmiobject, powershell

9 mayo, 2009 Por oscar 1 comentario

Powershell – 14 – Where-Object

14.1- Where-Object

Crea un filtro que controla los objetos que se van a pasar con una canalizacion de comandos. Filtra los objetos que recibe, bien como entrada canalizada o a traves del parametro «-inputobject«. Determina que objetos se van a pasar a traves de la canalizacion mediante la evaluacion de un bloque de script que puede incluir una referencia a un objeto que se va a filtrar. Si el resultado de la ejecucion es True, el objeto que se va a procesar se pasa a traves de la canalizacion, en caso contrario, el objeto queda descartado.

Este cmdlet lo vamos a usar mucho, por lo tanto es bueno comprender su funcionamiento correctamente. Para ello, voy a dedicar especial atencion al apartado de ejemplos de este cmdlet para que quede lo mas claro posible.

Ademas, este cmdlet lo usaremos en ejemplos a partir e ahora con otros cmdlets.

14.2- Parametros

-filterscript <scriptblock>

Especifica el bloque de script que se va a evaluar, Para determinar que objetos de entrada se van a pasar a traves de la cananlizacion de comandos.

-inputobject <psobject>

Especifica los objetos que se van a filtrar.

Si guardamos el resultado de un comando en una variable, podemos utilizar «-inputobject» para pasar la variable a «where-object».

14.3- Ejemplos

Ejemplo 1

>get-command | where-object {$_.Name -like «get-*»}

pwswhere01

Aparentemente no tiene muy buena pinta y nos puede intentar desistir de seguir adelante viendo estos signos «raros» ¿no?

Pero no os preocupeis por que es bien sencillo y a medida que vayamos utilizando Powershell ya vereis que nos vamos a acomodar a este tipo de comandos.

El mayor problema que podemos encontrar al principio en este comando es: {$_.Name -like «get-*»}.

En primer lugar tengo que decir que el argumento de «where-object«, al ser una comparacion, ira entre llaves ({}).

Bien, el primer operando dentro de las llaves es: «$_.Name» que se refiere al conjunto de objetos recibidos a traves de la tuberia y en este caso a su propiedad «Name«. Es decir, que vamos a utilizar solo la propiedad «Name» de los objetos recibidos para la comparacion.

El segundo, es un operador de comparacion (como ya habreis intuido). Este en concreto (-like), lo que hace es comparar los objetos recibidos con el patron y nos mostrara todos los que coindidan con este. Cuando utilizamos «-like«, normalmente el patron tendra algun caracter comodin.

Y del tercer argumento ya hemos hablado, es el patron a buscar y no creo que sea necesario explicar nada sobre esto.

Ahora, si juntamos todo, tenemos que nos mostrara los comandos cuyo nombre comience por «get-«. Si teneis alguna duda sobre esto, me lo comentais.

Aunque los operadores de comparacion merecen un apartado proipo, voy a indicar a continuacion algunos de ellos para que podamos probarlos.

-eq igual

-ne no igual

-gt mayor que

-ge mayor o igual que

-lt menor que

-le menor o igual que

-like comparacion de caracteres comodin

-notlike lo contrario que el anterior.

-match Que coincida el segundo operando exactamente

-notmatch Lo contrario de «-match»

De todas formas, no estaria de mas que le deis una vuelta a este tema y para ello podeis utilizar el siguiente comando:

>get-help about_comparison_operators.

Ejemplo 2

>get-childitem | where-object {$_.Length -ge 10000}

pwswhere02

Como podemos observar, nos muestra los ficheros que tienen 10000 bytes o mas de los que hay en el directorio actual.

Ejemplo 3

Recordad que para conocer las diferentes propiedades que posee un objeto, podemos hacerlo mediante el cmdlet «get-member«. Este, ademas de las propiedades, nos puede mostrar otros elementos como metodos, funciones…

En el caso anterior, podriamos escribir:

>get-childitem | get-member

pwswhere03Pero esto nos devolvera la lista completa de elementos disponibles en el objeto en cuestion y nosotros queremos algo mas concreto.

Para obtener solamente la lista unicamente de las propiedades hacemos lo siguiente:

>get-childitem | get-member | where-object {$_.MemberType -match «Property»}

pwswhere04Todavia no hemos conseguido completamente nuestro objetivo. Ahora volvemos a probar, pero esta vez con el operador «-eq«:

>get-childitem | get-member | where-object {$_.MemberType -eq «Property»}

pwswhere06¡Ahora si! Ahora hemos conseguido el listado que andabamos buscando.

Ejemplo 4

Ahora, por lo que sea, queremos saber que servicios estan parados en el equipo local.

Bien, para esto escribimos el siguiente comando:

> get-service | where-object {$_.status -eq «stopped»}

pwswhere05Ya lo veis. Que facil ¿no?

Venga, pues hasta aqui llega este articulo.

A pasarlo bien!!

Para ver mas articulos sobre powershell en el blog, puedes hacerlo en la pagina dedicada a Powershell.

—–
Oscar Abad
http://www.xulak.com – Consultoría informática

oscar
oscar

Programador WordPress freelance

Publicado en: formacion, powershell, sistemas, tutoriales Etiquetado como: aprendeinformaticaconmigo, powershell, scripts, sistemas, where-object

7 mayo, 2009 Por oscar Deja un comentario

Script Powershell en tareas programadas

En este articulo vamos a hacer algo sencillo, pero como seguramente habra quien no lo haya llevado a cabo nunca, como me pasa a mi, que no he realizado muchas pruebas con las tareas programadas, creo que con este articulo matamos dos pajaros de un tiro.

Aunque todavia no hemos creado scripts en powershell, no os preocupeis. Yo ya he realizado varios y este en concreto es un script para apagar los equipos que se quedan encendidos por la noche y deberian estar apagados.

Buenos, en este caso es indiferente el script que utilicemos, ya que vamos a ver como programarlo para que se ejecute cuando nosotros queramos.

En primer lugar, ya sabeis… Panel de control –> Tareas programadas.

Hacemos doble-click en «Agregar tarea programada«:

scrpwhtareas01

A continuacion, Windows nos permite seleccionar el programa que deseemos que se ejecute.

Pulsamos en el boton examinar puesto que nuestro script no esta en la lista que nos ofrece y buscamos el script (apagarequipos.ps1 en mi caso).

scrpwhtareas02

Una vez que hemos elegido el script que queremos programar, indicamos a continuacion el nombre de la tarea programada y escogemos la periodicidad de su ejecucion.

scrpwhtareas03

En la siguiente pantalla elegimos la hora en que se va a ejecutar. Tambien elegimos cuando se va  a realizar la tarea y por ultimo la fecha en que comenzara a ejecutarse.

scrpwhtareas04

Nos pide una cuenta para ejecutar el script y su contraseña.

scrpwhtareas05

Hasta aqui todo bien.

Antes de finalizar, seleccionamos la opcion para que se abran las propiedades de la tarea que acabamos de crear y asi modificar o revisar lo que hemos creado.

scrpwhtareas06

En la captura siguiente vemos las propiedades de la tarea programada «apagar equipos«.

Si os fijais, en el apartado «ejecutar» tenemos el path al script.

Esto es algo que nos tiene que quedar claro. De por si, tareas programadas lo va a abrir con el «block de notas» (esto esta comprobado).

scrpwhtareas07

Para solvertar este problema, añadimos «powershell.exe» delante del path para que no haya confusiones y «tareas programadas» lo ejecute con este programa.

Con esto que hemos realizado, el apartado «ejecutar» nos queda: powershell.exe c:\power\scripts\apagarequipos.ps1.

En general, indicaremos: powershell.exe path\script.ps1

scrpwhtareas08

No debemos olvidar de asegurarnos de que la casilla «Habilitar…«, por que de lo contrario, la tarea no se ejecutara.

Al realizar alguna modificacion, nos volvera a pedir que volmamos a idicar una cuenta de usuario para ejecutar el script y la contraseña del mismo.

scrpwhtareas09

Pulsamos en el boton aceptar y ya tenemos la «tarea programada» «apagar equipos» creada.

En el caso, como este, de que la tarea programada se ejecute a unas horas intespestivas en las que no vamos a saber si se ejecuta correctamente, podemos hacer pruebas cambiando la hora de ejecucion de la misma.

Bueno, hasta aqui ha llegado este asunto.

No os preocupeis por el tema de crear scripts por que nos queda bien poco para empezar a crearlo y ver algunos ejemplos practicos.

Venga, a pasarlo bien!!

—–
Oscar Abad
http://www.xulak.com – Consultoría informática

oscar
oscar

Programador WordPress freelance

Publicado en: powershell, programacion, sistemas, tutoriales Etiquetado como: aprendeinformaticaconmigo, powershell, scripts, tareas programadas

4 mayo, 2009 Por oscar Deja un comentario

Powershell – 13 – Sort-Object

13.1- Sort-Object

Ordena un conjunto de objetos por los valores de las propiedades. Podemos especificar una propiedad o un conjunto de propiedades con el fin de ordenar mediante el parametro «-property«.

Si especificamos varias propiedades, los objetos se ordenaran en funcion de la primera propiedad. El resto de propiedades se utilizan en el caso de que un grupo de objetos coincidan con el mismo nombre en las ateriores propiedades.

En el proceso de ordenacion se distingue entre mayusculas y minusculas a menos que se especifique el parametro «-casesensitive«.

Por defecto, este cmdlet ordena los objetos en orden ascendente, pero este comportamiento se puede modificar mediante la utilizacion del parametro «-descending«.

Si un objeto no tiene una de las propiedades especificadas, «sort-object» interpreta como nulo el valor de la propiedad correspondiente de ese objeto. Los objetos con un valor nulo se situan al final en el criterio de ordenacion.

Si no especificamos ninguna propiedad por la que realizar la ordenacion, «sort-object» llevara a cabo una ordenacion con metodos predeterminados que dependen del tipo de objeto que se esta ordenando.

Este cmdlet por si solo no nos va a server para mucho. Se utiliza casi siempre como receptor de otro u otros cmdlets y realiza la ordenacion del conjunto de objetos recibido. Esto quiere decir, simplemente, que «sort-object» normalmente estara situado despues de un caracter de tuberia (|).

Las unicas ocasiones en que esto ultimo no sera asi es cuando utilicemos el parametro «-inputobject«.

13.2- Parametros

-property <objedt[]>

Especifica la propiedad o propiedades que se van a utilizar para la ordenacion.

-inputobject <psobject>

Especifica los objetos que se van a ordenar. Podemos utilizar este parametro o utilizar la canalizacion de otro cmdlet. Personalmente me parece que es mejor no utilizar este parametro.

–casesensitive <switchparemeter>

En la ordenacion se distinguira entre mayusculas y minusculas.

-unique <switchparameter>

Ordena unicamente segun los valores unicos de las propiedades

-desending <switchparameter>

Ordena los objetos de forma descendente.

-culture <string>

especifica la configuracion cultural que se va a usar durante la ordenacion.

13.3- Ejemplos

Ejemplo 1

>get-command | sort-object -descending

pwsort01

Con este comando conseguimos, primero la lista de todos los cmdlets, y posteriormente, al pasarle este resultado a «sort-object«, los odena en orden descendente gracias al parametro «-descending«.

Ejemplo 2

>get-alias | sort-object -property name

pwsort02Obtenemos la lista de todos los alias definidos en la sesion actual de Windows Powershell y posteriormente los ordenamos de forma ascendente por el parametro «name«.

Ejemplo 3

Get-chilitem -recurse | sort-object

pwsort03

En este caso, ordenamos el listado de archivos y directorios recursivo que realizamos con «get-childitem«.

Ejemplo 4

>get-childitem | sort-object -property LastWriteTime > sort.txt

Ordenamos el listado de fichero y directorios del directorio actual por la propiedad «LastWriteTime«. Este listado lo guardamos en un fichero de texto «sort.txt» que posteriormente podremos revisar.

pwsort04

pwsort05

Venga, pues esto es todo lo que tenia que comentaros sobre «sort-object«.

A pasarlo bien!!

Para ver mas articulos sobre powershell en el blog, puedes hacerlo en la pagina dedicada a Powershell.

—–
Oscar Abad
http://www.xulak.com – Consultoría informática

oscar
oscar

Programador WordPress freelance

Publicado en: powershell, sistemas, tutoriales Etiquetado como: aprendeinformaticaconmigo, ordenar, powerhell, sort-object

28 abril, 2009 Por oscar Deja un comentario

Powergui – Editor para Powershell

Powergui es un software gratuitor desarrollado por Quest Software que nos permite crear y manejar scripts Powershell de forma mas amena, sencilla y ordenada.

instpwrgui091

No hay mucho mas que decir. Si quereis, podeis echarle un vistazo a esta demo para que veais como funciona exactamente.

En la web de Powergui disponemos de mucha ayuda en forma de tutoriales, videotutoriales y foros. Ademas de disponer de un inmenso numero de scripts ya creados para que los podamos utilizar nosotros.

Yo todavia no he jugado mucho con Powergui,  pero ya lo he puesto en la lista por que me ha venir muy bien. Hace tiempo que empece a crear scripts y este software me va a ayudar a realizarlos mejor.

Venga, ¡Fuerza y Honor!

—–
Oscar Abad
http://www.xulak.com – Consultoría informática

oscar
oscar

Programador WordPress freelance

Publicado en: powershell, sistemas, software gratuito Etiquetado como: aprendeinformaticaconmigo, powershell, scripts, software gratuito

28 abril, 2009 Por oscar Deja un comentario

Nueva pagina sobre Powershell en el blog

Poco a poco he ido escribiendo varios articulos sobre Windos Powershell y me estoy dando cuenta de las posibilidades que tenemos con el.

Pues bien, como se van amontonando los articulos y hay un momento que son bastante dificiles de manejar por su cantidad, he decidido crear una pagina en el blog que recogera en forma de resumen o mas bien indice, todos los articulos relevantes sobre esta materia.

La idea es hacer 3 apartados dentro de la pagina: uno sobre powershell en si mismo, otro sobre powershell y su aplicacion con vmware, y por ultimo un apartado que hara de repositorio de los scripts que vayamos creando.

Me parece insteresante por que de esta forma tenemos en una sola pagina todos los articulos sobre esta materia sin tener que andar buscandolos por todo el blog.

Vamos a ver que tal funciona y si es que va bien, no dudo en hacer lo mismo con los articulos de «Windows Server 2008» que ya estan llegando a ser una cantidad importante. Aunque yo no pretenda que sea un curso como tal, al final va a ser que es algo así.

Venga, a ver que os parece…

—–
Oscar Abad
http://www.xulak.com – Consultoría informática

12.2- Set-Variable

Establece el valor de una variable. Podremos crear la variable si no existe ninguna con el nombre que le especificamos.

Parametros

-name <String[]>

Especifica el nombre de la variable

-include <String[]>

Especifica unicamente aquellos elementos sobre los que actuara el cmdlet y excluye todos los demas.

-exclude <String[]>

Especifica aquellos elementos sobre los que no actuara el cmdlet

-option <scopeitemoptions>

Cambia el valor de la propiedad options de la variable. Los valores validos son:

  • none:  ninguna opcion.
  • readonly:  no se puede modificar ni eliminar sin el parametro «-force«.
  • constant:  similar al anterior.
  • private:  solo esta visible en el ambito especificado en el parametro «-scope«.
  • allscope:  la variable se copia a todos los ambitos que se crean.

-description <String>

Nos permite facilitar una descripcion de la variable.

-value <object>

Valor que se va a asingnar a la variable.

-force <Switchparameter>

Lo usaremos para forzar la operacion que queramos llevar a cabo, como por ejemplo, modificar el valor de una constante.

Otros parametros:

-scope

-passthru

-whatif

-confirm

Ejemplo 1

>Set-Variable -name dia -value Domingo -description «dia festivo»

Con este comando creamos una nueva variable con el nombre «dia» cuyo valor es «Domingo» y su descripcion es «dia festivo«.

Para ver el contenido de esta variable que acabamos de crear, haremos lo siguiente tal y como hemos aprendido en el apartado anteriror:

>get-variable -name dia

pwsvariables06Para ver todas las propiedades de nuestra nueva variable podemos utilizar el cmdlet «format-list» para redireccionar la salida del anterior comando a este cmdlet de la siguiente manera:

>get-variable -name dia | format-list

pwsvariables07

Ejemplo 2

En este ejemplo vamos a crear una constante.

>set-variable -name omega -value 168 -description «valor de prueba» -option readonly

A continuacion, verificamos las propiedades de estanueva constante:

>get-variable -name omega | format-list

pwsvariables08

12.3- New-Variable

Por mas que lo reviso, no encuentro ninguna diferencia significativa entre este cmdlet y «set-variable«.

Por eso, podemos utilizar la descripcion que hemos realizado de «set-variable» para «new-variable«. Creo que son mas que similares. Yo diria que iguales.

12.4- Clear-Variable

Borra los datos almacenados en una variable, pero no elimina la variable. Como resultado, el nuevo valor de la variable es NULL (vacio).

Si se ha especificado un tipo de objeto o dato para la variable, clear-variable mantiene el tipo del objeto almacenado en la variable.

Parametros

-include <String[]>

Borra unicamente los elementos especificados. Se permite el uso de caracteres comodin.

-exclude <String[]>

Omite los elementos especificados.

-name <String[]>

Especifica el nombre de la variable que se va a borrar.

Otros parametros:

-scope <String>

-force <Switchparameter>

-passthru <Switchparameter>

-whatif

-confirm

Ejemplo 1

>get-variable dia | format-list

>clear-variable -name dia

>get-variable -name dia | format-list

Ya teniamos creada esta variable de un apartado anterior, osea que la aprovechamos.

En primer lugar, mostramos las propiedades de la variable «dia» mediante una redireccion a «format-list«.

Despues borramos el contenido de esta variable.

Por ultimo, mostramos todas las propiedades de dicha variable, comprobamos este resultado con el que nos dio antes de borrarla y vemos que la propiedad «value» ahora esta vacis, es decir NULL.

pwsvariables09

Se ve claro que la variable sigue exsistiendo aunque no tiene ningun valor, ¿no?

Ejemplo 2

Recordamos que creamos ha bien poco una constante llamada «omega«. Vamos a jugar un poco con ella…

En primer lugar intentamos borrarla o borrar su valor:

>clear-variable -name omega

Nos da un terrible error porque, si recordamos, las constantes no pueden cambiar de valor asi como asi. Para esto debemos utilizar el parametro «-force» como se muestra a continuacion:

>clear-variable -name omega -force

Ahora si!

Mostramos las propiedades de la variable «omega» para cerciorarnos que lo ha realizado correctamente.

>get-variable -name omega | format-list

pwsvariables10

Todo ha salido a la perfeccion. ¿contento?

Ejemplo 3

Continuando con el ejemplo anterior, ahora que la constante «omega» tiene valor NULL, vamos a asignarle otro valor.

Primero lo intentamos como si de una variable normal y corriente se tratase.

>set-variable -name omega -value omega2

Pues no. Nos da otro terrible error por que no podemos modificar el valor de una constante. Para hacerlo, debemos utilizar, igual que anteriormente hicimos, el parametro «-force«.

>set-variable -name omega -value omega2 -force

Ahora parece que si. Por lo menos no nos ha mostrado ningun mensaje de error. Lo comprobamos:

>get-variable -name omega | format-list

pwsvariables11

Pues si, ahora si que lo ha hecho bien.

12.5- Remove-Variable

Este cmdlet elimina una variable y su valor del ambito en el que esta definida, como la consola actual.

La diferencia entre este cmdlet y el anterior que hemos comentado (clear-variable) es que este si que elimina la variable completamente y no solo el valor, como hacia «clear-variable«.

No voy a explicar los parametros de este cmdlet por que es practicamente identico en cuanto a funcionamiento a «clear-varible«, y no vamos a repetir todo el rato lo mismo, que ya aburre, ¿que no?

Ejemplo 1

Vamos a aprovechar que aun disponemos de la variable «dia» que habiamos creado en otro apartado de este articulo para hacer este ejemplo. Eliminaremos la variable «dia» con «remove-item«. Pero antes, para estar seguros, vemos las propiedades de la misma.

>get-variable -name dia | format-list

Vemos que si que existe, aunque no tiene ningun valor.

Seguidamente procedemos a eliminarla.

>remove-variable -name dia

Todo bien, de momento. Aunque para estar seguros, hacemos una consulta de las propiedades de la variable a ver que nos dice…

>get-variable -name dia | format-list

Nos dice que no existe esta variable. Esto quiere decir, que se ha eliminado correctamente, que es lo que queriamos hacer.

Podeis ver todo el proceso en la siguiente captura de pantalla:

pwsvariables12

Ejemplo 2

Ahora vamos a intentar hacer lo propio con la otra variable, o mejor dicho, constante que habiamos creado anteriormente. Recordamos que la habiamos llamado «omega«.

Primero, para ponernos en situacion, hacemos una consulta de sus propiedades.

>get-variable -name omega | format-list

Vale, esta tiene de todo.

Ahora intentamos eliminarla como si fuera una variable normal:

>remove-variable -name omega

¡Anda! no podemos borrarla! Bueno, esto es normal porque para algo es una constante.

Para eliminarla utilizaremos el parametro «-force«.

>remove-variable -name omega -force

Ahora no nos muestra el mensaje de error de antes. ¿la habra eliminado?

Para estar seguros de esto, volvemos a realizar una consulta de sus propiedades.

>get-variable -name omega | format-list

¡Eso es! Nos dice que no existe. ¡Somos unos fenomenos!

Bueno, hasta aqui llega el tema correspondiente a los cmdlets que tenemos disponibles en Powershell para trabajar con variables.

No os pongais nerviosos por que ya estoy pensando en el siguiente articulo.

Venga, a pasarlo bien!!

Para ver mas articulos sobre powershell en el blog, puedes hacerlo en la pagina dedicada a Powershell.

—–
Oscar Abad
http://www.xulak.com – Consultoría informática

oscar
oscar

Programador WordPress freelance

Publicado en: powershell, programacion, sistemas, tutoriales Etiquetado como: aprendeinformaticaconmigo, powershell, scripting, sistemas, utilidades

23 abril, 2009 Por oscar 2 comentarios

Powershell – 11 – Scripting (1)

11.1- Introduccion.

Windows Powershell tambien pone a nuestra disposicion su propio lenguaje de scripting para crear secuencias de comandos en el estilo clasico de programacion imperativa.

No creo que haya que decirlo, pero para el que no lo sepa, me gusta mucho la programacion aunque, por motivos diversos de la vida, nunca he podido desempeñar esta funcion en el terreno laboral y es una pena que me corroe desde hace mucho tiempo.

Pues bien, con Windows Powershell se me abre una puerta que me es muy grata. Aunque salvando las distancias con un leguaje de programacion como Java, C++, etc… creo que, si no hay otra cosa, Windows Powershell puede darme muchas satisfacciones en este sentido y espero que tambien lo haga con alguno de vosotros.

Bien es cierto que ahora mismo no estoy capacitado para establecer el alcance del mismo, pero lo que voy descubriendo dia a dia me hace barruntar que podemos realizar un sinfin de tareas, que de otra manera serian muy laboriosas, de una forma facil y sencilla.

El lenguaje de Script que Powershell (PSL) pone a nuestra disposicion incluye variables, bucles, condicionales, funciones y manejo de errores. Por supuesto aun estoy empezando con el, osea que no he podido trabajar con todas estas caracteristicas aunque si con alguna de ellas.

Tengo que recordar que todos los tutoriales que llevo realizados hasta la fecha sobre Powershell y los que continuare realizando, estan basados en la version 1.0 del mimo. El apartado del lenguaje de Script no creo que sufra muchos cambios en versiones posteriores, osea que nos vamos a centrar en esta version.

A modo de comentario os dire, para que lo sepais, que este lenguaje de script no es algo creado desde cero, sino que esta «inspirado» en los lenguajes shell de Unix como PERL, PHP, PYTHON…

11.2- Obtener ayuda

Ya comente en otro tutorial anterior sobre el mismo tema la forma o formas de que disponemos para obtener ayuda sobre los diferentes cmdlets. Pues bien, tambien podemos obtener ayuda sobre algunos de las caracteristicas del lenguaje de script.

Por ejemplo, si queremos obtener ayuda sobre el bucle «for«, podemos escribir:

>get-help about_for

pwscrit101

Si escribimos:

>get-help about

pwscrit102

Nos mostrara la lista de todos los coumentos «about«.

Otra forma de ver estos documentos es desde el directorio «es» dentro de la ruta en que esta instalado Windows Powershell.

En mi caso es: «c:\windows\system32\windowspowershell\v1.0\es«

11.3- Separacion de comandos.

Cada linea en un script de Windows Powershell es un comando. Un comando puede contener varios cmdlets separados po el simbolo «|«.

Tambien podemos escribir varios comandos en una misma linea separandolos con «punto y coma» (;).

Cuando una linea de un comando es muy larga, podemos escribir el caracater «`» al final de la linea para indicar que en la siguente linea continua el comando. Osea, que no acaba ahi.

Ejemplo.

Get-Command | where-object `

{$_.Name -like «get-*»}

Este comando, aunque son dos lineas, se comportara como uno solo como podeis observar en la captura que viene a continuacion:

pwscrit103En el ejemplo anterior, he creado un script llamado «separacion.ps1» que contien las dos lineas que he escrito antes.

Ejecuto el script de la forma que se ve en la captura: «.\separacion.ps1» y ejecuta el comando que contiene el mismo.

Poco a poco, no nos agobiemos…

11.4- Comentarios

Los comentarios en WPS se escriben utilizando el simbolo de almoadilla (#). Todo lo que se encuentre despues de este caracter, no sera interprestado por Powershell.

Ejemplo

#Este es un comentario.

11.5- Variables

Las variables comienzan con el caracter «$«.

Las variables en WPS pueden contener letras, numeros e incluso el caracter de subrayado (_).

Las variables en WPS, como en todo lenguaje de programacion, pueden ser de varios tipos, pero por ahora y para no complicarnos en demasia la vida, que es bastante complicada, vamos a realizar scripts sencillos en los que obviaremos este tipo de caracteristicas, aunque, si se tercia, ya las comentaremos mas adelante, pero bastante mas adelante.

Ejemplo 1

Si queremos crear una variable que contenga el numero 23, haremos lo siguiente:

$numero = 23

o si queremos guardar una frase:

$frase = «Esta es una frase»

y para mostrar el contenido de la variable basta con especificarla junto con el caracter «$«.

$frase

Vale, para que nos quede mas claro este asunto en un script, creamos un fichero llamado «variables.ps1» cuyo contenido podemos ver en la siguiente captura:

pwscrit104Podemos tener alguan duda con la ultima linea. Pero no he hecho mas que concatenar dos variables para que veais que se puede hacer de forma sencilla. El resultado de este script lo podeis ver a continuacion:

pwscrit105Se entiende, ¿no?

Si teneis alguna duda, me la comentais.

Las variables seran validas en el ambito en el que han sido creadas o declaradas. Esto quiere decir que si hemos declarado una varible dentro de un bucle «for«, esta varible existira o estara accesible siempre que estemos dentro del bucle «for«, una vez que haya finalizado el bucle o antes de comenzarlo, esta variable no existira. ¡Queda claro, ¿no?!

11.5.2- Variables predefinidas

Windows Powershell dispone de muchas variables predefinidas tambien llamadas «variables integradas» o «variables internas«.

A continuacion os muestro algunas de estas «variables internas«:

$true                     Valor true.

$false                    Valor false.

$home                  El directorio home del usuario actual.

$pshome             Directorio de insalacion de windows powershell.

$host                      Informacion de instalacion del host.

$error                   Lista de los errores que han ocurrido desde que se ha iniciado WPS.

Para obtener una lista de todas las variables disponibles en la sesion actual de Windows Powershell, tanto las internas como las que hemos definido nostros mismos:

>get-childitem variable:*

pwscrit106

Y si lo que queremos es obtener todas las variable cuyo nombre comience por «p»:

>get-childitem variable:p*

pwscrit107

Pero para obtener informacion sobre las variables, disponemos de otro cmdlet «get-variable» que vamos a ver en siguiente articulo relacionado con scripting en Powershell.

Por ahora basta con que nos quedemos con que existe.

11.5.3 Constantes

Las constantes, como a sabremos, son un tipo de variables un poco especiales, ya que su contenido no cambia.

El comando a utilizar para crear una constante seria:

Set-Varible -name nombreconstante -option readonly -value contenido

Ejemplo

>set-variable -name Pi -option readonly -value 3.14

Observando que en este caso no hemos utilizado el caracter $. Con Set-Variable no lo utilizaremos.

Sin embargo, si queremos trabajar con la constante, si que tendremos que utilizarlo.

Para ver el contenido de la constante Pi, haremos igual que si fuera una variable:

>$Pi

pwscrit108Bueno, creo que por ahora es suficiente. En el proximo tutorial sobre este tema, seguiremos descubriendo mas caracteristicas para poder realizar scripts que nos sirvan para nuestra labor cotidiana.

Venga, a pasarlo bien!!

Otros articulos sobre Powershell:

  • 1-. Introduccion.
  • 2-. Empezando con Powershell 1.0.
  • 3-. Obtener ayuda.
  • 4-. Get-Command.
  • 5-. Tuberias y redireccion.
  • 6-. Get-childitem.
  • 7-. Formateando la salida.
  • 8-. Get-Member.
  • 9-. Politica de ejecucion.
  • 10-. Alias.

—–
Oscar Abad
http://www.xulak.com – Consultoría informática

oscar
oscar

Programador WordPress freelance

Publicado en: powershell, sistemas, tutoriales Etiquetado como: aprendeinformaticaconmigo, constantes, programacion, scripting, variables, windows powershell

20 abril, 2009 Por oscar Deja un comentario

Powershell – 10 – Alias

10.1- Alias

En articulos anteriores hemos comentado o ha salido el termino de Alias, sin especificar lo que son y para que sirven.

Bueno, pues ha llegado el momento de que lo veamos un poco en detalle por que es algo que podemos utilizar para facilitar el trabajo.

Un alias es un nombre alternativo o sobrenombre para un cmdlet o un elemento de un comando, como una funcion, un script, un archivo o un archivo ejecutable. El tema es que podemos utilizar el alias en lugar de el nombre completo del cmdlet.

Ya comentamos que podemos utilizar en Windows Powershell comandos como «dir» o «ls» y muchos mas. Estos no son mas que alias definidos a otros comandos de Powershell. En el caso de «dir» y «ls» el cmdlet al que hacen referencia es «get-childitem«.

Cmdlets de Alias

Powershell incluye varios cmdlets diseñados para trabajar con Alias.

Get-alias, new-alias, set-alias, export-alias e import-alias.

Nombres alternativos para comandos con parametros.

Es posible asignar una lias a un cmdlet, un script, una funcion o un archivo ejecutable, pero no podemos asignar un lias a un comnado y sus parametros. Por ejemplo, podemos asignar un alias a «get-command«, pero no podemos asingnar un alias a «get-command -name get-*«.

Para hacer esto, crearemos una funcion. Pero esto de las funciones es otra historia que ya veremos mas adelante.

Objetos de Alias.

Los alias de Windows Powershell estan representados por objetos que son instancias de la clase System.Management.Automation.AliasInfo.

Para ver las propiedades y metodos de los objetos de alias, obtenemos los alias y los canalizamos a traves de «get-member«.

Por ejemplo:

>get-alias | get-member

Para obtener una lista de los cmdlets relativos a alias:

>get-help *-alias


10.2- Get-Alias.

Get-alias obtiene los nombres alternativos de los cmdlets, las funciones y los archivos ejecutables que se han establecido e la sesion actual. Este conjunto incluye los alias integrados, los alias importados o definidos por el usuario y los alias que se han agregado al perfil de Windows Powershell.

Si especificamos uno o varios alias, «get-alias» obtiene el objeto de alias y muestra sus propiedades, incluido el objeto al que se asigna un alias, como el nombre completo de un cmdlet.

Parametros


-name <String[]>

Especifica el alias que se va a recuperar. De manera predeterminada, recupera todos los alias definidos para la sesion actual. El nombre de esta parametro es opcional.

-scope <String>

Especifica el ambito en el que el alias es valido. Los valores validos son: «global«, «local«, «script» o el numero correspondiente al ambito, donde 0 es el ambito actual y 1 su ambito principal. «local» es el valor predeterminado.

-exclude <String[]>

Omite los elementos especificados. Se permite el uso de caracteres comodin para introducir un patron.

Ejemplo1

>get-alias

Muestra todos los alias de la sesion actual.

Ejemplo 2

>get-alias -name g*

Muestra los alias cuyo nombre comienza por «g» y le sigue cualquier otro u otros caracteres.

Esto lo hacemos para poder ver los alias que se refieren normalmente a los cmdlets que comienzan por «get-«.

Ejemplo 3

>get-alias | where-object {$_.Definition -match «get-command»}

En este ejemplo hemos incluido el cmdlet «where-object» que todavia no hemos visto, pero nos basta con saber que este comando completo nos mostrara los alias que tenga definidos el cmdlet «get-command«.

10.3- Set-Alias

Crea o cambia un alias. Tambien podemos utilizar «set-alias» para reasignar el alias actual a un nuevo comando o cambiar cualquiera de sus propiedades. A menos que se agregue el alias al perfil de Windows Powershell, los cambios que realicemos en el, se perderan al finalizar la sesion o cerrar windows powershell.

Parametros


-name <String[]>

Especifica el nuevo alias. Pueden utilizarse caracteres alfanumericos en los alias pero el primer caracter no puede ser un numero.

-value <String>

Especifica el nombre del elemento del cmdlet o el comando al que se le está asignando un alias.

-description <Sting>

Especifica una descripcion del alias. Si la descripcion contiene espacios, la escribiremos entre comillas.

-scope <String>

Especifica el ambito en el que es valido este alias. Los valores posibles son: «global», «local», «scrip» o el numero correspondiente al ambito actual. «local» es el valor predeterminado.

Para obtener mas informacion al respecto:

>get-help -detailed set-alias


Ejemplo 1

>set-alias

Este comando nos permite crear un alias de forma interactiva. Tendremos que facilitar el nombre y el valor del mismo.

En este ejemplo crearemos el alias «np» cuyo valor sera «notepad.exe».

Ahora, para saber si hemos establecido correctamente el alias, podemos introcucir el siguiente comando:

>get-alias -name «n*»

Nos muestra todos los alias cuyo nombre comienza por «n».

Y por ultimo, podemos probar el alias escribiendo:

>np

No pongo la captura, pero lo que debe hacer es abrirnos el block de notas, igual que si escribimos «notepad.exe».

Ejemplo 2

Podemos hacer lo mismo que en el ejemplo anterior en un solo comando, sin que sea interactivo de la siguiente forma:

>set-alias -name np2 -value notepad.exe

o

>set-alias np2 notepad.exe

10.4- New-Alias

Este cmdlet es practicamente identico al aterior, a set-alias. Lo unico que los diferencia es que en el caso de «new-alias» no permite sobreescribir un alias existente. En el caso de que intentasemos esto, nos mostraria un mensaje de error como el de la siguiente captura:

Sin embargo, «set-alias» si nos permite sobreescribir un alias sin comentarnos nada.

Cada uno tiene lo suyo, por eso es que tenemos que andar con cuidado cuando estemos utilizando «set-alias» y pretendamos establecer un nombre que ya existe. En estos casos es aconsejable utilizar el cmdlet «get-alias» para comprobar que no existe el alias que vamos a crear.

10.5- Export-Alias

Exporta informacion sobre los alias definidos actualmente dentro del ambito del espacio de nombres espeficiado a un archivo.

Parametros


-path <String>

Especifica la ruta de acceso al archivo en que se almacenara la informacion sobre los alias. Se puede utilizar caracteres comodin.

-name <String>

Especifica los nombres de los alias que se van a exportar. Para indicar varios alias, los separaremos por comas (,). Si no especificamos ningun alias, exportaremos la informacion de todos los alias.

-scope <String>

Especifica el ambito dsde el que se deben exportar los alias.

Para mas informacion al respecto:

>get-help -detailed export-alias


Ejemplo 1

>export-alias -path alias.txt

Este comando exportara la informacion de todos los alias disponibles al fichero «alias.txt».

Si abrimos el fichero «alias.txt» veremos algo parececido a lo siguiente:

Ejemplo 2

>export-alias -name np -path np.txt

Si abrimos el fichero «np.txt«:

10.6- Import-Alias

Importa una lista de alias desde un archivo.

Nos puede servir para cargar unos alias que tengamos definidos en un equipo en concreto y queramos tenerlos disponibles en otros equipos.

Parametros


-path <String>

Especifica la ruta de acceso al archivo que contienen la informacion sobre los alias.

-scope <String>

Especifica el ambito que tendran estos alias.

Para obtener mas infomacion sobre «import-alias«:

>get-help -detailed import-alias


Ejemplo 1

>import-alias -path np.txt

Si ejecutamos este comando en la misma sesion de Windows Powershell en la que la hemos creado, nos dara un error puesto que ya existe dicho alias.

Para probarlo, cerramos Windows Powershell, lo volvemos a abrir e introducimos el comando.

Comprobamos que efectivamente existe el alias:

Bueno, hasta aqui el tema de los alias, espero que os haya aclarado un poco este asunto.

Venga, hasta la proxima!

Otros articulos sobre Powershell:

  • 1-. Introduccion.
  • 2-. Empezando con Powershell 1.0.
  • 3-. Obtener ayuda.
  • 4-. Get-Command.
  • 5-. Tuberias y redireccion.
  • 6-. Get-childitem.
  • 7-. Formateando la salida.
  • 8-. Get-Member.
  • 9-. Politica de ejecucion

—–
Oscar Abad
http://www.xulak.com – Consultoría informática

oscar
oscar

Programador WordPress freelance

Publicado en: powershell, sistemas, tutoriales Etiquetado como: alias, aprendeinformaticaconmigo, get-alias, scripting, set-alias, sistemas, windows powershell

  • « Página anterior
  • 1
  • 2
  • 3
  • 4
  • Página siguiente »

Hazte con el tema Divi

Divi WordPress Theme
Libro windows server 2008

Libro certificación Windows Server 2016

Libro certificación Windows Server 2016

Libro Windows Server 2016

Libro Windows Sever 2016
Web Hosting

Últimos artículos

  • PHP función var_dump(): Mostrar el contenido de una variable
  • PHP función unset(): Eliminar variables
  • MySQL LIMIT: Limitar la canidad de filas en una consulta
  • PHP función isset(): Evaluar si una variable está definida
  • PHP función empty(): Comprobar si una variable está vacía
  • MySQL SELECT DISTINCT para encontrar registros con diferente valor en el mismo campo
  • Los mejores libros en español para aprender WordPress

Mis Webs

  • Aprende Informática Conmigo
  • Dinapyme
  • MUSIKP
  • Oscar Abad Folgueira

Proyectos

  • Basabe Baserria
  • Batukada Battuere
  • Bicicletas Sin Pedales
  • Bordalan
  • C.R. Pantano del Rumblar
  • Dinapyme
  • DiverBiblio
  • Egia Ingenieros
  • Hermanos Vivas construcciones
  • Ibartxi – Suministros de Gas y Soldadura
  • LANBASE
  • LS Fotografía
  • Luke and Phil
  • Masajes Mas Sana
  • MUSIKP
  • Oh! Yeah Dev
  • Oscar Abad Folgueira
  • Participación ciudadana Basauri
  • Restaurante Bideko
  • Taldesport
  • Vicente Choya
  • WooCommerce Knowledge2K
  • Inicio
  • Contenido Anterior

Copyright © 2023 · Oscar Abad Folgueira Y DINAPYME· Acceder