[[hack_roadmap-0|Up]]
====== Introducción a PowerShell ======
PowerShell es una herramienta poderosa de línea de comandos y un lenguaje de
scripting desarrollado por Microsoft, diseñado específicamente para la
administración de sistemas. Es ampliamente utilizado por administradores de
sistemas y profesionales de la ciberseguridad debido a su capacidad para
automatizar tareas administrativas en sistemas Windows.
===== Conceptos Básicos de PowerShell =====
==== ¿Qué es PowerShell? ====
PowerShell es una plataforma de automatización de tareas y gestión de
configuración que consiste en un shell de línea de comandos, un lenguaje de
scripting, y un marco de gestión de configuración. Ofrece acceso a
funcionalidades de sistema operativo y puede interactuar con diferentes
tecnologías, como servicios web y APIs.
==== Características Principales: ====
* **Interoperabilidad:** Puede interactuar con otras tecnologías y lenguajes.
* **Cmdlets:** Son comandos especializados en PowerShell que realizan funciones específicas.
* **Pipelines:** Permiten encadenar cmdlets para realizar tareas complejas.
* **Objetos:** PowerShell trabaja con objetos en lugar de texto plano, lo que facilita la manipulación y gestión de datos.
==== Recursos: ====
* [[https://docs.microsoft.com/en-us/powershell/|Microsoft PowerShell Documentation]]
* [[https://github.com/PowerShell/PowerShell|PowerShell GitHub Repository]]
===== Cmdlets y Estructura Básica =====
==== Cmdlets ====
Los cmdlets son comandos nativos de PowerShell diseñados para realizar tareas
específicas. La nomenclatura de cmdlets sigue una convención de
verbo-sustantivo, como ''Get-Process'' o ''Set-Service''.
==== Ejemplos de Cmdlets Básicos: ====
* **Get-Process:** Lista los procesos en ejecución.
Get-Process
* **Set-Service:** Cambia el estado de un servicio.
Set-Service -Name "wuauserv" -Status "Running"
* **Get-Help:** Proporciona información sobre cmdlets y comandos.
Get-Help Get-Process
==== Recursos: ====
* [[https://docs.microsoft.com/en-us/powershell/scripting/developer/cmdlet/cmdlet-overview|Cmdlet Overview]]
===== Uso de Pipelines =====
==== Conceptos Clave: ====
El pipeline en PowerShell permite pasar la salida de un cmdlet como entrada a
otro cmdlet, creando flujos de trabajo complejos y eficientes.
==== Ejemplos: ====
* **Filtrar Procesos:**
Get-Process | Where-Object { $_.CPU -gt 100 }
* **Seleccionar Propiedades Específicas:**
Get-Service | Select-Object Name, Status
==== Recursos: ====
* [[https://docs.microsoft.com/en-us/powershell/scripting/learn/deep-dives/everything-about-pipelines|Understanding Pipelines]]
===== Manipulación de Objetos =====
==== Conceptos Clave: ====
A diferencia de muchos shells tradicionales que manejan texto, PowerShell
trabaja con objetos. Cada cmdlet devuelve objetos .NET, lo que permite una
manipulación de datos más robusta y estructurada.
==== Ejemplos: ====
* **Acceder a Propiedades de Objetos:**
$process = Get-Process -Name "explorer"
$process.Id
* **Modificar Objetos:**
$service = Get-Service -Name "wuauserv"
$service.Status = "Stopped"
$service | Set-Service
==== Recursos: ====
* [[https://docs.microsoft.com/en-us/powershell/scripting/learn/deep-dives/everything-about-objects|Objects in PowerShell]]
===== Scripting en PowerShell =====
==== Conceptos Clave: ====
PowerShell no solo es una herramienta de línea de comandos, sino también un
lenguaje de scripting poderoso. Permite escribir scripts para automatizar tareas
repetitivas, manejar configuraciones complejas, y realizar funciones
administrativas avanzadas.
==== Ejemplos de Scripts Básicos: ====
* **Script para Listar Servicios:**
# Listar todos los servicios
Get-Service | Where-Object { $_.Status -eq 'Running' }
* **Script para Backup:**
# Backup de un directorio
$source = "C:\Users\Usuario\Documents"
$destination = "E:\Backup"
Copy-Item -Path $source -Destination $destination -Recurse
==== Recursos: ====
* [[https://docs.microsoft.com/en-us/powershell/scripting/learn/deep-dives/scripting|Scripting with PowerShell]]
===== Administración del Sistema con PowerShell =====
==== Conceptos Clave: ====
PowerShell permite administrar y configurar sistemas Windows de manera
eficiente. Los administradores de sistemas pueden utilizar PowerShell para
gestionar usuarios, configurar redes, monitorear el rendimiento del sistema, y
más.
==== Ejemplos de Tareas Administrativas: ====
* **Agregar un Nuevo Usuario:**
New-LocalUser -Name "NuevoUsuario" -Description "Cuenta de Usuario"
* **Configurar una Dirección IP:**
New-NetIPAddress -InterfaceAlias "Ethernet" -IPAddress "192.168.1.100" -PrefixLength 24 -DefaultGateway "192.168.1.1"
* **Monitorear el Rendimiento del Sistema:**
Get-Process | Sort-Object CPU -Descending | Select-Object -First 5
==== Recursos: ====
* [[https://docs.microsoft.com/en-us/powershell/scripting/samples/sample-scripts-for-administrators|PowerShell for System Administrators]]
===== Conclusión =====
PowerShell es una herramienta esencial para la administración de sistemas y la
automatización de tareas en entornos Windows. Su capacidad para trabajar con
objetos, cmdlets y scripting avanzado lo convierte en una opción poderosa para
profesionales de la tecnología. La comprensión de los conceptos básicos, el uso
de pipelines, la manipulación de objetos, y la escritura de scripts son
habilidades clave que cualquier administrador de sistemas o profesional de
seguridad debería dominar. Los recursos proporcionados ofrecen guías detalladas
para profundizar en cada uno de estos aspectos y mejorar tus habilidades en
PowerShell.
===== Recursos Adicionales =====
* [[https://docs.microsoft.com/en-us/powershell/scripting/overview?view=powershell-7.1|PowerShell Documentation]] (Microsoft)