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-LocationLa 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.
Fundamentos para iniciar e interactuar con el entorno PowerShell, incluyendo navegación, información esencial y documentación.
Muestra la ruta completa del directorio de trabajo actual, funcionando como el comando `pwd` (print working directory) en sistemas basados en Unix/Linux.
Get-LocationCambia 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:\UsersLista 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-ChildItemLista 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 -ForceLista 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 -RecurseRecopila 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-ComputerInfoLista 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-ProcessMuestra 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-ServiceRecupera 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 ApplicationLista 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-HotFixProporciona 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-ProcessMuestra información sobre cmdlets, funciones, alias y scripts disponibles en PowerShell. Útil para descubrir comandos y entender sus parámetros.
Get-Command Get-ProcessDescarga 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-HelpLista 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 -ListAvailableComandos esenciales para crear, eliminar, copiar, mover, renombrar y manipular archivos y directorios.
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 FileCrea 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 DirectoryElimina un archivo específico. Por defecto, solicitará confirmación antes de eliminar el elemento.
Remove-Item "arquivo.txt"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" -RecurseFuerza 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" -ForceCopia 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"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" -RecurseMueve 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"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"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"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 10Escribe 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"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"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"Declaración de variables, manipulación de tipos de datos como strings, enteros, booleanos, y estructuras como arrays y hash tables.
Declara una variable `$nombre` y le asigna un valor de tipo string (texto). Las variables en PowerShell comienzan con `$`.
$nome = "João"Declara una variable `$edad` y le asigna un valor de tipo entero (número sin decimales).
$idade = 25Declara una variable `$altura` y le asigna un valor de tipo decimal (número con decimales).
$altura = 1.75Declara una variable `$activo` y le asigna un valor booleano, que puede ser `$true` (verdadero) o `$false` (falso).
$ativo = $trueDeclara una variable `$dados` y le asigna el valor `$null`, indicando la ausencia de un valor u objeto.
$dados = $nullCrea un array (lista ordenada) de cadenas. El operador `@()` se usa para definir un array literal.
$lista = @("item1", "item2", "item3")Crea un array de números enteros del 1 al 10 usando el operador de range (`..`).
$numeros = 1..10Accede 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]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]Devuelve el número de elementos (tamaño) de un array usando la propiedad `.Count`.
$lista.CountAñ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"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}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.NomeAccede 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ñade un nuevo par clave-valor a una hashtable existente o actualiza el valor de una clave existente.
$pessoa.Cidade = "São Paulo"Devuelve una colección de todas las claves presentes en la hashtable.
$pessoa.KeysDevuelve una colección de todos los valores presentes en la hashtable.
$pessoa.ValuesComandos para controlar el flujo de ejecución de scripts, decisiones condicionales y repetición de bloques de código.
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"}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"}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}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}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}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 = 0while ($contador -lt 5) { Write-Host $contador $contador++}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")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" }}Creación y uso de funciones para modularizar código, definir parámetros avanzados y organizar scripts en módulos reutilizables.
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!"}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}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}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}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"}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.ps1Carga 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.psm1Especifica 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 MinhaFuncaoUna 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.
$PSVersionTableAprovecha el poder del pipeline de PowerShell para encadenar comandos y usar operadores de comparación y lógicos.
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}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"}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"}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 de comparación que verifica si dos valores son iguales. Devuelve `$true` si son iguales, `$false` en caso contrario.
$a -eq $bOperador de comparación que verifica si dos valores son diferentes. Devuelve `$true` si son diferentes, `$false` en caso contrario.
$a -ne $bOperador de comparación que verifica si el valor de la izquierda es estrictamente mayor que el valor de la derecha.
$a -gt $bOperador de comparación que verifica si el valor de la izquierda es mayor o igual que el valor de la derecha.
$a -ge $bOperador de comparación que verifica si el valor de la izquierda es estrictamente menor que el valor de la derecha.
$a -lt $bOperador de comparación que verifica si el valor de la izquierda es menor o igual al valor de la derecha.
$a -le $bOperador 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 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 lógico que devuelve `$true` si ambas expresiones `$a` y `$b` son verdaderas. De lo contrario, devuelve `$false`.
$a -and $bOperador 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 lógico que invierte el valor booleano de una expresión. Si `$a` es `$true`, `-not $a` será `$false`, y viceversa.
-not $aOperador 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 $bSelecciona 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, MemorySelecciona solo los primeros `N` objetos del pipeline. Útil para limitar la salida u obtener muestras de datos.
Get-Process | Select-Object -First 10Selecciona 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 5Elimina 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 -UniqueComandos para listar, monitorear, iniciar y terminar procesos y servicios en Windows.
Lista todos los procesos actualmente en ejecución en el sistema, proporcionando información como ID, nombre, CPU y memoria utilizada.
Get-ProcessObtiene 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"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}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 10Inicia un nuevo proceso en el sistema. En este ejemplo, abre el Bloc de Notas.
Start-Process notepad.exeInicia un proceso y le pasa argumentos. Aquí, Chrome se abre y navega directamente a google.com.
Start-Process chrome.exe "https://google.com"Termina un proceso con un nombre específico. Por defecto, solicitará confirmación. Usa `-Force` para forzar la terminación.
Stop-Process -Name "notepad"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 1234Fuerza 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" -ForceLista todos los servicios instalados en el sistema, incluyendo su estado actual (en ejecución, detenido) y nombre de visualización.
Get-ServiceObtiene 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"Inicia un servicio detenido. El servicio "Spooler" es el servicio de Cola de Impresión de Windows.
Start-Service -Name "Spooler"Detiene un servicio en ejecución. Por defecto, solicitará confirmación. Usa `-Force` para forzar la detención.
Stop-Service -Name "Spooler"Reinicia un servicio, primero deteniéndolo y luego iniciándolo de nuevo. Útil para aplicar configuraciones o resolver problemas temporales.
Restart-Service -Name "Spooler"Comandos para diagnosticar, configurar e interactuar con la red, incluyendo adaptadores, IPs, firewall y peticiones HTTP/REST.
Lista todos los adaptadores de red instalados en el sistema, proporcionando información como nombre, estado, velocidad y tipo de medio.
Get-NetAdapterMuestra 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-NetIPAddressMuestra la tabla de rutas IP del sistema, indicando cómo el tráfico de red se dirige a diferentes destinos.
Get-NetRouteEnví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.comPrueba 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 80Configura 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 24Define 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.8Lista todas las reglas del Firewall de Windows Defender, incluyendo reglas de entrada y salida, programas y puertos afectados.
Get-NetFirewallRuleCrea 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 AllowEnví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.comEnví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/dataRealiza 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.ContentDescarga 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"Comandos para gestionar usuarios, grupos y realizar consultas avanzadas en Active Directory.
Lista todos los objetos de usuario en Active Directory. El filtro `*` indica que todos los usuarios deben ser devueltos.
Get-ADUser -Filter *Obtiene información detallada sobre un usuario específico de Active Directory, usando su SamAccountName, DistinguishedName, SID o GUID.
Get-ADUser -Identity "joao.silva"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"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"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"Lista todos los objetos de grupo en Active Directory. El filtro `*` indica que todos los grupos deben ser devueltos.
Get-ADGroup -Filter *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"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"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"Busca cuentas en Active Directory basándose en criterios específicos. `-AccountDisabled` devuelve todas las cuentas de usuario que están deshabilitadas.
Search-ADAccount -AccountDisabledFiltra 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 PasswordNeverExpiresFiltra 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 LastLogonDateExporta 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" -NoTypeInformationGestión de políticas de ejecución de scripts, firma de código y control de acceso a archivos.
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-ExecutionPolicyDefine 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 RemoteSignedEstablece 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 BypassEstablece 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 AllSignedLista 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\MyVerifica 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"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 $certMuestra 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"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" $aclMuestra 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-ListTécnicas para automatizar tareas repetitivas, programar ejecución de scripts y gestionar jobs en segundo plano.
Lista todas las tareas programadas configuradas en el sistema operativo Windows, incluyendo su estado, nombre y hora de la próxima ejecución.
Get-ScheduledTaskCrea 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."Inicia la ejecución de una tarea programada manualmente, independientemente de su disparador programado.
Start-ScheduledTask -TaskName "MinhaTarefa"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"Elimina permanentemente una tarea programada del sistema. El parámetro `-Confirm:$false` evita la solicitud de confirmación.
Unregister-ScheduledTask -TaskName "MinhaTarefa" -Confirm:$falseInicia 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"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-JobRecupera 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 1Termina un job en segundo plano que está en ejecución. Puede ser necesario usar `-Force` para jobs que no responden.
Stop-Job -Id 1Elimina un job en segundo plano de la sesión actual de PowerShell. Esto libera los recursos asociados al job.
Remove-Job -Id 1Define 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" }}Exploración y manipulación de información del sistema Windows usando WMI y CIM para monitoreo y diagnóstico avanzado.
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_OperatingSystemConsulta 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_ComputerSystemConsulta 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_ProcessorConsulta 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_LogicalDiskCmdlet 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_OperatingSystemEjecuta 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'"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 servidorEjecuta 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_ServiceRecupera 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 10Un 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}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"