Te damos la bienvenida a la parte 3 de 3 de PowerShell: una guàa completa. Haz clic en el siguiente enlace para consultar la parte 1 y la parte 2.
En este artàculo final combinaremos los conceptos aprendidos hasta ahora y mostraremos algunos usos prácticos de PowerShell. El shell de Microsoft puede hacer que la vida de un administrador de TI sea más sencilla, al permitir administrar su infraestructura con poco esfuerzo. PowerShell es una herramienta muy potente que ayuda a simplificar la administración del servidor, recopilar información sobre el mismo y mostrarla en distintos formatos.
Esta última parte de la guàa presentará varios conceptos nuevos. Tómate tu tiempo y examina cada parte detenidamente.
¿Qué software tengo instalado en mi sistema?
Escribe Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize
El comando anterior mostrará las aplicaciones instaladas en tu sistema. Si descompones los comandos, te darás cuenta de que la estructura es bastante compleja:
- Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* – Esta parte del comando ordena al PowerShell que busque en HKLM y navegue hasta la ruta \Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall para recopilar todas las propiedades actuales. ¡HKLM es el sistema de archivos de PowerShell para el registro!
- El resto del comando solamente recopila datos especàficos (DisplayName, DisplayVersion, Publisher, InstallDate) y los reproduce en una tabla.
También puedes navegar por el registro directamente desde el shell escribiendo cd HKLM:\ y luego moviéndote por HKLM como con el Sàmbolo del sistema entre las carpetas de Windows.
¿Qué actualizaciones de Windows están instaladas en mi sistema?
Encontrar información sobre revisiones y actualizaciones (KB) era muy complicado con PowerShell. Microsoft ha introducido recientemente el comando cmdlet Get-Hotfix: una potente herramienta para consultar la infraestructura y averiguar qué parches y actualizaciones de Windows Update están instalados y para verificar si hay una actualización especàfica presente.
Piensa en el caso en el que se descubre una vulnerabilidad que hace que Microsoft lance un parche de seguridad: para garantizar la protección de la infraestructura, es esencial comprobar que está presente y, si no es asà, instalar el parche. Con este cmdlet, una vez que se haya preparado la secuencia de comandos, solo llevará unos minutos producir una lista de servidores vulnerables.
Escribe Get-Hotfix | Format-table -autosize
Esto producirá una lista de las KB instaladas en tu sistema.
Ahora podemos aprovechar la potencia del shell para interactuar con múltiples máquinas. Para hacer esto, presentaremos el PowerShell ISE (integrated scripting environment: entorno de scripting integrado).
Abre PowerShell ISE y escribe lo siguiente en el panel de los scripts. A continuación, pulsa el botón de reproducción para ejecutar el script. Necesitarás un archivo de texto con tus servidores como el creado en la parte 2 de la guàa. Como recordatorio, aquà está el contenido que habàamos creado:
Ahora escribe en el PowerShell ISE:
$servers = get-content c:\temp\test.txt
foreach ($server in $servers)
{Get-HotFix -ComputerName $server | Select-Object PSComputername, HOTFIXiD, Installedon | Sort-Object -Property InstalledOn -Descending}
Esto devolverá todas las KB instaladas en los servidores The-Solving-N1, The-Solving-N2 y The-Solving-N3:
Es necesario comprobar si hay una KB especàfica, por ejemplo KB2977629, y se debe añadir el cmdlet Where-object HotfixID -eq «KB2977629» al script.
Escribe:
$servers = get-content c:\temp\test.txt
foreach ($server in $servers)
{Get-HotFix -ComputerName $server | Where-object HotfixID -eq “KB2977629” | Select-Object PSComputername, HOTFIXiD, Installedon | Sort-Object -Property InstalledOn -Descending}
¿Cómo puedo buscar errores en el Visor de eventos?
El Visor de eventos es una herramienta fundamental para descubrir errores del sistema. PowerShell puede mejorar mucho la eficacia de búsqueda en el visor.
Escribe Get-Eventlog system -Newest 30 | Where-Object {$_.entryType -Match «Error»} | format-table -AutoSize
El comando que se muestra arriba aparecerá en el registro SISTEMA y mostrará los 30 errores más recientes. Puedes cambiar fácilmente el Visor de eventos a Aplicación o Seguridad.
PowerShell y Active Directory
PowerShell puede interactuar con cualquier subsistema de Windows. Es particularmente útil cuando se utiliza para consultar Active Directory. A continuación encontrarás una selección de scripts interesantes, pero, antes de verlos, deberás comprobar que el módulo de Active Directory esté habilitado en el shell. La forma más sencilla es ejecutar estos comandos en el controlador de dominio, pero si esto no es posible, también puedes agregar el rol a tu sistema, aunque deberá formar parte del dominio desde el que se desea extraer la información.
Escribe Add-WindowsFeature RSAT-AD-PowerShell
Una vez se ha completado la instalación, puedes usar el shell para recopilar información y modificar el dominio de Active Directory. Hazlo con cuidado si estás trabajando en un entorno de producción.
Como la lista de comandos es bastante grande, hemos agrupado por categoràas los cmdlets que consideramos más útiles. Siempre puedes ejecutar el comando get-help para obtener más información sobre estos cmdlets.
Consulta de usuarios
Consultar las cuentas de usuario es muy sencillo en PowerShell. Los comandos de la tabla siguiente explican cómo buscar usuarios, identificar aquellos con contraseñas no compatibles, bloqueados, deshabilitados, etc.
Comando PowerShell | Qué hace | Categoràa |
---|---|---|
Get-ADUser -Filter * -Properties * | where { $_.whenCreated -ge $week } | select Name,whenCreated | Sort Name | Usuarios creados en la última semana, ordenados por nombre | USERS |
Get-ADUser -Filter * -Properties PasswordNeverExpires | where { $_.PasswordNeverExpires -eq $true } | select Name | sort Name | Usuarios con contraseña configurada «sin caducidad», ordenados por nombre | USERS |
Get-ADUser -Filter «Enabled -eq ‘$false'» | Select Name, UserPrincipalName | Sort name | Usuarios con cuentas INACTIVAS, muestra los nombres y los FQN (nombres certificados), ordenados por nombre | USERS |
Search-ADAccount -AccountDisabled -UsersOnly | FT Name,ObjectClass -A | Usuarios con cuentas DESHABILITADAS, muestra los nombres y los FQN, ordenados por nombre | USERS |
Search-ADAccount -LockedOut | Format-Table name,lastlogondate, lockedout, objectclass, passwordexpired, passwordneverexpires | Encuentra usuarios con la cuenta bloqueada | USERS |
Search-ADAccount -AccountInactive -TimeSpan 90.00:00:00 -UsersOnly |Sort-Object | FT Name,ObjectClass -A | Encuentra las cuentas de usuarios que no han sido utilizadas durante 90 dàas | USERS |
Get-ADuser -Filter {name -like «*»} -properties *|select @{N=»Account»;E={$_.name}},@{N=»Name»;E={$_.givenname}},@{N=»LastName»;E={$_.surname}},@{N=»Mail»;E={$_.mail}},@{N=»AccountEnabled»;E={$_.enabled}},@{N=»MemberOf»;E={(Get-ADPrincipalGroupMembership $_).name -join («`r`n»,»,,,,,»)}} | Sort-Object «Account» | FT -AutoSize | Grupos de pertenencia para todos los usuarios. Ordena los datos en forma de tabla. Usa Export-CSV para devolver un archivo CSV. | USERS |
Get-ADUser -Filter * -Properties LastLogonDate | ? { $_.LastLogonDate -eq $null } | Select name,samaccountname
|
Encuentra los usuarios que no han iniciado nunca la sesión | USERS |
Consulta de grupos
La pertenencia a un grupo de Active Directory tiene importantes repercusiones en la seguridad. Por esta razón, es muy útil poder determinar rápidamente la presencia en grupos para cada usuario, con el fin de garantizar el cumplimiento de las polàticas de seguridad internas.
Comando | Qué hace | Categoràa |
---|---|---|
get-adgroup -filter * -Properties GroupCategory | Select name, groupcategory | FT -A | Todos los grupos presentes en Active Directory | GROUPS |
Get-ADGroupMember -identity “Administrators” -recursive | select name | Todos los usuarios del grupo Administradores de dominio (Domain Administrators) | GROUPS |
Get-ADPrincipalGroupMembership -identity Turbogeek | Sort-object | FT -property name, samaccountname -AutoSize | Encuentra los grupos a los que pertenece un usuario | GROUPS |
Get-ADGroupMember -Identity Domain Admins» -Recursive | %{Get-ADUser -Identity $_.distinguishedName -Properties Enabled | ?{$_.Enabled -eq $false}} | Select DistinguishedName,Enabled | Encuentra los usuarios deshabilitados en el grupo Administradores de dominio | GROUPS |
Consulta de la infraestructura de Active Directory
Estos comandos proporcionan información sobre la infraestructura.
Comando | Qué hace | Categoràa |
---|---|---|
Get-ADDomainController -Filter * | Format-table name,domain, forest,site, ipv4address, operatingsystem | Encuentra el controlador de dominio del dominio | DC |
Get-ADDomainController -Filter {IsGlobalCatalog -eq $true} | Select-Object Name,ipv4address,isglobalcatalog, operatingsystem | FT -A | Encuentra el servidor de catálogo global en el dominio, útil si tienes más de un controlador de dominio | DC |
Get-ADDomainController -Filter {IsReadOnly -eq $true} | Encuentra el controlador de dominio de solo lectura si existe en la infraestructura (Branch Servers) | DC |
Get-ADComputer -Filter ‘Name -like «The-Solving-N1*»‘ -Properties canonicalName, CN, created, IPv4Address, objectclass, OperatingSystem, OperatingSystemServicePack | FT -A | Encuentra el ordenador en el dominio como «The-Solving-N1», muestra información útil en forma de tabla | DC |
Get-ADForest | Select-Object -ExpandProperty ForestMode | Obtiene el nivel del bosque de Active Directory | DC |
Get-ADDomain | Select-Object -ExpandProperty domainmode | Obtiene el nivel de domino de Active Directory | DC |
Get-ADReplicationConnection -Filter {AutoGenerated -eq $true} | Obtiene detalles sobre la respuesta del dominio. Los datos se devolverán solo si hay más de un controlador de dominio presente. | DC |
$datecutoff = (Get-Date) Get-ADComputer -Filter {LastLogonTimestamp -lt $datecutoff} -Properties Name,LastLogonTimeStamp| Select Name,@{N=’LastLogonTimeStamp’; E={[DateTime]::FromFileTime($_.LastLogonTimeStamp)}} |
Ejecuta este script desde PowerShell ISE. Configura el $datecutoff y esto indicará el horario del último inicio de sesión de un ordenador. | DC |
Modifica Active Directory
También puedes utilizar PowerShell para modificar el dominio de Active Directory. Usa estos comandos con precaución, especialmente si eres principiante en PowerShell.
Comando | Qué hace | Categoràa |
---|---|---|
Disable-ADaccount -identity The-Solving | Deshabilita la cuenta The-Solving | USERS |
Enable-ADaccount -identity The-Solving | Habilita la cuenta The-Solving | USERS |
Set-ADAccountExpiriation -Identity The-Solving -datetime «07/01/2019» | Configura la cuenta The-Solving para que expire el 7 de enero de 2019 | USERS |
Clear-ADAccountExpiration -identity The-Solving | Deshabilita la fecha de caducidad de la cuenta | USERS |
Set-ADAccountPassword -identity The-Solving -reset -newpassword (Convertto-Securestring -asplaintext «Passw0rd123!» -Force) | Cambia la contraseña de usuario cifrando la transmisión – esencial | USERS |
Unlock-ADAccount -identity The-Solving | Desbloquea la cuenta The-Solving | USERS |
New-AdGroup -Name «Test Users» -SamAccountName TestUser -GroupCategory Security -GroupScope Global -displayname ‘Test Users’ -Path «OU=Groups, OU=Resources, DC=TEST, DC=UK -Description «All Test Users» | Crea un grupo de seguridad llamado Test Users en OU Groups > Resources | GROUPS |
Set-ADGroup -Identity ‘Test Users’ -groupcategory Distribution -groupscope Universal -Managedby ‘TurboGeek’ | Modifica el grupo Test Users y lo convierte en un grupo universal de distribución, administrado por ti | GROUPS |
search-adaccount -lockedout | unlock-adaccount -passthru -confirm | Encuentra y desbloquea todas las cuentas «locked» en Active Directory. Una solución sencilla y eficaz para desbloquear un grupo. | USERS |
Con esto hemos finalizado nuestra Guàa completa de PowerShell. Un viaje corto pero intenso que nos ha llevado a arañar la superficie de esta vasta y potente herramienta que es PowerShell. Sigue atento, pronto saldrán más guàas sobre este tema.
Read related articles
Cómo instalar y configurar Windows Server Update Services (WSUS)
Windows Server Update Services (WSUS) es una función necesaria en entornos corporativos. Los servicios de WSUS mejoran notablemente la eficiencia
Cómo imponer restricciones a los dispositivos con un GPO
Hemos visto cómo limitar software (de dos formas distintas) y sitios web mediante GPO. Ahora es el momento de limitar
Cuándo y cómo utilizar Sysprep
Sysprep es una herramienta de preparación de sistemas Microsoft utilizada por los administradores de sistemas generalmente durante la implementación automática