Está en la página 1de 15

PowerShell Scripting

Capítulos preview

Autor: Victor Silva

vmsilvamolina@hotmail.com
http://blog.victorsilva.com.uy
Índice
I. Autor: Victor Silva .................................................................................................. 0
II. Capítulo 1 - Introducción ...................................................................................... 2
1.- ¿POR QUÉ POWERSHELL?
2.- ¿A QUIÉN VA DIRIGIDO?
3.- EJEMPLO DE CÓDIGO
4.- NOTAS
5.- TRADUCCIÓN
6.- ALCANCE DEL LIBRO
III. Capítulo 2 – Conceptos generales ......................................................................... 6
1.- HISTORIA
2.- LA CONSOLA Y EL ISE
2.1.- PowerShell hosts
2.2.- Consola
2.3.- ISE
3.- PRIMEROS TÉRMINOS
3.1.- Cmdlet
3.2.- Objetos
3.3.- Pipeline
3.4.- Permisos de ejecución
3.5.- Scripting
4.- FUNCIONES Y MÓDULOS
Capítulo 1 - Introducción

Windows PowerShell en el presente se ha posicionado como el lenguaje de scripting de referencia en


ambientes Microsoft, aunque también comienza a dar sus primeros pasos en el mundo Open Source
desde su liberación en Linux. Esta adopción en masa y popularidad se ha construido gracias a los
beneficios que se obtienen al utilizar esta herramienta, ya sea en tareas diarias, simples o complejas en
lo que refiere a administración o gestión de sistemas. Si bien PowerShell es nuevo y diferente, ha sido
diseñado para reutilizar los conocimientos adquiridos anteriormente y reutilizarlos.

Este libro pretende poder acercar este lenguaje a aquellos que todavía no lo han hecho, y mostrar las
ventajas del mismo, ejemplificando la simplicidad de su uso, tanto para la administración como para
automatizar y controlar procesos de gestión en los sistemas.

El primer capítulo trata sobre las principales características de Windows PowerShell a modo de
introducción, y los aspectos que se presentan durante el libro como notas de ayuda o ejemplos de
código, que permitirán una mejor comprensión de los temas tratados.

1.- ¿POR QUÉ POWERSHELL?

Si se compara Windows PowerShell con otros sistemas de scripting, se encontrarán pros y contras en todos los sistemas
que sean ingresados en la comparativa. O sea que no hay ganador o perdedor. Hay algunos que se adaptan más a un
escenario o un fin en particular y otros se adaptan menos (o son menos adecuados).

Entonces, ¿por qué PowerShell? Porque existen entornos Windows y en la gran mayoría de los productos Microsoft se
encuentran disponibles módulos que se pueden agregar a la consola con funciones específicas para facilitar la
administración. Estos módulos contienen grupos de comandos específicos llamados cmdlets.

Otro punto a destacar viene de la mano de la sintaxis, ya que la estructura de los comandos predefinidos se basa en
"expresiones verbales" del tipo “Verbo-Sustantivo” que son fáciles de recordar y simplifican la escritura de bloques de
código. Dentro del libro se define como objetivo declarar ejemplos para que quede más claro el concepto. He aquí un
ejemplo: si se desea obtener algún dato, como por ejemplo los procesos que se ejecutan en el sistema, sin dudas ese
cmdlet va a comenzar con el verbo "Get". En cambio, si nuestro objetivo es definir un valor, una propiedad, será la
palabra "Set" la que inicie el nombre de nuestro comando (en la gran mayoría de las veces). "New" nos está diciendo que
se quiere crear algo que no existía y así se puede seguir detallando diferentes ejemplos de cómo se componen los verbos
que dan nombre a los cmdlets. Existen grupos de verbos reservados para ser utilizados por PowerShell para seguir la
misma línea de razonamiento, lo que facilita el uso de la herramienta.

La puntualización del párrafo anterior, así como el ejemplo detallado intenta dejar en claro que esa es la esencia del
lenguaje, la simplicidad, en el caso de trabajar con roles de un servidor Windows, por ejemplo, se encuentran disponibles
grupos de comandos que van a tener una estructura para identificarlos más fácilmente: dentro del módulo de Windows
Server BackUp se observa que la estructura de comandos se presenta con la siguiente disposición:

<verbo>-WB<sustantivo>

POWERSHELL SCRIPTING 2
Donde el sustantivo en este caso va a comenzar con WB que es la sigla de Windows BackUp. Un ejemplo de comando
sería Get-WBSummary que obtiene el status del historial de backups.

Otro dato para destacar es la facilidad de interactuar con .NET, lo que da como resultado un modelo de programación
muy potente. Gracias a esta interacción se encuentra a disposición la posibilidad de generar interfaces gráficas con
Windows Forms o desarrollar gráficas y guardarlas como imágenes utilizando la consola sin más. Si bien PowerShell
permite trabajar con el Framework de .NET, aunque no viene integrado a sí mismo, como es el caso de WMI, COM,
XML que también se pueden manipular desde PowerShell y no es necesario cargar módulos adicionales para su uso.

2.- ¿A QUIÉN VA DIRIGIDO?

Es una pregunta muy particular, formalmente se deberán nombrar a los administradores de sistemas en donde se
agrupan los que trabajan con Exchange, SharePoint o SQL. Dentro de este grupo, que se conoce a sus integrantes
normalmente como IT Pros, también lo integran los que administran Active Directory o System Center, sin olvidarnos
de los que utilizan Veeam o VMWare (sí, es posible trabajar con VMWare o Veeam desde PowerShell).

También a los programadores .NET, que van a encontrar un montón de herramientas para hacer más fácil la
implementación de ambientes, generar pruebas o monitorear servicios y aplicaciones. Pero también es un llamado a esos
que ven a PowerShell como un sistema de culto, para que se animen, prueben, que les salten errores y pantallas con
letras rojas, pero que sigan intentando utilizar esta herramienta para superarse día a día.

Todo entusiasta que tenga ganas de aprender este lenguaje es bienvenido a leer este libro. Se dejarán en claro muchas
cosas interesantes y divertidas, también se compartirá cómo aprender a automatizar, crear formularios, gráficas, exportar
y manipular datos, entre otras cosas más complejas y variadas.

3.- EJEMPLO DE CÓDIGO

Todos los ejemplos de código han sido creados desde la PowerShell Integrated Scripting Environment (ISE) y la consola
de PowerShell. Existen otros IDEs1 para PowerShell, como se comentará en el próximo capítulo, pero eso ya es decisión
personal e individual de cuál es la que se adapta mejor a las necesidades.

1
IDEs (Integrated Development Environments), son los entornos que se utilizan para desarrollo. Cada lenguaje
tiene su propio IDE, lo que facilita trabajar con su lenguaje, ya sea por tener accesos directos o atajos particulares en
cada caso.
POWERSHELL SCRIPTING 3
Dentro del libro se detallan bloques de código de la siguiente manera:

function Set-Ejemplo ($parametroEjemplo) {


if ($parametroEjemplo -ne $null) {
#Imprime la variable
Write-Host $parametroEjemplo
} else {
#Termina el script
exit
}
}

Donde gracias a los diferentes colores que se generan en la consola por medio de la feature Syntax highlighting, es
posible identificar fácilmente los nombres de funciones, métodos, variables y un gran etcétera (que todos esos nombres
no asusten ni abrumen, ya que dentro del libro estarán detallados y definidos todos los conceptos).

4.- NOTAS

También se presentarán pequeñas secciones de notas y consejos, donde se hará relevancia en datos particulares o
cuidados a tener en cuenta a la hora de ejecutar cierto código o se detallarán posibles situaciones a enfrentar en el mundo
real y que consideraciones se deben de tener en cuenta a la hora de afrontarlas.

Nota: Dentro de cada capítulo existen notas con información destacada, pequeños consejos o acceso
a información adicional sobre el tema que se esté tratando en el capítulo o sección.

5.- TRADUCCIÓN

Si bien la idea original e impulsora de este libro es que todo su contenido sea en español, ya que hay muy poco material
de referencia en este idioma, al ser el mundo tecnológico predominante en inglés y por contar con la mayoría de los
recursos disponibles en internet en el mismo idioma, se mantendrán los conceptos detallados en su idioma original, así
como nombres propios, tecnologías o plataformas que, poco a poco, se presentarán dentro de este material.

POWERSHELL SCRIPTING 4
6.- ALCANCE DEL LIBRO

El objetivo primordial del libro es acercar este fabuloso lenguaje de scripting a todo aquel que no se haya iniciado, o que
quiere profundizar en algunos conceptos que no domina completamente. En los capítulos siguientes se detallarán
conceptos teóricos, pero todos ellos reforzados con ejemplos que permiten comprender realmente cada funcionalidad.

Como segundo objetivo se presenta el desarrollo de nuevos skills, como es la capacidad de scripting, aunque no se
pretende formar desarrolladores. Se busca avanzar con la capacidad de encontrar tareas que son repetitivas y tediosas y
resolverlas utilizando PowerShell. Lo que permite ser más eficaces y eficientes en el ambiente laboral.

Por más que el libro presente situaciones o problemas relacionados con otros productos Microsoft, no se detalla el uso
de las herramientas ni el correcto funcionamiento de las mismas. No se explica cómo crear un buzón en Exchange o un
sitio en SharePoint, el libro se centra en cómo funcionan las estructuras para llevar a cabo las tareas, pero como cualquier
otra herramienta el usuario debe conocer que está haciendo con ella.

Idealmente también se presenta el libro como un material de referencia o consulta de algún concepto o situación a
resolver: ¿qué debemos tener en cuenta para acceder remotamente a un equipo? Existe un capítulo que habla de ello,
¿cómo acceder a una base de datos? También se encuentra en el libro la información necesaria, ya que también se ha
pensado en el orden de la información como un progreso lógico de desarrollo en donde se presentan nuevos conceptos
tomando como referencia conceptos anteriormente detallados.

POWERSHELL SCRIPTING 5
Capítulo 2 – Conceptos generales

El capítulo 2 detalla la historia de PowerShell, desde el manifiesto que dio su origen hasta el proyecto alojado en
GitHub en donde se encuentra la versión Open Source. Luego de haber repasado la historia y evolución de
PowerShell se presenta la consola interactiva, así como el ambiente que nos proporciona Microsoft para
desarrollar nuestros scripts llamado ISE.

¿Qué representa el término cmdlet? La respuesta se encuentra también en el capítulo 2, así como otros
términos que permiten comenzar a entender conceptualmente (por ahora) este lenguaje de scripting.

1.- HISTORIA

El proyecto Monad ya tiene varios años en la calle y pocos son los que lo recuerdan con ese nombre en particular.
Jeffrey Snover (Ingeniero que trabaja en Microsoft e inventor de Windows PowerShell) en el 2002 escribió el “Monad
Manifiesto”, el cual está publicado en su web y libre para ser descargado (se ha quitado información confidencial y los
ejemplos se han actualizado a la sintaxis actual). Este manifiesto define lo que su inventor quería lograr en aquel
entonces y cuál era su visión a largo plazo, o lo que al menos pretendía desarrollar.

Hoy PowerShell es conocido por todo aquel que trabaja con sistemas Windows y a su vez, ha empezado a extenderse
dentro de Linux también debido a sus últimas mutaciones incursionando en el mundo del software Open Source. Desde
la época de MS-DOS o Windows 9.X se han incluido shells (intérpretes de línea de comandos) en los sistemas
operativos de la ventana, donde comenzó a hacerse fuerte la cmd.exe dando paso al batch script como lenguaje y
herramienta para la administración de ambientes Windows.

Microsoft liberó públicamente la primera beta en junio del 2005, entregando posteriores versiones hasta el 25 de abril de
2006 donde se renombra a Windows PowerShell, posicionando este fantástico software dentro del repertorio de
herramientas administrativas. Sucedido el cambio de nombre es que se ha modificado la dirección del desarrollo de este
producto apuntando a que Windows PowerShell sea un componente de Windows nativo. En noviembre del año 2006 se
libera la primera versión de PowerShell, siendo un componente opcional en Windows Server 2008.

Con la aparición de Windows 7, en agosto del 2009 se revela la versión 2 de PowerShell (PowerShell v2.0)
completamente integrada al sistema operativo de escritorio, así como también parte de Windows Server 2008 R2. Para el
resto de los sistemas operativos de la gente de Redmond como Windows XP, Windows Vista y Windows Server 2003 y
Windows Server 2008 fue en octubre del mismo año cuando se liberaron las versiones de 32 y 64 bits para descargar de
manera opcional.

El 18 de agosto de 2016 se dio un gran paso en lo que a la evolución de la herramienta se refiere: la liberación de la
versión PowerShell Core, que se ejecuta en .NET Core, moviendo así el proyecto al mundo Open Source dentro de la
plataforma GitHub. Cabe destacar que la versión core difiere de "Windows PowerShell" que se ejecuta en el .NET
Framework.

Es así que en la actualidad PowerShell ha tomado fuerza no solo en la automatización de tareas o en la simplificación de
procesos, sino que también se encuentran varios proyectos dentro de la rama de seguridad informática, por ejemplo,
como es el caso de “Nishang” o si se mira dentro del mundo del scripting puro y duro se podrá escuchar sobre el
proyecto “Pester”: framework que permite realizar testing basado en pruebas unitarias (unit test), ni que hablar de

POWERSHELL SCRIPTING 6
“Desire State Configuration” generando una plataforma para administrar, implementar y configurar sistemas por medio
de plantillas de configuración siendo la herramienta por defecto para los DevOps en entornos Windows, “Just Enough
Administration” es otro proyecto que enfoca sus esfuerzos para poder definir un modelo de RBAC (Role-based Access
Control) a la hora de usar PowerShell. Esa es la esencia de esta herramienta, la evolución y la construcción continua de la
misma, ya sea porque se extienden funcionalidades como también a la hora de adicionar nuevas y mejores características,
de parte de Microsoft y de la comunidad.

2.- LA CONSOLA Y EL ISE

PowerShell, como todo lenguaje de scripting, provee una consola para trabajar de forma nativa. Pero esta consola no es
más que un intérprete de PowerShell, ya que solamente es un host.

2.1.- PowerShell hosts

Al trabajar con PowerShell no se hará de forma directa, ya que en realidad lo que sucede es que se interactúa por medio
de un host. Es decir que al utilizar PowerShell se están enviando órdenes al motor por medio de un host específico, ya
que el motor de PowerShell es un conjunto de clases de .NET Framework almacenada en un archivo DLL siendo un
hecho la no interacción de forma directa. Por lo que el host nos determina la manera de interactuar con el motor de
PowerShell.

Los que han trabajado con Exchange Server o Lync Server (hoy Skype for Business) habrán podido notar que, al realizar
ciertas acciones, dentro de los asistentes que se despegan en la interfaz gráfica se llegan a leer las acciones que realiza el
sistema para llevar a cabo nuestras configuraciones, cambios y demás. Durante esas instancias es que se realizan acciones
directamente al motor de PowerShell, por lo que las consolas de estos productos no son más que hosts en los que se
interactúa con PowerShell sin intermediarios, así como también lo son las shells que acompañan las herramientas de
administración y gestión otorgadas por Microsoft, donde se conjugan los cmdlets específicos del producto junto al
motor subyacente de PowerShell.

Microsoft provee dos hosts para trabajar sobre PowerShell: la consola y el ISE. También existen en el mercado
desarrollos de terceros como lo son: PowerGUI, PowerShell Plus o PrimalScript por nombrar algunos de los más
conocidos. Dentro de los hosts que se ofrecen se encontrarán varias características adicionales donde puede significar
una mejora el uso de los mismos.

2.2.- Consola

Si bien los desarrolladores que trabajaron sobre PowerShell han realizado cambios visuales a la apariencia inicial (se ha
modificado el fondo de color negro a azul, como cambio más visible, si se quiere destacar), básicamente utiliza gran
parte del software original. Como resultado de esta decisión, se mantienen algunas limitaciones, siendo una de ellas, la
imposibilidad de utilizar los double-byte character set (DBCS) o los conjuntos de caracteres de doble byte correctamente.
Éstos son utilizados básicamente por los idiomas asiáticos (chino tradicional, coreano, japonés, etc.) y presentan errores
de visualización a la hora de ser utilizados. Otras funcionalidades básicas o primitivas como el cortar, copiar o pegar

POWERSHELL SCRIPTING 7
también se mantienen presentes, aunque se ha avanzado en el desarrollo de las mismas en las últimas versiones de
PowerShell.

Figura 2.1- La consola de Windows PowerShell en Windos10

Al considerar todo lo anterior, surge la siguiente pregunta, ¿por qué usar la consola entonces? Porque en algunos casos
es la única opción disponible en caso de usar versiones core de Windows Server, por ejemplo. También están aquellos
que se acostumbraron a los entornos Unix o Linux, la consola se ve familiar, siendo esta la principal razón para
mantenerse trabajando en ella. Trabajar sobre la consola (en las últimas versiones) permite también disponer de la
funcionalidad de autocompletar, que agiliza el trabajo de ingresar comandos a la hora de utilizarla.

2.3.- ISE

El término ISE, es el acrónimo de Integrated Scripting Environment que es, por dejarlo más en claro, similar a lo que un
IDE es para un lenguaje de desarrollo. Dentro de la ISE de Windows PowerShell, se pueden ejecutar comandos y
escribir código para generar scripts complejos. El ISE permite comprobar y depurar scripts en una sola interfaz gráfica
de usuario, mediante la edición de varias líneas, o la posibilidad de ejecutar de forma selectiva cierta parte de nuestro
bloque de código. A su vez, cuenta con características como la sintaxis resaltada por colores donde queda de forma
explícita los diferentes conceptos del lenguaje como variables, funciones, etc. La ayuda contextual es otra gran
característica a resaltar, como también la compatibilidad con idiomas.

Nota: Para conocer qué versión de PowerShell se está ejecutando en la máquina local se debe
ejecutar dentro de la consola o del ISE, lo siguiente:

$PSVersionTable

POWERSHELL SCRIPTING 8
Se pueden usar elementos de menú y métodos abreviados de teclado para realizar muchas de las mismas tareas que
realizaría en la consola de Windows PowerShell. Por ejemplo, si se depura un script en ISE de Windows PowerShell, se
pueden establecer puntos de interrupción de una línea en un script. A todo lo anterior se le suma un panel de comando
disponible a modo de ayuda para poder consultar detalles de un cmdlet específico y la posibilidad de poder ejecutar
comandos ingresando los valores de los parámetros dentro del mismo panel. Debido a esto y todo lo anterior es notorio
que se encuentra a disposición una gran herramienta a la hora de trabajar con PowerShell.

Figura 2.2- El Integrated Scripting Environment (ISE)

Dentro del ISE también se encuentra presente el sistema de pestañas para poder trabajar con varios scripts a la vez y la
posibilidad de contar con pestañas remotas, en las que se debe especificar el nombre del equipo al que se desea conectar
y las credenciales para poder tener una instancia remota de PowerShell.

Para aquellos que desean tener el código ordenado existe una funcionalidad que no es muy utilizada y son las regiones.
Las regiones son bloques de código que pueden ocultarse por medio del ISE (utilizando botones para expandir o
contraer). La siguiente imagen pretende aclarar esta funcionalidad.

POWERSHELL SCRIPTING 9
Figura 2.3- Definición de una región

Una región es un bloque de código delimitado por dos estructuras sintácticas similares a los comentarios; la primera es la
de definición de la región en donde puede especificarse un nombre por ejemplo y la última es la de cierre en donde
solamente se especifica #endregion.

3.- PRIMEROS TÉRMINOS

Todo lenguaje tiene sus particularidades y dentro de ellas varios elementos que deben ser definidos para poder hacer uso
correcto en el momento que sea necesario o cuando se disponga a ello. De lo contrario, no se estaría aprovechando de
forma eficiente el uso del lenguaje seleccionado, ya sea para desarrollar un proyecto específico o bien para crear un script
que automatice una tarea en particular. Las definiciones que se presentarán a lo largo de este capítulo tienen el fin de
comenzar a construir una base de información en la cual se irán sumando definiciones y estructuras sintácticas para
poder avanzar en el conocimiento de Windows PowerShell como lenguaje y herramienta.

3.1.- Cmdlet

Si bien este término se usó en la introducción brevemente (y allí también se definió de forma fugaz) deben de enfatizarse
algunos puntos que permitirán sacar mejor partido a cada línea de código a utilizar. Un Cmdlet es el nombre de un
comando en PowerShell, que utiliza la estructura “Verbo-Sustantivo” donde los verbos a utilizar son declarados de
forma estandarizada y el sustantivo en la gran mayoría de los casos sigue una nomenclatura donde se puede reconocer (o
estimar) su funcionalidad. Cabe destacar que, si bien al utilizarse en la consola la característica de autocompletar se deja
ver que los nombres de los cmdlets utilizan mayúsculas y minúsculas, PowerShell no es case sensitive.

3.2.- Objetos

POWERSHELL SCRIPTING 10
Dentro de las primeras acciones a realizar, se comenzará a definir los datos con los que PowerShell trabaja antes de
empezar a utilizar la herramienta. PowerShell difiere de otros sistemas de scripting tradicionales que devuelven datos que
han sido procesados en forma de texto, debido a que éste los procesa y gestiona como objetos. Objetos que en la
consola tienen una representación por medio de texto, pero que pueden manipularse de formas mucho más elaboradas y
complejas.

Debido a que todos los objetos de PowerShell son objetos .NET, comparten un método .ToString(), que devuelve la
representación en texto de los datos de un objeto.

¿Y qué es un objeto? Es así como se puede pasar a definir brevemente que es lo que representa un objeto. Un objeto es
un ente que cuenta con un conjunto de datos y funciones relacionadas. Estas funciones que declara la definición son los
métodos.

3.3.- Pipeline

Un concepto clave dentro de Windows PowerShell es el Pipeline o también llamado “Tubería”. PowerShell implementa
este concepto de pipeline, que permite enviar la salida de un cmdlet a otro cmdlet como entrada. El Pipeline permite
manejar los objetos (como se comentó en el párrafo anterior) generando un pasaje de un lado a otro de los datos
extremadamente eficaz y simple. No va a ser necesario que se escriban o definan varias líneas de código para poder
realizar una tarea compleja. Gracias al Pipeline se puede filtrar y manipular la información dependiendo de lo que
necesite en cada oportunidad. El siguiente ejemplo pretende aclarar este concepto en particular: la salida de cmdlet Get-
Process perfectamente puede ser conducido a otro cmdlet como Where-Object el cual filtrará los procesos que, por
ejemplo, consuman menos de 50MB de memoria, para luego ser enviados al cmdlet Select-Object así éste seleccionará
solamente los primeros 10.

Este concepto de Pipeline proviene de los sistemas Unix que permite construir comandos complejos (utilizando este
recurso para solapar diferentes etapas), pero a diferencia de éste en particular, PowerShell lo utiliza manipulando
objetos .NET estructurados gracias a los procesos coordinados con el sistema operativo, en lugar de flujos de bytes,
eliminando la necesidad de extraer las estructuras de datos en forma de texto para ser posteriormente manipuladas.

Para interconectar la salida de un cmdlet con la entrada de otro cmdlet se usa el carácter especial “|”. Este carácter
indica que debe enviar los objetos de salida del cmdlet a la izquierda del mismo hacia el cmdlet a la derecha.

Considerando la importancia del concepto, se expone un apartado dentro del capítulo 5 (Sintaxis II) donde se detallará lo
presentado anteriormente y se estudiarán ejemplos de uso para profundizar el conocimiento sobre este tema en
particular.

3.4.- Permisos de ejecución

POWERSHELL SCRIPTING 11
Para evitar que sucedan ejecuciones de scripts maliciosos, PowerShell utiliza el concepto de Execution policy el cual
define perfiles por política de seguridad en los que se pueden ejecutar ciertos scripts o no dependiendo del perfil
aplicado en ese momento en la máquina ejecutante. Los perfiles son los siguientes:

• Restricted – Permite ejecutar comandos de forma individual. No se ejecuta ningún script en el equipo.

• RemoteSigned – Política por defecto en Windows Server 2012 R2. Todos los scripts que han sido creados
localmente pueden ejecutarse, ya que no se requiere firma digital. El resto de los scripts, ya sean
descargados desde portales o mismo desde la Galería de Microsoft, así como los que se encuentran por ahí
en internet no se ejecutarán (salvo que sean firmados digitalmente por una entidad en la cual la máquina
local tiene confianza).

• AllSigned – Se ejecutarán solamente los scripts que cuentan con una firma digital en la cual la máquina
local confía plenamente en donde se incluyen los scripts escritos localmente. En el caso que se quiera
ejecutar un script en el cual no se confía plenamente en su firma, aparecerá un prompt donde se deberá
indicar si se confía o no para su posterior ejecución.

• Unrestricted – Esta opción es la menos segura ya que permite la ejecución de todos los scripts, sin
importar el origen o quién los firma digitalmente, aunque aparecen advertencias a la hora de ejecutar estos
scripts.

• ByPass – Nada es bloqueado por la máquina y no aparece ningún tipo de advertencia ni prompt para tener
el consentimiento del usuario ejecutante.

• Undefined – No hay una política de ejecución definida en el ámbito actual. Si la execution policy en todos
los ámbitos es Undefined, realmente se habla de que la política es Restricted, ya que es la política por
defecto.

3.5.- Scripting

El término scripting engloba la capacidad de ejecutar varias tareas enlazadas (en este caso: de renglón a renglón o línea a
línea) de forma encadenada.

Windows PowerShell es un lenguaje de scripting del tipo dinámico, que permite utilizar operaciones complejas por
medio de cmdlets imperativamente. El lenguaje en sí soporta variables, funciones, estructuras de control, condicionales,
manejo de excepciones, y la posibilidad de extender su capacidad gracias a .NET. A las variables se les puede asignar
cualquier valor incluyendo las salidas de los cmdlets, por ejemplo, generando una herramienta muy poderosa y simple.

POWERSHELL SCRIPTING 12
4.- FUNCIONES Y MÓDULOS

Windows PowerShell cuenta con varios recursos para poder trabajar de forma eficiente y uno de ellos son las funciones.
Las Funciones, por definición, son un conjunto de tareas que se entiende van a ser ejecutadas en varias oportunidades,
por lo que se agrupan bajo un nombre para ser reutilizadas una y otra vez. Estas funciones cuentan con la capacidad de
definir parámetros en los que se ingresan diferentes valores dependiendo del tipo de información requerida. Los
parámetros pueden tener ciertas cualidades como ser; nombres específicos, posición, tipo de dato, la capacidad de
conmutar con otros valores, así como también ser dinámicos. Sin restarle importancia, se debe destacar que los
parámetros pueden leerse a través del pipeline.

Los resultados de las funciones pueden asignarse a variables, impresos en la consola o ser un método de entrada para
otra función o cmdlet.

A continuación, un ejemplo de función sencillo en el que se representan varios elementos de la misma:

function Get-Ping ($Computer) {


#Acá defino la acción de la función
Test-Connection -ComputerName $Computer -Count 1
}

La función anterior básicamente realiza una tarea similar a lo que realiza el programa ping: bajo el nombre declarado
Get-Ping, envía por medio del cmdlet Test-Connection paquetes de solicitud de eco ICMP al host definido por la
variable $Computer. El parámetro count indica la cantidad de paquetes que se desea enviar (por defecto 4). Se debe
destacar la línea que aparece en color verde, ya que eso es un comentario. Para definir un comentario en PowerShell
basta con comenzar la línea con “#”. A medida que avancen los capítulos se irán describiendo formas más complejas
para comentar el código, así como también pequeños trucos a la hora de utilizarlas. Los comentarios no son exclusivos
de las funciones, es decir que se pueden usar en cualquier lugar de nuestros scripts.

Nota: Para dejar en claro la autoría o el historial de versiones de un script en particular se utilizan
encabezados en donde se define la información correspondiente utilizando la estructura de los
comentarios, que básicamente es comenzar cada línea de código con el símbolo numeral. He aquí un
ejemplo simple:

########################################

# Autor: Victor Silva

# Fecha: Julio 1, 2017

# Versiones: 1.0 - Versión inicial

########################################

Los módulos son archivos que agrupan varias funciones, dependiendo del uso o la necesidad de la situación. Microsoft a
lo largo de los años ha generado módulos específicos para la mayoría de sus productos, como, por ejemplo: Skype for

POWERSHELL SCRIPTING 13
Business Server, Exchange Server, Azure, etc. Estos módulos son distribuidos junto a los binarios de los productos o
quedan disponibles en los centros de descarga de software que Microsoft Proporciona.

Es posible dentro de las opciones que ofrece PowerShell crear nuestros propios módulos para poder organizar o
contener nuestras propias funciones también. Existen 2 tipos de módulos: Binarios y Scripts.

Los módulos binarios son desarrollados a través de .NET (.dll) ya que contienen código compilado dentro de la
plataforma, donde se puede utilizar por ejemplo C# para crear los cmdlets. Es necesario contar con conocimientos de
programación para poder desarrollar un módulo binario.

Por otra parte, el módulo script es un archivo con una extensión específica para tal fin (.psm1) cuyo contenido no es
nada más ni nada menos que código PowerShell válido y funcional. Es decir que básicamente este tipo de módulo no
deja de ser una forma “ordenada” para alojar funciones específicas.

Existe lo que se llaman los manifiestos de módulos que son documentos que describen contenidos de los módulos y
determina su forma de uso. Sumado a lo anterior los manifiestos contiene información del autor, versiones y quedan
visibles para ser consumidos por PowerShell, ya que su aplicación es tan sencilla como copiar este documento a la raíz
donde se encuentra el módulo.

Los módulos pueden gestionarse de varias maneras, así como también existen ciertos cmdlets para comprobar si un
módulo ya existe en el sistema o que funciones (o cmdlets) se estarían adicionando a nuestra consola al momento de
agregar un módulo específico.

El primer cmdlet que se pretende compartir es el Import-Module ya que es el que se utiliza para importar un módulo que
ya se encuentra localmente pero no ha sido indexado por la consola. Esto puede deberse a que el módulo pertenece, por
ejemplo, a otro host diferente al que se está utiliza en ese momento dado. Para importar cierto módulo basta con
ejecutar:

Import-Module Azure

Por ejemplo, para tener disponibles los comandos que ofrece el módulo de Azure, debemos de ejecutar lo anterior,
siempre y cuando el módulo se encuentre instalado localmente para que pueda ser rastreado por el sistema a la hora de
realizar la importación.

POWERSHELL SCRIPTING 14

También podría gustarte