Principales conclusiones
- Gestión eficaz de las funciones: automatiza la recuperación de los roles de servidor instalados, simplificando las tareas de gestión y supervisión.
- Funcionalidad ampliada: capaz de identificar funciones especializadas como los servicios SQL y Exchange.
- Requisito de privilegio elevado: requiere privilegios de administrador para acceder a las funciones del servidor y gestionarlas.
- Salida personalizable: ofrece una opción para guardar los resultados en un campo personalizado, mejorando la flexibilidad para diferentes casos de uso.
- Cumplimiento y seguridad: facilita las auditorías periódicas, cruciales para el cumplimiento de la normativa y el mantenimiento de un entorno de servidor seguro.
- Compatibilidad de scripts: requiere Windows Server 2012 o versiones posteriores y PowerShell versión 4.0 para un rendimiento óptimo.
- Integración con herramientas de TI: mejora la gestión general de TI cuando se integra con soluciones como NinjaOne.
- Administración de TI simplificada: proporciona un enfoque unificado para gestionar las funciones del servidor, reduciendo la complejidad y los posibles errores.
- Auditorías periódicas: fomenta las comprobaciones frecuentes de las funciones del servidor para garantizar su funcionamiento y seguridad óptimos.
Comprender y gestionar las funciones de los servidores es un aspecto fundamental de la gestión de infraestructuras de TI. Con la creciente complejidad de los entornos de red y las funciones de los servidores, resulta esencial que los profesionales de TI dispongan de herramientas para supervisar y configurar eficazmente sus sistemas. Aquí es donde los scripts PowerShell, como el que estamos comentando, adquieren un valor incalculable.
Contexto
El script en cuestión está diseñado para profesionales de TI y proveedores de servicios gestionados (MSP) que necesitan un método fiable para gestionar los roles de Windows Server. Dada la importancia de las funciones de servidor en la gestión y la seguridad de la red, es fundamental disponer de un script automatizado para rastrear e informar sobre estas funciones. Esto es especialmente cierto para entornos en los que se utilizan servidores Exchange y SQL, ya que el script también comprueba estos servicios.
El script:
#Requires -Version 4.0
<#
.SYNOPSIS
Retrieves the installed server roles.
.DESCRIPTION
Retrieves the installed server roles.
For Exchange and SQL, this just detects if the services are installed.
.EXAMPLE
(No Parameters)
## EXAMPLE OUTPUT WITHOUT PARAMS ##
DisplayName FeatureType Installed PostConfigurationNeeded
----------- ----------- --------- -----------------------
Active Directory Domain Services Role True False
DNS Server Role True False
File and Storage Services Role True False
PARAMETER: -CustomField "Roles"
Saves the results to a multi-line custom field.
.EXAMPLE
-CustomField "Roles"
## EXAMPLE OUTPUT WITH CustomField ##
DisplayName FeatureType Installed PostConfigurationNeeded
----------- ----------- --------- -----------------------
Active Directory Domain Services Role True False
DNS Server Role True False
File and Storage Services Role True False
.OUTPUTS
None
.NOTES
Minimum OS Architecture Supported: Server 2012
Release Notes: Initial Release
By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use.
Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms.
Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party.
Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider.
Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations.
Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks.
Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script.
EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).
#>
[CmdletBinding()]
param (
[string]
$CustomField
)
begin {
if ($env:customfield -notlike "null" -and $env:customfield) {
$CustomField = $env:customfield
}
function Test-IsElevated {
$id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$p = New-Object System.Security.Principal.WindowsPrincipal($id)
$p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)
}
}
process {
if (-not (Test-IsElevated)) {
Write-Error -Message "Access Denied. Please run with Administrator privileges."
exit 1
}
$SQLServices = Get-Service | Where-Object { $_.DisplayName -like "SQL Server*" }
$ExchangeServices = Get-Service -Name MSExchangeServiceHost -ErrorAction SilentlyContinue
$InstalledFeatures = Get-WindowsFeature | Where-Object { $_.Installed -and $_.FeatureType -like "Role" } | Select-Object -Property DisplayName, FeatureType, Installed, PostConfigurationNeeded
$InstalledFeatures = if ($SQLServices) {
$InstalledFeatures
[PSCustomObject]@{
DisplayName = "SQL Server"
FeatureType = "Role"
Installed = $true
PostConfigurationNeeded = $null
}
}
else { $InstalledFeatures }
$InstalledFeatures = if ($ExchangeServices) {
$InstalledFeatures
[PSCustomObject]@{
DisplayName = "Exchange Server"
FeatureType = "Role"
Installed = $true
PostConfigurationNeeded = $null
}
}
else { $InstalledFeatures }
$InstalledFeatures | Format-Table -AutoSize | Out-String | Write-Host
if ($CustomField) {
Ninja-Property-Set -Name $CustomField -Value $($InstalledFeatures.DisplayName | Out-String)
}
}
end {
Accede a más de 300 scripts en el Dojo de NinjaOne
Análisis detallado
El script funciona en varias etapas:
- Definición de parámetros: comienza definiendo un parámetro, $CustomField, que permite al usuario especificar un campo personalizado para guardar los resultados.
- Comprobaciones preliminares: el script comprueba si se está ejecutando con privilegios de administrador, un paso necesario dado que acceder a los roles del servidor requiere permisos elevados.
- Recuperación de roles: utiliza el cmdlet Get-WindowsFeature para listar todas las características instaladas en el servidor, filtrando específicamente aquellas marcadas como ‘Role’.
- Comprobaciones de servicio: el script identifica si los servicios SQL y Exchange están instalados comprobando los servicios respectivos.
- Creación de objetos personalizados: para los servicios SQL y Exchange, si están presentes, el script crea objetos personalizados marcándolos como roles instalados.
- Visualización y salida: los resultados se formatean y se muestran en forma de tabla. Si se utiliza el parámetro $CustomField, guarda la salida en el campo personalizado especificado utilizando una función ficticia Ninja-Property-Set.
Posibles casos de uso
Piensa en un administrador de TI que necesita auditar periódicamente las funciones de servidor en varios servidores Windows. Puede utilizar este script para recopilar rápidamente los datos necesarios, especialmente para comprobaciones de conformidad o antes de desplegar nuevas aplicaciones que puedan depender de determinadas funciones.
Comparaciones
Tradicionalmente, la gestión de roles de servidor podía implicar comprobaciones manuales o el uso de herramientas de gestión independientes para los distintos tipos de servidor (como SQL o Exchange). Este script consolida estas tareas, proporcionando un enfoque unificado basado en scripts que es más rápido y menos propenso a errores humanos.
FAQ
P: ¿Puede ejecutarse este script en cualquier versión de Windows Server?
R: Requiere al menos Windows Server 2012 y PowerShell versión 4.0.
P: ¿Es necesario ejecutar el script con privilegios de administrador?
R: Sí, ya que el acceso a los roles del servidor requiere permisos elevados.
P: ¿Puede el script diferenciar entre roles que necesitan post-configuración?
R: Sí, indica si los roles instalados necesitan post-configuración.
Implicaciones
Aunque el script proporciona una forma rápida y automatizada de listar los roles del servidor, sus implicaciones en la seguridad y el cumplimiento de las TI son significativas. Las comprobaciones periódicas mediante este script pueden garantizar que solo se activen las funciones necesarias, reduciendo así la superficie de ataque.
Recomendaciones
- Ejecuta siempre el script con la última versión de PowerShell para una mejor compatibilidad.
- Audita regularmente los roles del servidor utilizando este script para mantener un entorno de servidor seguro y optimizado.
- Integra la salida del script con tus herramientas de gestión de TI para una supervisión exhaustiva.
Reflexiones finales
En un ecosistema en el que la gestión eficiente de los recursos informáticos es primordial, herramientas como NinjaOne pueden complementar estos scripts de PowerShell. Al integrar las capacidades de scripting con soluciones más amplias de gestión y supervisión de TI, NinjaOne garantiza un enfoque más cohesivo y automatizado de la gestión de la infraestructura, lo que encaja perfectamente con los objetivos de este script.