Ejercicios Prácticos de PowerShell para Administración de Sistemas Windows
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en
español con un tamaño de 10,59 KB
Ejercicios de Administración con PowerShell
1. Búsqueda y Exportación de Archivos Específicos
1.- (1,6 ptos.) Haz una línea de comando PowerShell (PS) que busque dentro de todo el directorio, y sus subdirectorios, C:\WWW los ficheros que tengan un tamaño entre 12 y 25 KB, que se modificaron por última vez en junio del 2011 después de las 15 horas. Genere un fichero CSV llamado ejercicio1.csv que contenga la ruta más el nombre del fichero, el tamaño, la fecha-hora del último acceso y la fecha-hora de la última modificación. Debe ordenar la salida por fecha-hora de último acceso, ascendentemente. [Select-Object, Sort-Object]
Get-ChildItem "C:\WWW" -Recurse | Where-Object { $_.Length -ge 12KB -and $_.Length -le 25KB -and $_.LastWriteTime -gt "2011-06-01 15:00:00" } | Select-Object @{Name="RutaCompleta"; Expression={$_.FullName}}, Length, LastAccessTime, LastWriteTime | Sort-Object LastAccessTime | Export-Csv -Path "ejercicio1.csv" -NoTypeInformation
2. Modificación Masiva de Atributos de Archivos
3.- Realiza un script PS que busque dentro de todo el directorio C:\WWW los ficheros que sean menores de 12 KB y que se han modificado desde mayo del 2011 a diciembre de 2011, y les ponga la fecha de creación igual a la fecha de modificación. No cambiar la fecha a los directorios, solo a los ficheros.
Get-ChildItem "C:\WWW" -Recurse | Where-Object { !$_.PSIsContainer -and $_.Length -lt 12KB -and $_.LastWriteTime -ge "2011-05-01" -and $_.LastWriteTime -le "2011-12-31" } | ForEach-Object { $_.CreationTime = $_.LastWriteTime }
3. Conceptos de Sistemas de Archivos Distribuidos (DFS)
2.- ¿Qué es y para qué se puede usar DFS?
Es un Sistema de Archivos Distribuidos (Distributed File System) y es un componente de red del servidor que facilita la forma de encontrar y manejar datos en la red. Solo se puede instalar en Windows Server. Facilita la construcción de una única vista jerárquica de múltiples servidores de archivos. En vez de ver una red física compuesta por decenas de servidores de archivos, los usuarios verán unos pocos directorios lógicos que incluyen todos los servidores y carpetas compartidas. Tiene dos tecnologías principales: Espacio de nombres DFS y Replicación DFS.
4. Automatización de Active Directory: Función NuevoGrupoOU
2.- (3 ptos.) Crear un script o función PS llamado NuevoGrupoOU, que reciba los siguientes parámetros:
- El nombre del grupo (newgrupo)
- OU padre del nuevo grupo (oupadre)
- Número de usuarios (numusu), por defecto 12
Requerimientos de la función:
- Comprobar que existe la OU oupadre dentro de la OU Usuarios. Si no existe, crearla.
- Debe crear una nueva OU llamada newgrupo dentro de la OU oupadre ya creada.
- Debe crear un grupo llamado igual que el parámetro newgrupo, dentro de la nueva OU creada. Este grupo debe ser miembro del grupo "Invitados del Dominio".
- Crear el directorio
E:\datos\oupadre\newgrupo, donde el grupo newgrupo tendrá permisos de L/E, junto al grupo informática y el grupo direccionL (administradores CT). - Crear numusu usuarios cuyo CN será newgrupoX (donde X vale de 1 a numusu) dentro de la OU nueva.
- Estos usuarios deben tener como samid el mismo que el CN.
- Correo electrónico:
[email protected] - Password igual a "Cam-Bia-La".
- Debe obligar a cambiar la contraseña al iniciar sesión.
- El campo Departamento debe ser oupadre y Puesto debe ser newgrupo.
- Crearle una unidad de red R: en
C:\usuarios\newgrupo\newgrupo-X. - El usuario debe ser miembro del grupo newgrupo.
function NuevoGrupoOU { param ($newgrupo, $oupadre, $numusu="12")if (dsget ou "OU=$oupadre,OU=usuarios,DC=pirulasa37,DC=local" 2> $null) { # La OU ya existe } else { dsadd ou "OU=$oupadre,OU=usuarios,DC=pirulasa37,DC=local" }dsadd ou "OU=$newgrupo,OU=$oupadre,OU=usuarios,DC=pirulasa37,DC=local"dsadd group "CN=$newgrupo,OU=$newgrupo,OU=$oupadre,OU=usuarios,DC=pirulasa37,DC=local" -memberof "CN=Invitados del dominio,CN=Users,DC=pirulasa37,DC=local"New-Item -Name $newgrupo -Path "E:\datos\$oupadre\" -ItemType Directory$i = 1 while ($i -le $numusu) { $userCN = "$newgrupo-$i" dsadd user "CN=$userCN,OU=$newgrupo,OU=$oupadre,OU=usuarios,DC=pirulasa37,DC=local" ` -samid $userCN ` -email "[email protected]" ` -pwd "Cam-Bia-La" ` -mustchpwd yes ` -dept $oupadre ` -title $newgrupo ` -memberof "CN=$newgrupo,OU=$newgrupo,OU=$oupadre,OU=usuarios,DC=pirulasa37,DC=local" $i++ } }# **Nota: Falta implementar la asignación de permisos NTFS y el mapeo de la unidad de red específica para cada usuario.**
5. Modificación de Usuarios mediante CSV
3.- (1,8 ptos.) Crear una función PS llamada Modif, que reciba parámetros:
- El nombre del fichero CSV (csvfile)
- Nuevo grupo (newgrupo) (opcional)
El fichero csvfile viene con la siguiente cabecera: usuario, movil, oficina, puesto. Comprobar que el fichero existe, leer los registros y modificar los usuarios (login) con los datos que llegan. Si el usuario no existe, debe sacar un mensaje. Si se incluye el parámetro newgrupo, debe agregar a los usuarios a este grupo (si el grupo no existe, crearlo en Users).
function Modif { param ($csvfile, [string]$newgrupo='pordefecto')if ($newgrupo -eq "pordefecto") { Write-Host "No se ha utilizado el parámetro newgrupo" $agregar = 'no' } else { dsadd group "CN=$newgrupo,CN=Users,DC=pirulasa37,DC=local" 2> $null $agregar = 'si' }if (Test-Path $csvfile) { $f = Import-Csv $csvfile foreach ($row in $f) { $z = dsquery user -samid $row.usuario if ($z) { dsmod user $z -mobile $row.movil -office $row.oficina -title $row.puesto if ($agregar -eq 'si') { Add-ADGroupMember -Identity $newgrupo -Members $row.usuario } } else { Write-Host "El usuario $($row.usuario) no existe." } } } else { Write-Host "El archivo CSV no existe." } }
6. Integración con Navegador e Internet Explorer
4.- (1,6 ptos.) Script que recibe el nombre de un grupo y un mensaje. Abre el navegador IE llamando a la siguiente página: http://enviarsms.miempresa.local/?tlf=movil&sms=mensaje, donde el móvil se extrae del Active Directory de los usuarios que pertenecen a ese grupo. Debe abrir tantas páginas como usuarios con móvil haya en el grupo.
function GrupoMensaje { param ($grupo, $mensaje) $gru = Get-ADGroup -Identity $grupo -Properties members $miembros = $gru.membersforeach ($miembro in $miembros) { $userData = Get-ADUser -Identity $miembro -Properties mobile $movil = $userData.mobileif ($movil) { $ruta = "http://enviarSMS.miempresa.local?tlf=$movil&sms=$mensaje" $IE = New-Object -ComObject InternetExplorer.Application $IE.Visible = $true $IE.Navigate($ruta) } } }
7. Ejemplo de Uso de Espacios de Nombres DFS
5.- (0,6 ptos.) Pon un ejemplo claro de uso de DFS como espacio de nombres.
Una oficina tiene dos servidores: un principal llamado S1 y un secundario S2. Podemos agrupar las carpetas compartidas ubicadas en distintos servidores utilizando un espacio de nombres para almacenar todos los archivos de ambas máquinas en una misma ubicación virtual.
El S1 comparte recursos en la carpeta "archivos" (\S1\archivos). El S2 comparte recursos en \S2\recursos. Si la oficina, con el dominio "oficina.local", crea un espacio de nombres DFS llamado "espacionombre" y crea una carpeta llamada "archivos" que redirija a S1, los usuarios accederán a través de \oficina.local\espacionombre\archivos.
Los Espacios de nombres DFS permiten agrupar carpetas compartidas en una estructura lógica. Los usuarios ven el espacio de nombres como una sola carpeta compartida con subcarpetas, lo que aumenta la disponibilidad y conecta automáticamente a los usuarios con los recursos más cercanos según Active Directory, evitando saturar conexiones WAN.
8. Monitorización de Discos con WMI
6.- (1,4 ptos.) Crea un script en PS llamado UtilizacionDiscos.ps1 que utiliza la clase WMI Win32_Logicaldisk para sacar de cada unidad: la letra, el nombre del volumen, el tipo de sistema de ficheros, el tamaño y el espacio libre (en GB). Guárdalo en un fichero acumulativo llamado UtilizacionDiscos.txt.
$discos = Get-WmiObject Win32_LogicalDisk | Where-Object {$_.DriveType -eq 3} $fecha = Get-Date $dia = $fecha.Day $mes = $fecha.Month $ano = $fecha.Year $hora = $fecha.Hour $min = $fecha.Minute"Utilización de Discos el día $dia/$mes/$ano a las $hora horas y $min minutos" | Out-File -FilePath "E:\utilizaciondiscos.txt" -Appendforeach ($disco in $discos) { $letra = $disco.DeviceID $nombre = $disco.VolumeName $tipo = $disco.FileSystem $tamanoGB = [Math]::Round($disco.Size / 1GB, 2) $libreGB = [Math]::Round($disco.FreeSpace / 1GB, 2)"Unidad $letra : [$nombre] tipo $tipo / Queda $libreGB GB de $tamanoGB GB" | Out-File -FilePath "E:\utilizaciondiscos.txt" -Append }
9. Gestión de Eventos del Sistema (TCP/IP)
6.- Buscar todos los eventos del sistema (System) que son entradas originadas por el servicio TcpIp de este año y añadirlos al fichero D:\ps\eventos-tcpip-XXXX.txt (donde XXXX es el año actual).
$anoActual = (Get-Date).Year $rutaArchivo = "E:\eventos-tcpip-$anoActual.txt""Inicio de eventos TCP/IP en el año $anoActual" | Out-File -FilePath $rutaArchivo -AppendGet-EventLog -LogName System -Source "Tcpip" | Where-Object { $_.TimeGenerated.Year -eq $anoActual } | Out-File -FilePath $rutaArchivo -Append"Fin Eventos TCP/IP ----------------------------------------------" | Out-File -FilePath $rutaArchivo -Append