Sei sulla pagina 1di 8

Trabajando con Reportes HTML y PowerShell 1.

- Generando salidas Html desde la lnea de comandos: PS C:\Users\c1> Get-Service | Select-Object Status, Name, DisplayName | ConvertToHTML | Out-File C:\Users\c1\Documents\salidas\Test1.htm Verificar el archive generado.

2.- Usando el parmetro head para personalizar los ttulos.


<style> BODY {background-color:peachpuff;} </style>

Realizar un script con el siguiente contenido: $a = "<style>BODY{background-color:peachpuff;}</style>" Get-Service | Select-Object Status, Name, DisplayName | ConvertTo-HTML -head $a | Out-File C:\Users\c1\Documents\salidas\Test1.htm Ejecutar el script: PS C:\Users\c1\Documents\SQLSERVER2\scripts2> .\html2.ps1 Verificar la salida en html.

3.- Personalizar los bordes de la tabla: Realizar un script con el siguiente contenido:
$a = "<style>" $a = $a + "BODY{background-color:peachpuff;}" $a = $a + "TABLE{border-width: 1px;border-style: solid;border-color: black;bordercollapse: collapse;}" $a = $a + "TH{border-width: 1px;padding: 0px;border-style: solid;border-color: black;}" $a = $a + "TD{border-width: 1px;padding: 0px;border-style: solid;border-color: black;}" $a = $a + "</style>" Get-Service | Select-Object Status, Name, DisplayName | ConvertTo-HTML -head $a |OutFile C:\Users\c1\Documents\salidas\Test1.htm

Verificar el archivo generado. Modificar el color de las cabaceras, realizar el siguiente script:
$a = "<style>" $a = $a + "BODY{background-color:peachpuff;}" $a = $a + "TABLE{border-width: 1px;border-style: solid;border-color: black;bordercollapse: collapse;}" $a = $a + "TH{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:thistle}" $a = $a + "TD{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:palegoldenrod}" $a = $a + "</style>" Get-Service | Select-Object Status, Name, DisplayName | ConvertTo-HTML -head $a | OutFile C:\Users\c1\Documents\salidas\Test1.htm

Verificar el archivo generado:

4.- Trabajando con reportes HTML directamente sobre archivos. Crear un nuevo script con el siguiente cdigo:
$ProcessFileName = "process.htm" New-Item -ItemType file $ProcessFileName -Force #Escribimos la cabecera del archivo HTML Function writeHtmlHeader { param($fileName) $date = ( get-date ).ToString('yyyy/MM/dd') Add-Content $fileName "<html>" Add-Content $fileName "<head>" Add-Content $fileName "<meta http-equiv='Content-Type' content='text/html; charset=iso8859-1'>" Add-Content $fileName '<title>Reporte de procesos</title>' add-content $fileName '<STYLE TYPE="text/css">'

add-content add-content add-content add-content add-content add-content add-content add-content add-content add-content add-content add-content add-content add-content add-content add-content add-content add-content add-content add-content add-content add-content add-content add-content Add-Content Add-Content

$fileName "<!--" $fileName "td {" $fileName "font-family: Tahoma;" $fileName "font-size: 11px;" $fileName "border-top: 1px solid #999999;" $fileName "border-right: 1px solid #999999;" $fileName "border-bottom: 1px solid #999999;" $fileName "border-left: 1px solid #999999;" $fileName "padding-top: 0px;" $fileName "padding-right: 0px;" $fileName "padding-bottom: 0px;" $fileName "padding-left: 0px;" $fileName "}" $fileName "body {" $fileName "margin-left: 5px;" $fileName "margin-top: 5px;" $fileName "margin-right: 0px;" $fileName "margin-bottom: 10px;" $fileName "" $fileName "table {" $fileName "border: thin solid #000000;" $fileName "}" $fileName "-->" $fileName "</style>" $fileName "</head>" $fileName "<body>"

add-content $fileName "<table width='100%'>" add-content $fileName "<tr bgcolor='#CCCCCC'>" add-content $fileName "<td colspan='7' height='25' align='center'>" add-content $fileName "<font face='tahoma' color='#003399' size='4'><strong> Reporte de Procesos - $date</strong></font>" add-content $fileName "</td>" add-content $fileName "</tr>" add-content $fileName "</table>" } writeHtmlHeader $ProcessFileName #Ejecutamos el comando Central add-content add-content add-content add-content add-content $ProcessFileName $ProcessFileName $ProcessFileName $ProcessFileName $ProcessFileName "<table width='100%'>" "<tr bgcolor='#CCCCCC'>" "<td> Handles </td> <td>ProcessName</td>" "</td> " "</tr>"

$dp = Get-Process foreach ($item in $dp) { Write-Host $item.ProcessName Add-Content $ProcessFileName Add-Content $ProcessFileName Add-Content $ProcessFileName Add-Content $ProcessFileName }

"<tr>" "<td>$item.Handles</td>" "<td>$item.ProcessName</td>" "</tr>"

add-content $ProcessFileName "</table>"

Ejecutamos el script y verificamos la salida generada.

5.- Trabajando con reportes ms complejos: Crear el siguiente script y analizar el manejo de funciones:
# First lets create a text file, where we will later save the freedisk space info $freeSpaceFileName = "FreeSpace.htm" $serverlist = "sl.txt" $warning = 25 $critical = 10 New-Item -ItemType file $freeSpaceFileName -Force # Getting the freespace info using WMI #Get-WmiObject win32_logicaldisk | Where-Object {$_.drivetype -eq 3} | format-table DeviceID, VolumeName,status,Size,FreeSpace | Out-File FreeSpace.txt # Function to write the HTML Header to the file Function writeHtmlHeader { param($fileName) $date = ( get-date ).ToString('yyyy/MM/dd') Add-Content $fileName "<html>" Add-Content $fileName "<head>" Add-Content $fileName "<meta http-equiv='Content-Type' content='text/html; charset=iso8859-1'>" Add-Content $fileName '<title>DiskSpace Report</title>' add-content $fileName '<STYLE TYPE="text/css">' add-content $fileName "<!--" add-content $fileName "td {" add-content $fileName "font-family: Tahoma;" add-content $fileName "font-size: 11px;" add-content $fileName "border-top: 1px solid #999999;" add-content $fileName "border-right: 1px solid #999999;" add-content $fileName "border-bottom: 1px solid #999999;" add-content $fileName "border-left: 1px solid #999999;" add-content $fileName "padding-top: 0px;" add-content $fileName "padding-right: 0px;" add-content $fileName "padding-bottom: 0px;" add-content $fileName "padding-left: 0px;" add-content $fileName "}" add-content $fileName "body {" add-content $fileName "margin-left: 5px;" add-content $fileName "margin-top: 5px;" add-content $fileName "margin-right: 0px;" add-content $fileName "margin-bottom: 10px;" add-content $fileName "" add-content $fileName "table {" add-content $fileName "border: thin solid #000000;" add-content $fileName "}" add-content $fileName "-->" add-content $fileName "</style>" Add-Content $fileName "</head>" Add-Content $fileName "<body>" add-content $fileName add-content $fileName add-content $fileName "<table width='100%'>" "<tr bgcolor='#CCCCCC'>" "<td colspan='7' height='25' align='center'>"

add-content $fileName "<font face='tahoma' color='#003399' size='4'><strong>DiskSpace Report - $date</strong></font>" add-content $fileName "</td>" add-content $fileName "</tr>" add-content $fileName "</table>" } # Function to write the HTML Header to the file Function writeTableHeader { param($fileName) Add-Content Add-Content Add-Content Add-Content Add-Content Add-Content Add-Content Add-Content } $fileName $fileName $fileName $fileName $fileName $fileName $fileName $fileName "<tr bgcolor=#CCCCCC>" "<td width='10%' align='center'>Drive</td>" "<td width='50%' align='center'>Drive Label</td>" "<td width='10%' align='center'>Total Capacity(GB)</td>" "<td width='10%' align='center'>Used Capacity(GB)</td>" "<td width='10%' align='center'>Free Space(GB)</td>" "<td width='10%' align='center'>Freespace %</td>" "</tr>"

Function writeHtmlFooter { param($fileName) Add-Content $fileName "</body>" Add-Content $fileName "</html>" } Function writeDiskInfo { param($fileName,$devId,$volName,$frSpace,$totSpace) $totSpace=[math]::Round(($totSpace/1073741824),2) $frSpace=[Math]::Round(($frSpace/1073741824),2) $usedSpace = $totSpace - $frspace $usedSpace=[Math]::Round($usedSpace,2) $freePercent = ($frspace/$totSpace)*100 $freePercent = [Math]::Round($freePercent,0) if ($freePercent -gt $warning) { Add-Content $fileName "<tr>" Add-Content $fileName "<td>$devid</td>" Add-Content $fileName "<td>$volName</td>" Add-Content $fileName "<td>$totSpace</td>" Add-Content $fileName "<td>$usedSpace</td>" Add-Content $fileName "<td>$frSpace</td>" Add-Content $fileName "<td>$freePercent</td>" Add-Content $fileName "</tr>" } elseif ($freePercent -le $critical) { Add-Content $fileName "<tr>" Add-Content $fileName "<td>$devid</td>" Add-Content $fileName "<td>$volName</td>" Add-Content $fileName "<td>$totSpace</td>" Add-Content $fileName "<td>$usedSpace</td>" Add-Content $fileName "<td>$frSpace</td>" Add-Content $fileName "<td bgcolor='#FF0000' align=center>$freePercent</td>" #<td bgcolor='#FF0000' align=center> Add-Content $fileName "</tr>" } else { Add-Content $fileName "<tr>" Add-Content $fileName "<td>$devid</td>" Add-Content $fileName "<td>$volName</td>" Add-Content $fileName "<td>$totSpace</td>" Add-Content $fileName "<td>$usedSpace</td>" Add-Content $fileName "<td>$frSpace</td>" Add-Content $fileName "<td bgcolor='#FBB917' align=center>$freePercent</td>" # #FBB917 Add-Content $fileName "</tr>" } }

Function sendEmail { param($from,$to,$subject,$smtphost,$htmlFileName) $body = Get-Content $htmlFileName $smtp= New-Object System.Net.Mail.SmtpClient $smtphost $msg = New-Object System.Net.Mail.MailMessage $from, $to, $subject, $body $msg.isBodyhtml = $true $smtp.send($msg) } writeHtmlHeader $freeSpaceFileName foreach ($server in Get-Content $serverlist) { Add-Content $freeSpaceFileName "<table width='100%'><tbody>" Add-Content $freeSpaceFileName "<tr bgcolor='#CCCCCC'>" Add-Content $freeSpaceFileName "<td width='100%' align='center' colSpan=6><font face='tahoma' color='#003399' size='2'><strong> $server </strong></font></td>" Add-Content $freeSpaceFileName "</tr>" writeTableHeader $freeSpaceFileName $dp = Get-WmiObject win32_logicaldisk -ComputerName $server | Where-Object {$_.drivetype -eq 3} foreach ($item in $dp) { Write-Host $item.DeviceID $item.VolumeName $item.FreeSpace $item.Size writeDiskInfo $freeSpaceFileName $item.DeviceID $item.VolumeName $item.FreeSpace $item.Size } Add-Content $freeSpaceFileName "</table>" } writeHtmlFooter $freeSpaceFileName $date = ( get-date ).ToString('yyyy/MM/dd') sendEmail ejemplo@ejemplo.com ejemplo@ejemplo.com "Disk Space Report - $Date" hub1 $freeSpaceFileName

Anlogamente crear el archivo llamado sl.txt el cual debe contener la lista de host a analizar.

Verificar el archivo de salida:

Ejercicio 1: Probar el script con varios hosts. 6.- Concatenando diferentes instrucciones en un mismo script:

$one = Get-WmiObject -class Win32_Service | Select-Object -property Name,State | Where-Object -filter { $_.Mode -eq 'Auto' -and $_.State -ne 'Running' } | ConvertTo-HTML -Fragment $two = Get-EventLog -LogName Security -newest 100 | ConvertTo-HTML -Fragment $three = Get-Process | ConvertTo-HTML -Fragment $four = Get-WmiObject -class Win32_OperatingSystem | Select-Object -property Caption,BuildNumber,ServicePackMajorVersion, @{n='LastBootTime';e={$_.ConvertToDateTime($_.LastBootUpTime)}} | ConvertTo-HTML Fragment ConvertTo-HTML -Body "$one $two $three $four" -Title "Server Status" | C:\Users\c1\Documents\salidas\Test1.htm Out-File

Ejecutar con privilegios de adminitrador de la siguiente manera: PS C:\Users\c1\Documents\SQLSERVER2\scripts2> .\fragmentos.ps1 Verificar el archivo generado.

7.- Reportes de servicios defectuosos : Realizar el siguiente script Get-WmiObject Class Win32_Service | Select-Object property Name,State | WhereObject Filter { $_.StartMode eq 'Auto' and $_.State ne 'Running' } |ConvertToHTML | Out-File C:\Users\c1\Documents\salidas\Test1.htm Observar la salida. Ejercicio 1: Realizar un script que obtenga el status de todos los servicios relacionados con SQLServer y enviar la salida a un reporte HTML. Ejercicio 2: Realizar un script que analice el servicio de una instancia determinada de SQLServer y si este se encuentra detenido que arranque. Ejercicio 3: Revisar las sentencias get-content y invoke-expression, dadas estas expresiones realizar un script que lea de un archivo de texto las instancias a las cuales conectar y para cada una de ellas agregar el usuario prueba con password prueba de tipo SQL Login.

Potrebbero piacerti anche