Este capítulo puede parecer algo pesado, pero es necesario. Entenderemos globalmente, qué podemos hacer con PowerShell. No os preocupéis si no entendéis algo. En los capítulos siguientes, se mostrarán ejemplos, donde se verá más claro el significado de estos términos.
El Lenguaje
PowerShell analiza el texto de dos maneras. El primero, el modo de comandos, donde las comillas no son necesarias en una cadena. La segunda, el modo expresión, donde las cadenas han de utilizar comillas. El modo de análisis está determinado por lo que se encuentra al principio de una declaración. Si es un comando, entonces la instrucción se analiza en el modo de comando. En caso contrario, la sentencia se analiza en el modo de expresión.
Comandos
Hay 4 categorías de comandos en PowerShell:
Cmdlets | Estos son comandos incluidos en la línea de comandos, escritos en lenguaje .NET tal que C# o Visual Basic. Los usuarios pueden aumentar la colección de cmdlets, escribiendo y cargando complementos en PowerShell |
Funciones | Las funciones son comandos escritos en el lenguaje de PowerShell que son definidos dinámicamente. |
Scripts | Los scripts son ficheros de texto en el disco con extensión .ps1 que contienen una colección de comandos PowerShell. |
Aplicaciones | Las aplicaciones (también conocidos como comandos nativos) son los programas existentes en Windows. Estos comandos podrían ser ejecutables, documentos para los que existen editores asociados, como un fichero Word o incluso scripts escritos en otros lenguajes para los cuales hay un intérprete instalado e incluyen sus extensiones en la variable de sistema PATHTEXT. |
Líneas de proceso (o fuentes de información): Como en cualquier línea de comandos, las líneas de proceso son el centro para las operaciones de PowerShell. Sin embargo, en vez de devolver cadenas de procesos externos, líneas de PowerShell están compuestos por una colección de comandos. Estos comandos procesan un línea de comandos por vez, pasando cada objeto de línea en línea. Los elementos pueden ser basados en procesos de propiedades tales como Nombre y Longitud en vez de tener que extraer subcomandos de un objeto.

Variables
Tipos de Variables de PowerShell: PowerShell dispone de la colección típica de tipos de variables encontrados en otros lenguajes dinámicos: strings, números, arrays y matrices asociadas.
Números: PowerShell soporta todos los formatos indicados para .NET. Números Hexagesimales son usados de la misma manera que en C y C# con un inicio en «ox» como en oxF8oe. Los números con coma flotante incluyen precisión Simpe (Single) y doble (Double) y decimales. El redondeo bancario es utilizado cuando se redondean los valores. Las expresiones son tan largas como sea necesario. Una característica única de PowerShell son los sufijos multiplicadores, con los que se hace muy fácil introducir grandes valores:

Strings:
PowerShell usa las cadenas de .NET. Son admitidos strings con comillas simples o dobles. La substitución de variables y procesos de salida de secuencias utilizan cadenas entre dobles comillas:
El carácter de salida es la comilla invertida (`) en vez de la barra invertida (\) con lo que la cadena puede utilizar tanto la barra de dividir como la invertida.
Variables:
En PowerShell, las variables son organizadas en espacios de nombre (namespaces). Las variables se identifican en un script añadiendo un prefijo «$»a sus nombres, como en «$x=3». Los nombres de variables pueden ser no clasificados como «$a» o pueden ser ser namespaces clasificados como en «$variable:a» o «$env:path». En el último caso, «$env:path» es una variable de sistema que indica destino. PowerShell permite usar funciones a través del uso del namespace: «$function:promt» y alias de comandos a través del uso de alias namespace «alias:dir».
Arrays:
Los arrays son construidos usando el operador coma «,». Si no hay otra especificación, los arrays son del tipo Object[]. El indexado se realiza con paréntesis cuadrados. El operador «+» podrá concatenar dos arrays.
Debido a que PowerShell es un lenguaje dinámico, a veces no se sabe si un comando devolverá un array o un escalar. PowerShell soluciona este problema con la anotación @(). Una expresión evaluada de esta manera será siempre un array. Si la expresión es un array, será devuelta de manera sencilla. Si la expresión no es un array, un nuevo array de un único elemento será generado para mantener este valor.
Matrices:
Las matrices de Powershell generan literalmente una instancia .NET del tipo System.Collections.Hashtable. Las claves de la matriz podrían ser cadenas o expresiones; pares de claves/valores individuales estan separados por nuevas líneas o punto y coma «;», como se muestra:
Cambios de tipo
Para la mayoría de los casos, la línea de comandos tradicional sólo trabaja con cadenas. Herramientas individuales podrían tener que interpretar (analizar) estas cadenas por si mismas. En PowerShell, hay una colección más rica de objetos con los que trabajar. Sin embargo, queremos mantener la facilidad de uso que nos dan las cadenas. Esto se consigue a través del subsistema de conversión de tipos de PowerShell. El conversor de tipos se cuida de no perder información cuando realiza una conversión. También, sólo hará un paso de cambio por vez. El usuario podría incluso especificar una conversión explícita, de hecho, componer dichas conversiones. Las conversiones son típicamente aplicadas a valores, pero pueden ser también aplicados a variables en cuyos casos cualquier cosa asignada a dicha variable sería automáticamente convertida.
Aquí tenemos un ejemplo, donde una colección de tipos de restricciones son aplicadas a una variable. Queremos que cualquier cosa asignada a esta variable, que primero sea convertida a una cadena, luego a un array de carácteres y finalmente en puntos de código asociados a esos carácteres.
Sentencias:
PowerShell tiene la colección típica de loop y sentencias selectivas. Una diferencia interesante e que en muchos lugares, sólo una línea de sentencia puede ser usada en el caso de una expresión simple.
Sentencia If:
La parte condicional de una sentencia if podría ser también una línea de sentencia.
while Loop:
foreach Loop:
foreah Cmdlet:
Este cmdlet puede ser usado para navegar sobre colecciones de operadores ( parecido a la operación map(), encontrada en muchos otros lenguajes como Perl.) Hay un alias corto para este comando «%». Fíjese que variable $__ es usada para acceder a la línea del objeto de la sentencia actual en el foreach y where cmdlets.
where Cmdlet:
Este cmdlet selecciona un subconjunto de objetos de un flujo, basado en la evaluación de una condición.
Sentencia switch: La instrucción switch de PowerShell combina tanto bucles (loop) como bifurcaciones (branching). Puede usarse para procesar colecciones de objetos en la parte condicional de una sentencia. También puede usarse para escanear archivos usando la opción «file».

Origen: Windows PowerShell – DZone – Refcardz