Ejercicios Resueltos de PowerShell: Automatización de Tareas en Windows

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 4,68 KB

1. Verificar la Existencia de un Usuario en el Sistema

Este script de PowerShell solicita el nombre de un usuario y verifica si existe en el sistema local.


$usuario = Read-Host "Introduce el nombre de usuario"

if (Get-LocalUser | Where-Object {$_.Name -like $usuario}) {
    Write-Host "El usuario existe"
} else {
    Write-Host "El usuario no existe"
}

2. Monitorizar el Estado de Conexión de Equipos en la Red

Este script modifica el ejercicio anterior para integrar la verificación de estado de conexión de varios equipos, determinando si están en línea o apagados.


$google = Test-NetConnection -ComputerName "www.google.com" | Where-Object {$_.PingSucceeded -like "*True*"}
$lopedevega = Test-NetConnection -ComputerName "www.academialopedevega.org" | Where-Object {$_.PingSucceeded -like "*True*"}
$pc = Test-NetConnection -ComputerName "172.16.6.1" | Where-Object {$_.PingSucceeded -like "*True*"}

if ($google) {
    Write-Output "google activo"
} else {
    Write-Output "google no activo"
}

if ($lopedevega) {
    Write-Output "Lope de Vega activo"
} else {
    Write-Output "Lope de Vega no activo"
}

if ($pc) {
    Write-Output "172.16.6.1 activo"
} else {
    Write-Output "172.16.6.1 no activo"
}

3. Guardar el Contenido del Portapapeles en un Archivo de Texto

Este script utiliza un bucle infinito para monitorear el portapapeles del sistema. Guarda su contenido en un archivo de texto con el formato de nombre dd-mm-yy.txt. El contenido se acumula en el archivo.


$fecha = Get-Date -Format dd-MM-yy

while (1) {
    $comprobar = Get-Clipboard
    Start-Sleep -Seconds 1
    if ($comprobar) {
        $comprobar | Out-File -FilePath "C:\Users\pablo\Desktop\$($fecha).txt" -Append
    }
}

4. Buscar Palabras Clave en un Archivo de Texto

Este script busca palabras clave específicas (como "pin", "password", "banco", etc.) en un archivo generado previamente. Si encuentra alguna coincidencia, muestra un mensaje con la fecha y hora.


$palabras = "pin", "password", "pass", "banco", "cuenta", "ES", "euro"
while (1) {
    if (Get-Content C:\Users\pablo\Desktop\02-02-18.txt | Select-String -Pattern $palabras) {
        Write-Output "Palabras encontradas $(Get-Date)"
        break
    } else {
        Write-Output "Palabras no encontradas"
    }
}

5. Detectar la Ejecución de MSPaint, Registrarla y Cerrarla

Este script monitorea continuamente si se ha abierto la aplicación MSPaint. Cuando detecta su ejecución, anota la fecha en un archivo y, después de 5 minutos, cierra la aplicación.


$fecha = Get-Date -Format D
while (1) {
    $proceso = Get-Process -Name "mspaint" -ErrorAction SilentlyContinue
    if ($proceso) {
        $fecha | Out-File -FilePath "C:\Users\pablo\Desktop\paint.txt" -Append
        Start-Sleep -Seconds 300
        Stop-Process -Name "mspaint"
        break
    }
}

6. Montar una Carpeta Compartida en una Unidad de Red

Este script verifica si la unidad X: está en uso. Si está libre, monta una carpeta compartida desde un servidor NAS en dicha unidad.


if (Get-PSDrive -Name x -ErrorAction SilentlyContinue) {
    Write-Output "La unidad está en uso"
} else {
    New-PSDrive -Name "x" -PSProvider FileSystem -Root "\\172.16.6.1\Public\isos" -Persist
}

7. Descargar e Instalar Aplicaciones desde URLs en un Archivo de Texto

Este script lee una lista de URLs desde el archivo descargas.txt, descarga cada archivo y procede a su instalación.


$urls = Get-Content C:\Users\pablo\Desktop\descargas.txt
$contador = 1
foreach ($url in $urls) {
    Invoke-WebRequest -Uri $url -OutFile "C:\Users\pablo\Desktop\descargas\$($contador).exe"
    & "C:\Users\pablo\Desktop\descargas\$($contador).exe" 
    $contador++
}

8. Descargar e Instalar Aplicaciones Selectivamente

Este script modifica el ejercicio anterior para permitir la instalación selectiva de aplicaciones. El archivo descargas.txt debe contener un campo adicional que indique con true si la URL debe ser instalada o no.


$descargas = Get-Content C:\Users\pablo\Desktop\descargas.txt
$contador = 1
foreach ($linea in $descargas) {
    $campos = $linea -split ","
    $url = $campos[0]
    $instalar = $campos[1]
    if ($instalar -eq "true") {
        Invoke-WebRequest -Uri $url -OutFile "C:\Users\pablo\Desktop\descargas\$($contador).exe"
        & "C:\Users\pablo\Desktop\descargas\$($contador).exe"
        $contador++
    } else {
        Write-Output "Descarga omitida para $($url)"
    }
}

Entradas relacionadas: