PowerShell: Automatiza lo Aburrido
La GUI es para amateurs. Domina los One-Liners y Pipelines que gestionan 100 servidores simultáneamente. Deja de hacer clic en ventanas y empieza a tratar tu infraestructura como código.
Secciones12
🟢 Comandos Básicos
14 snippetsFundamentos para iniciar e interactuar con el entorno PowerShell, incluyendo navegación, información esencial y documentación.
Get-Location
Muestra la ruta completa del directorio de trabajo actual, funcionando como el comando `pwd` (print working directory) en sistemas basados en Unix/Linux.
Get-LocationSet-Location
Cambia el directorio de trabajo actual a la ruta especificada. Equivalente al comando `cd` (change directory). Puede usarse con rutas absolutas o relativas.
Set-Location C:\UsersGet-ChildItem
Lista los archivos y subdirectorios en el directorio actual o en la ruta especificada. Similar al comando `ls` en sistemas Unix/Linux o `dir` en el símbolo del sistema de Windows.
Get-ChildItemGet-ChildItem -Force
Lista archivos y directorios, incluyendo elementos ocultos y del sistema que normalmente se omiten. El parámetro `-Force` es crucial para revelar estos elementos.
Get-ChildItem -ForceGet-ChildItem -Recurse
Lista los archivos y directorios de forma recursiva, recorriendo todos los subdirectorios a partir de la ruta especificada. Útil para explorar la estructura completa de una carpeta.
Get-ChildItem -RecurseGet-ComputerInfo
Recopila y muestra información detallada sobre el sistema operativo y el hardware del equipo local, como la versión del SO, fabricante, modelo, memoria RAM y procesador.
Get-ComputerInfoGet-Process
Lista todos los procesos en ejecución en el sistema, proporcionando detalles como ID del proceso (PID), nombre, utilización de CPU y memoria. Esencial para monitoreo y diagnóstico.
Get-ProcessGet-Service
Muestra una lista de todos los servicios instalados en el sistema, mostrando su estado (en ejecución, detenido, etc.) y nombre de visualización. Fundamental para la gestión de servicios.
Get-ServiceGet-EventLog -LogName Application
Recupera eventos de un log de eventos específico. En este ejemplo, lista los eventos del log de Aplicación, que registra eventos generados por aplicaciones y programas.
Get-EventLog -LogName ApplicationGet-HotFix
Lista todas las actualizaciones (hotfixes) instaladas en el sistema operativo Windows, incluyendo el ID de la actualización, quién la instaló y la fecha de instalación.
Get-HotFixGet-Help
Proporciona información detallada sobre un cmdlet o función específica. Use `-Full` para todos los detalles, `-Examples` para ejemplos de uso y `-Online` para abrir la documentación en línea.
Get-Help Get-ProcessGet-Command
Muestra información sobre cmdlets, funciones, alias y scripts disponibles en PowerShell. Útil para descubrir comandos y entender sus parámetros.
Get-Command Get-ProcessUpdate-Help
Descarga e instala los archivos de ayuda más recientes para los módulos de PowerShell. Se recomienda ejecutar este comando regularmente para tener acceso a la documentación actualizada.
Update-HelpGet-Module -ListAvailable
Lista todos los módulos de PowerShell que están disponibles en el sistema, incluyendo aquellos que aún no han sido cargados en la sesión actual.
Get-Module -ListAvailable📁 Gestión de Archivos
14 snippetsComandos esenciales para crear, eliminar, copiar, mover, renombrar y manipular archivos y directorios.
New-Item (File)
Crea un nuevo archivo en la ruta especificada. El parámetro `-ItemType File` indica que se debe crear un archivo.
New-Item -Path "arquivo.txt" -ItemType FileNew-Item (Directory)
Crea un nuevo directorio (carpeta) en la ruta especificada. El parámetro `-ItemType Directory` indica que se debe crear un directorio.
New-Item -Path "pasta" -ItemType DirectoryRemove-Item (Archivo)
Elimina un archivo específico. Por defecto, solicitará confirmación antes de eliminar el elemento.
Remove-Item "arquivo.txt"Remove-Item (Directorio)
Elimina un directorio y todo su contenido (subdirectorios y archivos). El parámetro `-Recurse` es obligatorio para eliminar directorios no vacíos.
Remove-Item "pasta" -RecurseRemove-Item -Force
Fuerza la eliminación de un archivo o directorio, ignorando advertencias y solicitudes de confirmación, incluso si el elemento está en uso o es de solo lectura. Use con precaución.
Remove-Item "arquivo.txt" -ForceCopy-Item (Archivo)
Copia un archivo de una ubicación a otra. Si el destino es un nombre de archivo, se copiará con ese nuevo nombre. Si es un directorio, el archivo mantendrá su nombre original.
Copy-Item "origem.txt" "destino.txt"Copy-Item (Directorio)
Copia un directorio y todo su contenido (subdirectorios y archivos) a una nueva ubicación. El parámetro `-Recurse` es necesario para copiar directorios completos.
Copy-Item "pasta" "destino" -RecurseMove-Item
Mueve un archivo o directorio de una ubicación a otra. Puede usarse también para renombrar un elemento, moviéndolo al mismo directorio con un nuevo nombre.
Move-Item "antigo.txt" "novo.txt"Rename-Item
Renombra un archivo o directorio sin cambiar su ubicación. El primer argumento es la ruta del elemento actual, y el segundo es el nuevo nombre.
Rename-Item "antigo.txt" "novo.txt"Get-Content
Lee el contenido de un archivo de texto y lo muestra en la consola o lo pasa al pipeline para su procesamiento posterior. Útil para visualizar logs o datos.
Get-Content "arquivo.txt"Get-Content (Primeras Líneas)
Lee el contenido de un archivo y, usando el pipeline con `Select-Object -First`, muestra solo las primeras 10 líneas, útil para archivos grandes.
Get-Content "arquivo.txt" | Select-Object -First 10Set-Content
Escribe o sobrescribe el contenido de un archivo. Si el archivo no existe, se creará. Si existe, su contenido anterior será completamente reemplazado.
Set-Content "arquivo.txt" "conteúdo"Add-Content
Añade contenido al final de un archivo existente. Si el archivo no existe, se creará. Preserva el contenido anterior del archivo.
Add-Content "arquivo.txt" "mais conteúdo"Out-File
Redirige la salida de un comando a un archivo. Por ejemplo, `Get-Process | Out-File "procesos.txt"` guardaría la lista de procesos en el archivo.
Out-File "saida.txt"🔤 Variables y Tipos
17 snippetsDeclaración de variables, manipulación de tipos de datos como strings, enteros, booleanos, y estructuras como arrays y hash tables.
Variable String
Declara una variable `$nombre` y le asigna un valor de tipo string (texto). Las variables en PowerShell comienzan con `$`.
$nome = "João"Variable Entero
Declara una variable `$edad` y le asigna un valor de tipo entero (número sin decimales).
$idade = 25Variable Decimal
Declara una variable `$altura` y le asigna un valor de tipo decimal (número con decimales).
$altura = 1.75Variable Booleana
Declara una variable `$activo` y le asigna un valor booleano, que puede ser `$true` (verdadero) o `$false` (falso).
$ativo = $trueVariable Nula
Declara una variable `$dados` y le asigna el valor `$null`, indicando la ausencia de un valor u objeto.
$dados = $nullArray de Cadenas
Crea un array (lista ordenada) de cadenas. El operador `@()` se usa para definir un array literal.
$lista = @("item1", "item2", "item3")Array de Números (Range)
Crea un array de números enteros del 1 al 10 usando el operador de range (`..`).
$numeros = 1..10Acceder Elemento del Array
Accede a un elemento específico de un array usando su índice (posición). PowerShell usa indexación basada en cero, por lo que `[0]` accede al primer elemento.
$lista[0]Último Elemento del Array
Accede al último elemento de un array usando indexación negativa. `-1` se refiere al último elemento, `-2` al penúltimo, y así sucesivamente.
$lista[-1]Tamaño del Array
Devuelve el número de elementos (tamaño) de un array usando la propiedad `.Count`.
$lista.CountAñadir Elemento al Array
Añade un nuevo elemento al final de un array. Tenga en cuenta que esto crea un nuevo array con el elemento añadido, no modifica el array original in-place.
$lista += "novo"Crear Hashtable
Crea una hashtable (diccionario o mapa), que es una colección de pares clave-valor. Las claves son únicas y los valores pueden ser de cualquier tipo.
$pessoa = @{Nome="João"; Idade=25}Acceder a Hashtable por Punto
Accede al valor asociado a una clave en una hashtable usando la notación de punto, si la clave es un nombre de propiedad válido.
$pessoa.NomeAcceder a Hashtable por Clave
Accede al valor asociado a una clave en una hashtable usando la notación de corchetes y el nombre de la clave como cadena. Funciona para cualquier clave, incluyendo aquellas con caracteres especiales.
$pessoa["Nome"]Añadir Propiedad a Hashtable
Añade un nuevo par clave-valor a una hashtable existente o actualiza el valor de una clave existente.
$pessoa.Cidade = "São Paulo"Listar Claves de la Hashtable
Devuelve una colección de todas las claves presentes en la hashtable.
$pessoa.KeysListar Valores de la Hashtable
Devuelve una colección de todos los valores presentes en la hashtable.
$pessoa.Values🔀 Estructuras de Control
8 snippetsComandos para controlar el flujo de ejecución de scripts, decisiones condicionales y repetición de bloques de código.
If/Else Simple
Ejecuta un bloque de código si una condición es verdadera (`if`) y otro bloque si la condición es falsa (`else`). El operador `-ge` significa "mayor o igual a".
if ($idade -ge 18) {
Write-Host "Maior de idade"
} else {
Write-Host "Menor de idade"
}If/Elseif/Else Múltiple
Permite probar múltiples condiciones en secuencia. El bloque `elseif` se ejecuta si la condición anterior es falsa y su propia condición es verdadera.
if ($nota -ge 7) {
Write-Host "Aprovado"
} elseif ($nota -ge 5) {
Write-Host "Recuperação"
} else {
Write-Host "Reprovado"
}Bucle For Tradicional
Ejecuta un bloque de código un número especificado de veces. Consiste en una inicialización, una condición de terminación y una expresión de incremento/decremento.
for ($i = 1; $i -le 10; $i++) {
Write-Host $i
}Bucle Foreach
Itera sobre cada elemento en una colección (como un array o el resultado de un cmdlet), ejecutando un bloque de código para cada elemento.
foreach ($item in $lista) {
Write-Host $item
}Bucle Foreach (Iterar Archivos)
Demuestra el uso de `foreach` para iterar sobre los objetos devueltos por `Get-ChildItem`, mostrando el nombre de cada archivo o directorio.
foreach ($arquivo in Get-ChildItem) {
Write-Host $arquivo.Name
}Bucle While
Ejecuta un bloque de código repetidamente mientras una condición especificada sea verdadera. La condición se evalúa antes de cada iteración.
$contador = 0
while ($contador -lt 5) {
Write-Host $contador
$contador++
}Bucle Do-While
Ejecuta un bloque de código al menos una vez y, luego, repite mientras una condición especificada sea verdadera. La condición se evalúa después de cada iteración.
do {
$resposta = Read-Host "Digite 'sair' para parar"
} while ($resposta -ne "sair")Switch Case
Permite comparar un valor con múltiples patrones y ejecutar un bloque de código correspondiente al primer patrón que coincida. El bloque `default` se ejecuta si no se encuentra ninguna coincidencia.
switch ($opcao) {
1 { Write-Host "Opção 1" }
2 { Write-Host "Opção 2" }
default { Write-Host "Opção inválida" }
}⚡ Funciones y Scripts
9 snippetsCreación y uso de funciones para modularizar código, definir parámetros avanzados y organizar scripts en módulos reutilizables.
Función Simple
Define una función llamada `Saudar` que acepta un parámetro `$nombre` de tipo string y muestra un saludo personalizado.
function Saudar($nome) {
param([string]$nome)
Write-Host "Olá, $nome!"
}Función con Parámetros Tipados
Define una función que calcula el área de un triángulo, especificando los tipos de datos (`[double]`) para los parámetros `$base` y `$altura` y devolviendo un valor.
function Calcular-Area($base, $altura) {
param([double]$base, [double]$altura)
return ($base * $altura) / 2
}Función con Parámetro Predeterminado
Define una función donde el parámetro `$servidor` tiene un valor predeterminado de "localhost". Si el usuario no proporciona un valor para `$servidor`, se usará el predeterminado.
function Testar-Conexao {
param([string]$servidor = "localhost")
Test-Connection $servidor
}Parámetros Avanzados
Ejemplo de cómo usar atributos de parámetro avanzados: `Mandatory=$true` hace que el parámetro `$Caminho` sea obligatorio, y `[switch]$Recurse` crea un parámetro booleano sin la necesidad de un valor.
function Processar-Arquivos {
param(
[Parameter(Mandatory=$true)]
[string]$Caminho,
[Parameter()]
[switch]$Recurse
)
# Código da função
}Parámetro que Acepta Pipeline
Demuestra un parámetro que puede recibir entrada del pipeline (`ValueFromPipeline=$true`). Esto permite que la función procese objetos que son pasados desde otros cmdlets.
function Exportar-Dados {
param(
[Parameter(ValueFromPipeline=$true)]
[object[]]$Dados
)
$Dados | Export-Csv -Path "saida.csv"
}Importar Script
Ejecuta un script PowerShell en el ámbito de la sesión actual. El punto (`.`) y el espacio son esenciales para que las variables y funciones definidas en el script estén disponibles en la sesión.
. .\meu-script.ps1Importar Módulo
Carga un módulo PowerShell en la sesión actual, haciendo que sus cmdlets, funciones y variables estén disponibles. Los módulos son la forma preferida de organizar y distribuir código PowerShell.
Import-Module .\meu-modulo.psm1Exportar Función de Módulo
Especifica qué funciones, cmdlets, variables o aliases de un módulo deben ser exportados y hechos públicos para su uso por otras sesiones después de la importación del módulo.
Export-ModuleMember -Function MinhaFuncao$PSVersionTable
Una variable automática que muestra detalles sobre la versión de PowerShell, la edición, la versión de .NET Framework y otra información del entorno de ejecución.
$PSVersionTable🔄 Pipeline y Operadores
20 snippetsAprovecha el poder del pipeline de PowerShell para encadenar comandos y usar operadores de comparación y lógicos.
Filtrar Procesos por CPU
Obtiene todos los procesos y, vía pipeline (`|`), los filtra usando `Where-Object` para seleccionar solo aquellos cuya utilización de CPU (`$_.CPU`) es mayor que 100 segundos.
Get-Process | Where-Object {$_.CPU -gt 100}Filtrar Archivos por Extensión
Lista todos los elementos en el directorio actual y los filtra para mostrar solo aquellos que tienen la extensión ".txt" (`$_.Extension -eq ".txt"`).
Get-ChildItem | Where-Object {$_.Extension -eq ".txt"}Filtrar Servicios en Ejecución
Obtiene todos los servicios y los filtra para mostrar solo aquellos cuyo estado (`$_.Status`) es "Running" (en ejecución).
Get-Service | Where-Object {$_.Status -eq "Running"}Ordenar Procesos por CPU
Lista todos los procesos y los ordena según la utilización de la CPU (`CPU`), en orden descendente (`-Descending`), mostrando los procesos más intensivos primero.
Get-Process | Sort-Object CPU -DescendingOperador -eq (Igual)
Operador de comparación que verifica si dos valores son iguales. Devuelve `$true` si son iguales, `$false` en caso contrario.
$a -eq $bOperador -ne (Diferente)
Operador de comparación que verifica si dos valores son diferentes. Devuelve `$true` si son diferentes, `$false` en caso contrario.
$a -ne $bOperador -gt (Mayor que)
Operador de comparación que verifica si el valor de la izquierda es estrictamente mayor que el valor de la derecha.
$a -gt $bOperador -ge (Mayor o Igual)
Operador de comparación que verifica si el valor de la izquierda es mayor o igual que el valor de la derecha.
$a -ge $bOperador -lt (Menor que)
Operador de comparación que verifica si el valor de la izquierda es estrictamente menor que el valor de la derecha.
$a -lt $bOperador -le (Menor o Igual)
Operador de comparación que verifica si el valor de la izquierda es menor o igual al valor de la derecha.
$a -le $bOperador -like (Contiene Wildcard)
Operador de comparación que usa comodines (wildcards) como `*` y `?` para encontrar patrones en cadenas. Devuelve `$true` si la cadena `$a` contiene "texto".
$a -like "*texto*"Operador -match (Regex)
Operador de comparación que usa expresiones regulares (regex) para encontrar patrones en cadenas. Devuelve `$true` si la cadena `$a` coincide con el patrón regex.
$a -match "regex"Operador -and (Y Lógico)
Operador lógico que devuelve `$true` si ambas expresiones `$a` y `$b` son verdaderas. De lo contrario, devuelve `$false`.
$a -and $bOperador -or (O Lógico)
Operador lógico que devuelve `$true` si al menos una de las expresiones `$a` o `$b` es verdadera. Devuelve `$false` solo si ambas son falsas.
$a -or $bOperador -not (Negación)
Operador lógico que invierte el valor booleano de una expresión. Si `$a` es `$true`, `-not $a` será `$false`, y viceversa.
-not $aOperador -xor (O Exclusivo)
Operador lógico que devuelve `$true` si solo una de las expresiones `$a` o `$b` es verdadera, pero no ambas. Devuelve `$false` si ambas son verdaderas o ambas falsas.
$a -xor $bSelect-Object (Propiedades)
Selecciona propiedades específicas de objetos en el pipeline. En este ejemplo, muestra solo el nombre, CPU y memoria de cada proceso.
Get-Process | Select-Object Name, CPU, MemorySelect-Object -First
Selecciona solo los primeros `N` objetos del pipeline. Útil para limitar la salida u obtener muestras de datos.
Get-Process | Select-Object -First 10Select-Object -Last
Selecciona solo los últimos `N` objetos del pipeline. Útil para ver los elementos más recientes o finales de una lista.
Get-Process | Select-Object -Last 5Select-Object -Unique
Elimina objetos duplicados del pipeline, asegurando que cada objeto en la salida sea único. Útil para obtener una lista distinta de valores.
Get-Process | Select-Object -Unique⚙️ Gestión de Procesos
14 snippetsComandos para listar, monitorear, iniciar y terminar procesos y servicios en Windows.
Get-Process (Todos)
Lista todos los procesos actualmente en ejecución en el sistema, proporcionando información como ID, nombre, CPU y memoria utilizada.
Get-ProcessGet-Process (Específico)
Obtiene información sobre procesos con un nombre específico. Se pueden usar comodines, como `"chrome*"` para todos los procesos que comienzan con "chrome".
Get-Process -Name "chrome"Get-Process (Intensivos)
Filtra y muestra procesos que han consumido más de 100 segundos de tiempo de CPU, ayudando a identificar procesos que están sobrecargando el sistema.
Get-Process | Where-Object {$_.CPU -gt 100}Top 10 Procesos por CPU
Lista los 10 procesos que más consumen CPU, ordenados en orden descendente. Útil para identificar cuellos de botella de rendimiento.
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10Start-Process (Sin Parámetros)
Inicia un nuevo proceso en el sistema. En este ejemplo, abre el Bloc de Notas.
Start-Process notepad.exeStart-Process (Con Parámetro)
Inicia un proceso y le pasa argumentos. Aquí, Chrome se abre y navega directamente a google.com.
Start-Process chrome.exe "https://google.com"Stop-Process (Por Nombre)
Termina un proceso con un nombre específico. Por defecto, solicitará confirmación. Usa `-Force` para forzar la terminación.
Stop-Process -Name "notepad"Stop-Process (Por ID)
Termina un proceso usando su ID (PID) exclusivo. Este método es más preciso que usar el nombre, especialmente cuando hay múltiples procesos con el mismo nombre.
Stop-Process -Id 1234Stop-Process -Force
Fuerza la terminación de un proceso por nombre, ignorando las solicitudes de confirmación e intentos de terminación elegante. Úselo con precaución, ya que puede resultar en pérdida de datos.
Stop-Process -Name "chrome" -ForceGet-Service (Todos)
Lista todos los servicios instalados en el sistema, incluyendo su estado actual (en ejecución, detenido) y nombre de visualización.
Get-ServiceGet-Service (Específico)
Obtiene información sobre un servicio específico por su nombre. Útil para verificar el estado o las propiedades de un servicio individual.
Get-Service -Name "Spooler"Start-Service
Inicia un servicio detenido. El servicio "Spooler" es el servicio de Cola de Impresión de Windows.
Start-Service -Name "Spooler"Stop-Service
Detiene un servicio en ejecución. Por defecto, solicitará confirmación. Usa `-Force` para forzar la detención.
Stop-Service -Name "Spooler"Restart-Service
Reinicia un servicio, primero deteniéndolo y luego iniciándolo de nuevo. Útil para aplicar configuraciones o resolver problemas temporales.
Restart-Service -Name "Spooler"🌐 Red y Conectividad
13 snippetsComandos para diagnosticar, configurar e interactuar con la red, incluyendo adaptadores, IPs, firewall y peticiones HTTP/REST.
Get-NetAdapter
Lista todos los adaptadores de red instalados en el sistema, proporcionando información como nombre, estado, velocidad y tipo de medio.
Get-NetAdapterGet-NetIPAddress
Muestra las direcciones IP (IPv4 e IPv6) configuradas en cada adaptador de red, junto con el prefijo de subred y la puerta de enlace predeterminada.
Get-NetIPAddressGet-NetRoute
Muestra la tabla de rutas IP del sistema, indicando cómo el tráfico de red se dirige a diferentes destinos.
Get-NetRouteTest-Connection
Envía paquetes ICMP (ping) a un host remoto para verificar la conectividad de red. Devuelve detalles sobre el tiempo de respuesta y el estado de la conexión.
Test-Connection google.comTest-NetConnection
Prueba la conectividad de red para un host y puerto específicos. Útil para verificar si un servicio es accesible en un puerto, como HTTP (puerto 80).
Test-NetConnection google.com -Port 80New-NetIPAddress
Configura una nueva dirección IP estática en un adaptador de red. `-InterfaceAlias` especifica el adaptador, `-IPAddress` la dirección y `-PrefixLength` la máscara de subred.
New-NetIPAddress -InterfaceAlias "Ethernet" -IPAddress 192.168.1.100 -PrefixLength 24Set-DnsClientServerAddress
Define las direcciones de los servidores DNS para un adaptador de red específico. En este ejemplo, configura el DNS primario para el DNS público de Google.
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses 8.8.8.8Get-NetFirewallRule
Lista todas las reglas del Firewall de Windows Defender, incluyendo reglas de entrada y salida, programas y puertos afectados.
Get-NetFirewallRuleNew-NetFirewallRule
Crea una nueva regla de firewall. Este ejemplo crea una regla de entrada para permitir conexiones RDP (puerto TCP 3389).
New-NetFirewallRule -DisplayName "Permitir RDP" -Direction Inbound -Protocol TCP -LocalPort 3389 -Action AllowInvoke-WebRequest
Envía una solicitud HTTP/HTTPS a un recurso web. Devuelve un objeto que contiene el estado, los encabezados y el contenido de la respuesta. Útil para interactuar con APIs o descargar páginas.
Invoke-WebRequest https://api.example.comInvoke-RestMethod
Envía una solicitud HTTP/HTTPS y convierte la respuesta (generalmente JSON o XML) directamente en un objeto PowerShell, facilitando la manipulación de datos de APIs RESTful.
Invoke-RestMethod https://api.example.com/dataInvoke-WebRequest (Obtener Contenido)
Realiza una solicitud web y almacena el objeto de respuesta en una variable. Luego, accede a la propiedad `.Content` para obtener el cuerpo de la respuesta como una cadena.
$response = Invoke-WebRequest https://example.com
$response.ContentInvoke-WebRequest (Descarga)
Descarga el contenido de una URL y lo guarda directamente en un archivo local. El parámetro `-OutFile` especifica la ruta y el nombre del archivo de destino.
Invoke-WebRequest https://example.com -OutFile "pagina.html"👥 Active Directory
13 snippetsComandos para gestionar usuarios, grupos y realizar consultas avanzadas en Active Directory.
Get-ADUser (Todos)
Lista todos los objetos de usuario en Active Directory. El filtro `*` indica que todos los usuarios deben ser devueltos.
Get-ADUser -Filter *Get-ADUser (Específico)
Obtiene información detallada sobre un usuario específico de Active Directory, usando su SamAccountName, DistinguishedName, SID o GUID.
Get-ADUser -Identity "joao.silva"New-ADUser
Crea un nuevo objeto de usuario en Active Directory. Es necesario proporcionar al menos `-Name` y `-SamAccountName`. Se recomienda también definir una contraseña y la ruta de la OU.
New-ADUser -Name "novo.usuario" -SamAccountName "novo.usuario" -GivenName "Novo" -Surname "Usuario" -AccountPassword (Convert-ToSecureString "Senha@123" -AsPlainText -Force) -Enabled $true -Path "OU=Usuarios,DC=dominio,DC=local"Set-ADUser
Modifica las propiedades de un usuario existente en Active Directory. Usa `-Identity` para especificar el usuario y los parámetros para las propiedades a modificar.
Set-ADUser -Identity "joao.silva" -Department "TI" -Office "Sala 101"Disable-ADAccount
Deshabilita una cuenta de usuario en Active Directory, impidiendo que el usuario inicie sesión en el dominio. La cuenta permanece en AD, pero inactiva.
Disable-ADAccount -Identity "joao.silva"Get-ADGroup (Todos)
Lista todos los objetos de grupo en Active Directory. El filtro `*` indica que todos los grupos deben ser devueltos.
Get-ADGroup -Filter *Get-ADGroupMember
Lista todos los miembros (usuarios y/u otros grupos) de un grupo específico de Active Directory. El nombre del grupo puede ser el SamAccountName o DistinguishedName.
Get-ADGroupMember "TI"Add-ADGroupMember
Añade uno o más usuarios o grupos a un grupo existente en Active Directory. `-Identity` especifica el grupo y `-Members` los objetos a añadir.
Add-ADGroupMember -Identity "TI" -Members "joao.silva"Remove-ADGroupMember
Elimina uno o más usuarios o grupos de un grupo existente en Active Directory. `-Identity` especifica el grupo y `-Members` los objetos a eliminar.
Remove-ADGroupMember -Identity "TI" -Members "joao.silva"Search-ADAccount (Cuentas Deshabilitadas)
Busca cuentas en Active Directory basándose en criterios específicos. `-AccountDisabled` devuelve todas las cuentas de usuario que están deshabilitadas.
Search-ADAccount -AccountDisabledGet-ADUser (Contraseñas que No Expiran)
Filtra usuarios en Active Directory para encontrar aquellos cuya contraseña está configurada para nunca expirar. El parámetro `-Properties` es necesario para mostrar esta propiedad.
Get-ADUser -Filter {PasswordNeverExpires -eq $true} -Properties PasswordNeverExpiresGet-ADUser (Inactivos 90 Días)
Filtra usuarios que no han iniciado sesión en más de 90 días. `-Properties LastLogonDate` es necesario para que la propiedad sea devuelta y filtrada.
Get-ADUser -Filter {LastLogonDate -lt (Get-Date).AddDays(-90)} -Properties LastLogonDateExportar Usuarios a CSV
Exporta todos los usuarios de Active Directory, con todas sus propiedades (`-Properties *`), a un archivo CSV. `-NoTypeInformation` evita la línea de tipo en el archivo.
Get-ADUser -Filter * -Properties * | Export-Csv "usuarios.csv" -NoTypeInformation🔒 Seguridad y Permisos
10 snippetsGestión de políticas de ejecución de scripts, firma de código y control de acceso a archivos.
Get-ExecutionPolicy
Muestra la política de ejecución actual de PowerShell, que determina qué scripts pueden ejecutarse y bajo qué condiciones. Las políticas incluyen `Restricted`, `RemoteSigned`, `AllSigned` y `Bypass`.
Get-ExecutionPolicySet-ExecutionPolicy RemoteSigned
Define la política de ejecución para `RemoteSigned`. Esto permite que los scripts creados localmente se ejecuten sin firma, pero exige que los scripts descargados de internet estén firmados por un editor de confianza.
Set-ExecutionPolicy RemoteSignedSet-ExecutionPolicy Bypass (Temporal)
Establece la política de ejecución en `Bypass` solo para la sesión actual de PowerShell (`-Scope Process`). Esto permite la ejecución de todos los scripts sin restricciones, pero la política se revierte al cerrar la sesión.
Set-ExecutionPolicy -Scope Process -ExecutionPolicy BypassSet-ExecutionPolicy AllSigned (Usuario Actual)
Establece la política de ejecución en `AllSigned` para el usuario actual. Esto requiere que todos los scripts, incluidos los creados localmente, estén firmados por un editor de confianza.
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy AllSignedGet-ChildItem Cert:\CurrentUser\My
Lista todos los certificados digitales instalados en el repositorio "Personal" (My) del usuario actual. Útil para verificar certificados disponibles para la firma de código.
Get-ChildItem Cert:\CurrentUser\MyGet-AuthenticodeSignature
Verifica la firma digital Authenticode de un archivo, como un script PowerShell. Devuelve información sobre el estado de la firma, el firmante y la marca de tiempo.
Get-AuthenticodeSignature "script.ps1"Set-AuthenticodeSignature
Firma digitalmente un script PowerShell usando un certificado Authenticode. `$cert` debe ser una variable que contenga el certificado obtenido, por ejemplo, vía `Get-ChildItem Cert:\...`.
Set-AuthenticodeSignature -FilePath "script.ps1" -Certificate $certGet-Acl (Permisos de Carpeta)
Muestra las Access Control Lists (ACLs), o permisos de seguridad, de un archivo o directorio. Muestra propietario, grupo y las reglas de acceso.
Get-Acl "C:\pasta"Definir Permiso de Archivo/Carpeta
Define una nueva regla de permiso para un archivo o carpeta. Este ejemplo concede control total (`FullControl`) al "Usuario" en la carpeta "C:\carpeta".
$acl = Get-Acl "C:\pasta"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("Usuario","FullControl","Allow")
$acl.SetAccessRule($accessRule)
Set-Acl "C:\pasta" $aclGet-Acl (Detallado)
Muestra los permisos de un archivo o carpeta en un formato de lista detallado, mostrando todas las entradas de control de acceso (ACEs) de forma más legible.
Get-Acl "arquivo.txt" | Format-List⏰ Automatización y Programación
11 snippetsTécnicas para automatizar tareas repetitivas, programar ejecución de scripts y gestionar jobs en segundo plano.
Get-ScheduledTask
Lista todas las tareas programadas configuradas en el sistema operativo Windows, incluyendo su estado, nombre y hora de la próxima ejecución.
Get-ScheduledTaskRegister-ScheduledTask
Crea una nueva tarea programada. Este ejemplo crea una tarea que ejecuta `notepad.exe` diariamente a las 9h de la mañana. `New-ScheduledTaskAction` define la acción y `New-ScheduledTaskTrigger` define el disparador.
Register-ScheduledTask -Action (New-ScheduledTaskAction -Execute "notepad.exe") -Trigger (New-ScheduledTaskTrigger -Daily -At 9am) -TaskName "AbrirNotepadDiariamente" -Description "Abre o Bloco de Notas todos os dias às 9h."Start-ScheduledTask
Inicia la ejecución de una tarea programada manualmente, independientemente de su disparador programado.
Start-ScheduledTask -TaskName "MinhaTarefa"Disable-ScheduledTask
Deshabilita una tarea programada, impidiendo que se ejecute por sus disparadores. La tarea permanece en el sistema, pero en estado inactivo.
Disable-ScheduledTask -TaskName "MinhaTarefa"Unregister-ScheduledTask
Elimina permanentemente una tarea programada del sistema. El parámetro `-Confirm:$false` evita la solicitud de confirmación.
Unregister-ScheduledTask -TaskName "MinhaTarefa" -Confirm:$falseStart-Job
Inicia un script o comando en segundo plano como un job. El `-ScriptBlock` contiene el código a ejecutar, y `-Name` asigna un nombre al job.
Start-Job -ScriptBlock { Get-Process } -Name "ProcessosJob"Get-Job
Lista todos los jobs en segundo plano que están en ejecución o han sido completados en la sesión actual de PowerShell.
Get-JobReceive-Job
Recupera los resultados de un job en segundo plano. Después de la recuperación, los resultados son eliminados del job. Usa `-Keep` para mantener los resultados.
Receive-Job -Id 1Stop-Job
Termina un job en segundo plano que está en ejecución. Puede ser necesario usar `-Force` para jobs que no responden.
Stop-Job -Id 1Remove-Job
Elimina un job en segundo plano de la sesión actual de PowerShell. Esto libera los recursos asociados al job.
Remove-Job -Id 1Workflow Básico
Define un workflow de PowerShell, que permite la ejecución de tareas en paralelo (`parallel`) o en secuencia (`sequence`), con resiliencia a reinicios y soporte para puntos de verificación.
workflow MeuWorkflow {
parallel {
Get-Process
Get-Service
}
sequence {
Write-Host "Concluído"
}
}🖥️ WMI y CIM
11 snippetsExploración y manipulación de información del sistema Windows usando WMI y CIM para monitoreo y diagnóstico avanzado.
Get-WmiObject (Info SO)
Consulta el WMI para obtener información detallada sobre el sistema operativo Windows, como versión, service pack, fecha de instalación y fabricante.
Get-WmiObject -Class Win32_OperatingSystemGet-WmiObject (Info Hardware)
Consulta el WMI para obtener información general sobre el sistema del ordenador, incluyendo nombre del fabricante, modelo, nombre del dominio y cantidad total de memoria física.
Get-WmiObject -Class Win32_ComputerSystemGet-WmiObject (Info CPU)
Consulta el WMI para obtener detalles sobre el(los) procesador(es) del sistema, como fabricante, velocidad, número de núcleos y arquitectura.
Get-WmiObject -Class Win32_ProcessorGet-WmiObject (Info Discos)
Consulta el WMI para obtener información sobre los discos lógicos (particiones) del sistema, como letra de la unidad, tamaño total, espacio libre y tipo de sistema de archivos.
Get-WmiObject -Class Win32_LogicalDiskGet-CimInstance (CIM Moderno)
Cmdlet moderno para consultar clases CIM (Common Information Model), que es la evolución de WMI. Ofrece mejor rendimiento y soporte para sesiones remotas. Equivalente a `Get-WmiObject`.
Get-CimInstance -ClassName Win32_OperatingSystemGet-CimInstance (Consulta CIM)
Ejecuta una consulta WQL (WMI Query Language) directamente para filtrar objetos CIM. Este ejemplo selecciona todos los procesos con el nombre "chrome.exe".
Get-CimInstance -Query "SELECT * FROM Win32_Process WHERE Name = 'chrome.exe'"New-CimSession (Sesión Remota)
Crea una nueva sesión CIM para un equipo remoto, permitiendo que los cmdlets CIM se ejecuten contra ese sistema. Requiere permisos y conectividad de red.
New-CimSession -ComputerName servidorGet-CimInstance (Consulta Remota)
Ejecuta una consulta CIM en un equipo remoto usando una sesión CIM previamente establecida (`$session`). Este ejemplo lista los servicios en el servidor remoto.
Get-CimInstance -CimSession $session -ClassName Win32_ServiceGet-EventLog (Últimos Eventos)
Recupera los 10 eventos más recientes del registro de eventos del sistema. Útil para una verificación rápida de eventos recientes.
Get-EventLog -LogName System -Newest 10Get-WinEvent (Eventos de Error)
Un cmdlet más avanzado para acceder a registros de eventos. Este ejemplo filtra eventos del registro de Aplicación con nivel de error (Level 2).
Get-WinEvent -FilterHashtable @{LogName='Application'; Level=2}Get-Counter (Contador de Rendimiento)
Obtiene datos de contadores de rendimiento del sistema. Este ejemplo monitorea el tiempo de utilización total del procesador en tiempo real.
Get-Counter "\Processor(_Total)\% Processor Time"Cheatsheets relacionados
git status -sGit: El Kit de Emergencia
¿La liaste con el código? Guarda esta guía. Los comandos esenciales para deshacer errores, revertir commits y salvar tu empleo.
docker --versionDocker: Comandos de Producción
Olvida la configuración manual. Copia y pega los comandos para levantar containers, limpiar volúmenes y hacer deploy en tiempo récord.
ping -c 4 google.comLinux Networking: La Guía Hacker
Siéntete en Mr. Robot. Comandos de red para descubrir IPs, puertos abiertos y diagnosticar conexiones como un profesional de CyberSec.