Ejercicios Prácticos de PowerShell para Gestión de Archivos, Procesos y Servicios

Clasificado en Informática

Escrito el en español con un tamaño de 8,05 KB

Bloque 1: Gestión de Archivos y Directorios

  1. Crea una **estructura de directorios** llamada prueba\prueba01 dentro de Documents, considerando que estás situado en c:\.

    New-Item -Path "C:\Users\$env:USERNAME\Documents\prueba\prueba01" -ItemType Directory -Force

  2. Comando para situarte en **prueba01**. Después, crea tres carpetas llamadas **dir1**, **dir2** y **dir3**, y seis archivos con nombres (ej. arc01.txt, arc02.txt, etc.) utilizando un solo comando por tipo.

    Set-Location "$env:USERPROFILE\Documents\prueba\prueba01"

    New-Item -Name dir1, dir2, dir3 -ItemType Directory

    New-Item -Name arc01.txt, arc02.txt, arc03.txt, arc04.txt, arc05.txt, arc06.txt -ItemType File

  3. Crea una variable $usu_fichero que contenga todos los archivos y carpetas dentro de prueba, incluyendo **subdirectorios**.

    $usu_fichero = Get-ChildItem "$env:USERPROFILE\Documents\prueba" -Recurse

  4. Crea una variable $usu_txt que contenga solo los archivos con extensión .txt dentro de prueba01.

    $usu_txt = Get-ChildItem "$env:USERPROFILE\Documents\prueba\prueba01" -Filter *.txt

  5. Añade al archivo arc01.txt el siguiente contenido: “Yo inventé el control zeta”.

    Add-Content -Path ".\arc01.txt" -Value "Yo inventé el control zeta"

  6. Añade al archivo arc02.txt la **fecha actual** con un solo comando.

    Get-Date | Out-File -Append .\arc02.txt

  7. Añade al archivo arc03.txt el listado de todos los **procesos del sistema**.

    Get-Process | Out-File -FilePath .\arc03.txt

  8. Sobrescribe el contenido de arc01.txt con la lista de archivos y carpetas de C:\Windows.

    Get-ChildItem C:\windows | Set-Content .\arc01.txt

  9. Empleando $usu_fichero, muestra el nombre de los ficheros que tengan extensión .txt.

    $usu_fichero | Where-Object {$_.Extension -eq ".txt"} | Select-Object Name

  10. Crea en la carpeta prueba una subcarpeta **prueba02** y copia en ella todos los ficheros de prueba01.

    New-Item -Path "$env:USERPROFILE\Documents\prueba\prueba02" -ItemType Directory

    Copy-Item "$env:USERPROFILE\Documents\prueba\prueba01\*" "$env:USERPROFILE\Documents\prueba\prueba02"

  11. Desde la carpeta prueba, guarda en la variable **$usu_carpeta** todos los recursos (archivos y carpetas) que contiene, incluyendo subdirectorios.

    Set-Location "$env:USERPROFILE\Documents\prueba"

    $usu_carpeta = Get-ChildItem -Recurse

  12. Desde $usu_carpeta, muestra los archivos cuyo nombre comience por la letra “d”.

    $usu_carpeta | Where-Object {$_.Name -match "^d"} | Select-Object Name

  13. Desde $usu_carpeta, obtén los archivos cuyo nombre termine en **números**.

    $usu_carpeta | Where-Object {$_.Name -match '[0-9]$'}

  14. Desde $usu_carpeta, elimina los archivos cuyo nombre comience por la letra “a”.

    $usu_carpeta | Where-Object {$_.Name -match '^a'} | Remove-Item

  15. Muestra todos los archivos de la carpeta prueba cuyo **tamaño sea menor de 100 bytes**.

    Get-ChildItem -Recurse | Where-Object { -not $_.PSIsContainer -and $_.Length -lt 100 }

Bloque 2: Gestión de Servicios y Procesos

  1. Muestra todos los servicios cuyo nombre comience por la letra “d”.

    Get-Service | Where-Object {$_.Name -like "d*" }

  2. Muestra los servicios que comiencen por “d” y estén **detenidos**.

    Get-Service | Where-Object {$_.Name -like "d*" -and $_.Status -eq "Stopped"}

  3. Repite el ejercicio anterior, pero formatea la salida en **modo lista**.

    Get-Service | Where-Object {$_.Name -like "d*" -and $_.Status -eq "Stopped"} | Format-List

  4. Muestra las propiedades **Name**, **Status**, **StartType** y **CanStop** de todos los servicios en formato lista.

    Get-Service | Format-List Name, Status, StartType, CanStop

  5. Muestra los nombres de los servicios que **se pueden detener**.

    Get-Service | Where-Object {$_.CanStop} | Select-Object Name

  6. Muestra los procesos en ejecución con su nombre en **mayúsculas**.

    Get-Process | Foreach-Object {$_.Name.ToUpper()}

  7. Muestra los **5 procesos que más memoria** estén utilizando.

    Get-Process | Sort-Object -Property WorkingSet -Descending | Select-Object -First 5 Name, WorkingSet

  8. Muestra los procesos cuyo nombre contenga **más de 10 caracteres**.

    Get-process | Where-Object {$_.Name.Length -gt 10} | Select-Object Name

  9. Muestra solo el nombre y estado de los servicios que estén en **ejecución**.

    Get-Service | Where-Object {$_.Status -eq "Running"} | Select-Object name,status

  10. Muestra los servicios cuyo nombre contenga la palabra “update”, ordenados por **estado**.

    Get-Service -name *update* | Sort-Object Status

  11. Muestra todos los servicios del sistema.

    Get-Service

  12. Muestra solo los nombres de los servicios en **orden alfabético**.

    Get-Service | Sort-Object Name | Select-Object -ExpandProperty Name

  13. Cuenta cuántos servicios hay en total.

    (Get-Service).Count

  14. Muestra los nombres de los procesos en ejecución convertidos a **minúsculas**.

    Get-Process | ForEach-Object {$_.Name.ToLower()}

  15. Muestra el nombre de los procesos cuyo nombre termine en “host”.

    Get-Process | Where-Object {$_.Name -match "host$"} | Select-Object Name

Bloque 3: Operaciones Avanzadas con Archivos

  1. Desde una variable con archivos .txt, muestra sus nombres en **mayúsculas** usando ForEach-Object.

    $usu_txt | ForEach-Object {$_.Name.ToUpper()}

  2. Muestra el nombre y la **fecha de último acceso** de los archivos, ordenados por tamaño.

    Get-ChildItem | Sort-Object Length | Select-Object Name, LastAccessTime

  3. Muestra los ficheros cuyo tamaño sea **mayor de 2 MB**.

    Get-Childitem -File | Where-Object {$_.Length -gt 2MB}

  4. Muestra el nombre, la fecha de creación y el **día de la semana** en que se crearon los ficheros .pdf, todo separado por guiones.

    Get-ChildItem -Filter *.pdf | ForEach-Object {"$($_.Name) - $($_.CreationTime) - $($_.CreationTime.DayOfWeek)"}

  5. Muestra el nombre y el tamaño de todos los ficheros cuyo tamaño sea **menor de 10 KB**, excluyendo directorios.

    Get-ChildItem -File | Where-Object {$_.Length -lt 10KB} | Select-Object Name, Length

  6. Para los archivos **mayores de 100 KB** en C:\Windows, muestra su nombre, fecha de último acceso y tamaño.

    Get-ChildItem C:\Windows -File -Recurse -ErrorAction SilentlyContinue | Where-Object {$_.Length -gt 100KB} | Select-Object Name, LastAccessTime, Length

  7. Desde una variable con archivos y carpetas, muestra el nombre de cada elemento seguido de si es un “Fichero” o un “Directorio”.

    $items = Get-ChildItem

    $items | ForEach-Object {

    if ($_.PSIsContainer) {

    "$($_.Name) - Directorio"

    } else {

    "$($_.Name) - Fichero"

    }

    }

Entradas relacionadas: