Skip to content

Tema 6: PowerShell I

📝 Resumen Ejecutivo

En esta sesión se introduce Windows PowerShell como la evolución de la línea de comandos de Microsoft, construida sobre .NET para la administración y automatización de tareas. Se destaca su flexibilidad al permitir el uso de alias similares a Linux (ls, pwd) para facilitar la transición, aunque posee una sintaxis propia y estricta basada en el par Verbo-Sustantivo. Finalmente, se aborda la manipulación de objetos (procesos y servicios) y la importancia de entender la lógica de los comandos por encima de la memorización pura de parámetros para el examen.


🗝️ Conceptos Clave Cmdlet (Command-let):* Comando nativo de PowerShell.

  • Case Insensitive: PowerShell no distingue entre mayúsculas y minúsculas (a diferencia de Linux).
  • Verb-Noun (Verbo-Sustantivo): Estructura estándar de los comandos (ej. Get-Service).
  • Alias: Sobrenombres que permiten usar comandos de Linux o CMD en PowerShell (ej. dir o ls llaman a Get-ChildItem).
  • Pipeline de Objetos: PowerShell pasa objetos completos entre comandos, no solo texto plano.

📚 Desarrollo del Temario

1. Puesta en Marcha y Contexto PrevioAntes de entrar en PowerShell, el profesor repasó un concepto crítico de seguridad en Sistemas Operativos (aplicable tanto a Linux como a Windows) basado en una imagen viral discutida en clase:

¡OJO AL DATO! - Regla de Oro de Permisos: "No sumes permisos, defínelos". El uso indiscriminado de chmod +x (dar ejecución a todos) es peligroso. Es preferible usar el sistema octal (ej. 744 o 644) para tener un control granular sobre quién puede leer, escribir o ejecutar.

Para iniciar PowerShell:

  • Viene instalado por defecto desde Windows 10.
  • Ejecución: Buscar "PowerShell" en el menú de inicio o usar Win + X.
  • Modo Administrador: Para tareas de gestión del sistema, es fundamental ejecutarlo con clic derecho > Ejecutar como administrador.

Comprobación de entorno:

  • Ver versión actual: $PSVersionTable.

  • Ver alias disponibles: Get-Alias.


2. Sintaxis Básica y Filosofía (Cmdlets)PowerShell utiliza una nomenclatura muy estructurada para facilitar la deducción de comandos.

A. Estructura Verbo-SustantivoLos comandos (cmdlets) siguen la forma Verbo-Sustantivo (en singular).

  • Verbo: Indica la acción (Get, Set, New, Remove).
  • Sustantivo: Indica sobre qué recae la acción (Service, Process, Item, Location).

Ejemplo: Para listar servicios, no se usa "Services" (plural), se usa Get-Service.

B. Características Importantes*

No es Case Sensitive: Puedes escribir get-help, Get-Help o GET-HELP; funcionará igual.

  • Curva de aprendizaje suavizada: PowerShell incluye alias nativos que mapean comandos de Linux/DOS a sus equivalentes en PowerShell:
  • ls o dir \rightarrow Get-ChildItem
  • cd \rightarrow Set-Location
  • pwd \rightarrow Get-Location
  • cat \rightarrow Get-Content

3. Comandos Básicos y Gestión de AyudaEl profesor enfatiza que no es necesario memorizar todos los parámetros para el examen. Se permite el uso de pseudocódigo siempre que la lógica sea correcta. Lo vital es saber cómo buscar información.

Comandos de Descubrimiento Get-Command:* Lista todos los comandos disponibles.

  • Truco: Filtrar por sustantivo para encontrar herramientas relacionadas.
  • Ejemplo: Get-Command -Noun Service lista todo lo relacionado con servicios.

  • Get-Help <comando>: Muestra la documentación, sintaxis y descripción.

Comandos de Sistema de Archivos*

Crear carpeta: md <nombre> (Alias de mkdir).

  • Mover: move <origen> <destino>.

  • Renombrar: ren <nombre_actual> <nuevo_nombre>.

  • Copiar: cp o Copy-Item.

  • Borrar: rd o Remove-Item.

  • Leer archivo: Get-Content <archivo> (equivalente a cat).

  • Añadir contenido: Add-Content -Path <archivo> -Value "Texto".


4. Trabajo con Objetos: Procesos y ServiciosA diferencia de Bash (que suele manejar texto), PowerShell maneja objetos .NET. Esto permite asignar un proceso a una variable y luego invocar métodos sobre ella.

Gestión de Servicios*

Get-Service: Lista el estado (Running/Stopped) de los servicios del sistema.

Gestión de Procesos (Ejercicio Práctico)El profesor realizó un ejercicio en tiempo real para detener una aplicación (Microsoft Paint):

  1. Lanzar aplicación: Abrir mspaint.
  2. Buscar el proceso:
  3. Comando: Get-Process
  4. Se puede filtrar: Get-Process -Name mspaint.

  5. Detener el proceso (Dos métodos):

  6. Método directo: Stop-Process -Id <PID>.

  7. Método orientado a objetos:

  8. Asignar a variable: $proceso = Get-Process -Id <PID>
  9. Invocar método: $proceso.Kill().

5. OperadoresPowerShell utiliza operadores de comparación específicos (no usa == o >) que son muy preguntables en examen.

Operadores de Comparación

Operador Significado Equivalente tradicional
-eq Igualdad ==
-ne No igual !=
-gt Mayor que >
-lt Menor que <
-ge Mayor o igual >=
-le Menor o igual <=
-like Comparación de texto (con comodines *) N/A

Operadores Aritméticos y Asignación

  • Aritméticos: +, -, *, /, % (Módulo/Resto).
  • Asignación: =, += (incrementar), -= (decrementar).

6. Formateo de SalidaDado que PowerShell devuelve objetos, a veces la salida por pantalla no muestra toda la información. Se usan comandos de formateo para visualizar los datos:

  • Format-List (o fl): Muestra las propiedades en forma de lista vertical (ideal para ver todos los detalles de un solo objeto).

  • Format-Table (o ft): Muestra las propiedades en columnas (vista por defecto habitual).

  • Format-Wide: Muestra solo una propiedad en varias columnas.


🧠 Preguntas de Autoevaluación1. Si vienes de Linux y quieres listar el contenido de un directorio en PowerShell, ¿qué comando nativo se ejecuta realmente cuando escribes ls?

  • Respuesta: Se ejecuta Get-ChildItem. ls es solo un alias preconfigurado.

  • ¿Cuál es la diferencia sintáctica crítica entre un script de Bash (Linux) y uno de PowerShell al escribir nombres de comandos o variables?

  • Respuesta: PowerShell es Case Insensitive (no distingue mayúsculas de minúsculas), mientras que Linux sí lo es.

  • En un script de PowerShell, ¿cómo verificarías si la variable $a es mayor que la variable $b? Escribe la comparación.

  • Respuesta: if ($a -gt $b) { ... } (No se usa >).

  • Tienes un proceso con ID 1234. ¿Cómo lo detendrías utilizando un cmdlet de PowerShell?

  • Respuesta: Stop-Process -Id 1234.

  • Verdadero o Falso: Para aprobar el examen es obligatorio memorizar todos los parámetros opcionales de los comandos de gestión de archivos.

  • Respuesta: Falso. El profesor especificó que el pseudocódigo es aceptable si se olvida un parámetro, siempre que la lógica del procedimiento sea correcta.