Ir al contenido principal

Script Powershell que genera reporte de Active Directory

Import-Module ActiveDirectory
$enc  = New-Object System.Text.utf8encoding

$objetoBosque = Get-ADForest
$objetoDominio = Get-ADDomain
$bosque = $objetoBosque.Name
$dominio = $objetoDominio.Name
$nfuncbosque = $objetoBosque.ForestMode
$nfuncdominio = $objetoDominio.DomainMode
$fsmodomain = $objetoBosque.DomainNamingMaster
$fsmoSchema = $objetoBosque.SchemaMaster
$fsmoRID = $objetoDominio.RIDMaster
$fsmoInfra = $objetoDominio.InfrastructureMaster
$fsmoPDC = $objetoDominio.PDCEmulator

$configNCDN = (Get-ADRootDSE).ConfigurationNamingContext
$siteContainerDN = ("CN=Sites," + $configNCDN)
$sitios=Get-ADObject -SearchBase $siteContainerDN -filter { objectClass -eq "site" } -properties *
$htmlsitios = @"
"@
$htmlsubnets = @"
"@
foreach ($sitio in $sitios) {
$aux0=$sitio.Name
$htmlsitios = @"
$htmlsitios
<tr><td>Nombre del Sitio de Active Directory</td><td>$aux0</td></tr>
"@
$htmlsubnet = @"
"@
$siteDN = "CN=" + $sitio.Name + "," + $siteContainerDN
$siteObj = Get-ADObject -Identity $siteDN -properties "siteObjectBL", "description", "location"
foreach ($subnetDN in $siteObj.siteObjectBL) {
    $subnet=Get-ADObject -Identity $subnetDN -properties "siteObject", "description", "location"
    $aux1=$subnet.location
    $aux2=$subnet.description
    $aux3=$subnet.name
$htmlsubnet = @"
$htmlsubnet
<tr><td>$aux3</td><td>$aux1</td><td>$aux2</td><td>$aux0</td></tr>
"@
}
$htmlsubnets = @"
$htmlsubnet
"@
}

$htmldomaincontrollers = @"
"@

$dcs = Get-ADDomainController -Filter *
foreach($dc in $dcs)
{
$aux0=$dc.hostname
$aux1=$dc.site
$aux2=$dc.isglobalcatalog
$aux3=$dc.ipv4address
$aux4=$dc.operatingSystem
$aux5=$dc.OperatingSystemServicePack
$memorias=Get-WmiObject -class Win32_PhysicalMemory -ComputerName $dc.hostname
$aux6=$null
foreach ($memoria in $memorias) {
$aux6+=$memoria.capacity
}
$aux6=$aux6/ 1GB -as [int]
$dispalmacenamiento=Get-WmiObject -class Win32_LogicalDisk -ComputerName $dc.hostname
$htmlvolumenes=@"
<table border="1">
<tr><td>Unidad</td><td>Descripcion</td><td>Tamaño Total(GB)</td><td>Espacio Ocupado(GB)</td><td>Espacio Libre(GB)</td><td>Sistema de Archivos</td></tr>
"@
foreach ($device in $dispalmacenamiento) {
if ($device.Description -eq "Local Fixed Disk") {
$aux7=$device.name
$aux8=$device.Description
$aux9=$device.Size/1GB -as [int]
$aux10=$device.size/1GB -as [int]
$aux11=$device.freespace/1GB -as [int]
$aux12=$device.filesystem
$htmlvolumenes=@"
$htmlvolumenes
<tr><td>$aux7</td><td>$aux8</td><td>$aux9</td><td>$aux10</td><td>$aux11</td><td>$aux12</td></tr>
"@
}

$procesadores=Get-WmiObject -class Win32_Processor -ComputerName $dc.hostname
$htmlProcesadores=@"
<table border="1">
<tr><td>Nombre</td><td>Fabricante</td><td>Numero de Cores</td><td>Numero de Procesadores Logicos</td></tr>
"@
foreach ($procesador in $procesadores) {
$aux13=$procesador.name
$aux14=$procesador.Manufacturer
$aux15=$procesador.NumberofCores
$aux16=$procesador.NumberofLogicalProcessors
$htmlProcesadores=@"
$htmlProcesadores
<tr><td>$aux13</td><td>$aux14</td><td>$aux15</td><td>$aux16</td></tr>
"@
}





}

$htmldomaincontrollers = @"
$htmldomaincontrollers
<tr><td>$aux0</td><td>$aux1</td><td>$aux2</td><td>$aux3</td><td>$aux4</td><td>$aux5</td><td>$htmlprocesadores</table></td><td>$aux6</td><td>$htmlvolumenes</table></td></tr>
"@
}

$body = @"
<center><h1><b>Informacion del Dominio</h1><br></center>
<br>
<h3><b>Datos Generales</h3>
<table border="2">
<tr><td>Bosque:<b></td><td>$bosque<b></td></tr>
<tr><td>Dominio:<b></td><td>$dominio<b></td></tr>
<tr><td>Nivel Funcional de Bosque:<b></td><td>$nfuncbosque<b></td></tr>
<tr><td>Nivel Funcional de Dominio:<b></td><td>$nfuncdominio<b></td></tr>
</table>

<h3><b>Roles FSMO</h3>
<table border="2">
<tr><td>Schema Master:<b></td><td>$fsmoSchema<b></td></tr>
<tr><td>Domain Naming Master:<b></td><td>$fsmodomain<b></td></tr>
<tr><td>PDC Emulator:<b></td><td>$fsmoPDC<b></td></tr>
<tr><td>Infrastructure Master:<b></td><td>$fsmoinfra<b></td></tr>
<tr><td>RID Master:<b></td><td>$fsmoRID<b></td></tr>
</table>

<h3><b>Sitios</h3>
<table border="2">
$htmlsitios
</table>

<h3><b>Subnets</h3>
<table border="2">
<tr><td>Subnet<b></td><td>Ubicacion<b></td></td><td>Descripcion<b></td></td><td>Sitio<b></td></tr>
$htmlsubnets
</table>

<h3><b>Controladores de Dominio</h3>
<table border="2">
<tr><td>Nombre<b></td><td>Sitio<b></td></td><td>Catalogo Global<b></td></td><td>direccion IP<b></td><td>Sistema Operativo<b></td><td>Service Pack<b></td><td>Procesadores<b></td><td>RAM(GB)<b></td><td>Volumenes<b></td></tr>
$htmldomaincontrollers
</table>

<br>
Desde ya es un placer chequear esta característica, para ayudarle a brindar un mejor servicio IT.<br>
<br>
Saludos cordiales,<br>
"@

convertTo-HTML -body $body | Out-File c:\ReporteAD.html
#send-mailmessage -to buzon@dominio.local -from "Nombre <email>" -Subject "Reporte inicio sesion computadoras" -body $body -smtpserver servidor_de_correo -Encoding $enc -BodyAsHtml

Entradas más populares de este blog

Probando Workplace join en Windows Server 2012 R2

Buen día, La idea del día de hoy es hacer un laboratorio de prueba para probar la característica Workplace join de Windows Server 2012 R2. La función de esta característica es poder realizar Single-Sign-On desde dispositivos IOs y Android para consumir datos y servicios en nuestra red corporativa, dado que estos dispositivos no pueden ser incluidos como objetos en nuestro Active Directory. Para poder realizar este laboratorio vamos a necesitar tener un dominio de Active Directory, también necesitaremos implementar Active Directory Federation Services y Active Directory Certification Services, este ultimo para emitir certificados internamente en nuestra organización. En mi caso ya tengo un laboratorio con un dominio creado y el controlador de dominio correspondiente, también eh implementado el rol de Active Directory Certificate Services para los certificados. El foco principal que quiero abordar aquí son los pasos correspondientes a la implementación de la característica Workpl...

Crear servidor Ansible

Servidor Ansible Comenzamos instalando un sistema operativo CentOS 7 minimal, podemos hacerlo sobre una maquina virtual Hyper-V, Vmware o en la nube. En Centos 7 instalación mínima por defecto no se tiene conexión a la red dado que las interfaces ethernet no vienen habilitadas de forma predeterminada. Ejecutar comando " nmcli d " para un listado rápido de las interfaces de red instaladas en el equipo. Ejecutar el comando " nmtui " para abrir el Network manager Editar las interfaces y configurar en automático IPv4 y marcar la opción "Conectar de forma automática"  para obtener dirección IP desde un servidor DHCP. Ejecutar " Service Network Restart " Instalar el repositorio EPEL para Centos 7 Ejecutar " yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm " Instalar ansible Ejecutar " yum install ansible " Ejecutar " yum install python-pip " Ejecutar " pip inst...

Herramienta automatizacion de impresiones de pantalla

Con Windows 7 tenemos la aplicación psr.exe que automatiza la toma de impresiones de pantalla y las acciones del usuario y genera un reporte. Debemos ir a configuración y definir una ruta donde psr.exe guardara el archivo con el reporte, también podemos darle un numero entre 0 y 100 que podemos darle de cantidad de impresiones de pantalla que va a guardar. Mas información en el siguiente link http://blogs.technet.com/b/mspfe/archive/2013/03/22/uncovering-a-hidden-gem-psr-exe.aspx