PoshCode Archive  Artifact [e1221b5d3a]

Artifact e1221b5d3aa0fcef7703a47a62b66889f14e096e408525ab70df9cdcea63b9c9:

  • File Audit-Script.ps1 — part of check-in [f4bd2d4140] at 2018-06-10 14:24:04 on branch trunk — 507 Change $colShares to $colApps (user: cassibr13 size: 29948)

# encoding: utf-8
# api: powershell
# title: Audit Script
# description: 507 Change $colShares to $colApps
# version: 1.1
# type: script
# author: cassibr13
# license: CC0
# x-poshcode-id: 794
# x-archived: 2017-05-22T04:05:58
# x-published: 2009-01-09T13:52:00
#
# 525 Change $objShare to $objApp and $colShares to $colApps
#
#####################################################
#													#
#    Audit script by Alan Renouf - Virtu-Al         #
#    Blog: http://teckinfo.blogspot.com/            #
#													#
#    Usage: Audit.ps1 'pathtolistofservers'         #
#													#
#    The file is optional and needs to be a 		#
#	 plain text list of computers to be audited 	#
#	 one on each line.								#
#                                                   #
#####################################################

param( [string] $auditlist)

if ($auditlist -eq ""){
	Write-Host "No list specified, using $env:computername"
	$targets = $env:computername
}
else
{
	if ((Test-Path $auditlist) -eq $false)
	{
		Write-Host "Invalid audit path specified: $auditlist"
		exit
	}
	else
	{
		Write-Host "Using Audit list: $auditlist"
		$Targets = Get-Content $auditlist
	}
}

$Date = Get-Date
Foreach ($Target in $Targets){
	Write-Output "Collating Detail for $Target"
	$ComputerSystem = Get-WmiObject -computername $Target Win32_ComputerSystem
	switch ($ComputerSystem.DomainRole){
		0 { $ComputerRole = "Standalone Workstation" }
		1 { $ComputerRole = "Member Workstation" }
		2 { $ComputerRole = "Standalone Server" }
		3 { $ComputerRole = "Member Server" }
		4 { $ComputerRole = "Domain Controller" }
		5 { $ComputerRole = "Domain Controller" }
		default { $ComputerRole = "Information not available" }
	}
	
	$OperatingSystems = Get-WmiObject -computername $Target Win32_OperatingSystem
	$TimeZone = Get-WmiObject -computername $Target Win32_Timezone
	$Keyboards = Get-WmiObject -computername $Target Win32_Keyboard
	$SchedTasks = Get-WmiObject -computername $Target Win32_ScheduledJob
	$BootINI = $OperatingSystems.SystemDrive + "boot.ini"
	$RecoveryOptions = Get-WmiObject -computername $Target Win32_OSRecoveryConfiguration
	
	switch ($ComputerRole){
		"Member Workstation" { $CompType = "Computer Domain"; break }
		"Domain Controller" { $CompType = "Computer Domain"; break }
		"Member Server" { $CompType = "Computer Domain"; break }
		default { $CompType = "Computer Workgroup"; break }
	}

	$LBTime=$OperatingSystems.ConvertToDateTime($OperatingSystems.Lastbootuptime)
	Write-Output "..Hotfix Information"
	$colQuickFixes = Get-WmiObject Win32_QuickFixEngineering
	Write-Output "..Logical Disks"
	$colDisks = Get-WmiObject -ComputerName $Target Win32_LogicalDisk
	Write-Output "..Network Configuration"
	$NICCount = 0
	$colAdapters = Get-WmiObject -ComputerName $Target Win32_NetworkAdapterConfiguration
	Write-Output "..Local Shares"
	$colShares = Get-wmiobject -ComputerName $Target Win32_Share
	Write-Output "..Printers"
	$colInstalledPrinters =  Get-WmiObject -ComputerName $Target Win32_Printer
	Write-Output "..Services"
	$colListOfServices = Get-WmiObject -ComputerName $Target Win32_Service
	Write-Output "..Regional Options"
	$ObjKeyboards = Get-WmiObject -ComputerName $Target Win32_Keyboard
	$keyboardmap = @{
	"00000402" = "BG" 
	"00000404" = "CH" 
	"00000405" = "CZ" 
	"00000406" = "DK" 
	"00000407" = "GR" 
	"00000408" = "GK" 
	"00000409" = "US" 
	"0000040A" = "SP" 
	"0000040B" = "SU" 
	"0000040C" = "FR" 
	"0000040E" = "HU" 
	"0000040F" = "IS" 
	"00000410" = "IT" 
	"00000411" = "JP" 
	"00000412" = "KO" 
	"00000413" = "NL" 
	"00000414" = "NO" 
	"00000415" = "PL" 
	"00000416" = "BR" 
	"00000418" = "RO" 
	"00000419" = "RU" 
	"0000041A" = "YU" 
	"0000041B" = "SL" 
	"0000041C" = "US" 
	"0000041D" = "SV" 
	"0000041F" = "TR" 
	"00000422" = "US" 
	"00000423" = "US" 
	"00000424" = "YU" 
	"00000425" = "ET" 
	"00000426" = "US" 
	"00000427" = "US" 
	"00000804" = "CH" 
	"00000809" = "UK" 
	"0000080A" = "LA" 
	"0000080C" = "BE" 
	"00000813" = "BE" 
	"00000816" = "PO" 
	"00000C0C" = "CF" 
	"00000C1A" = "US" 
	"00001009" = "US" 
	"0000100C" = "SF" 
	"00001809" = "US" 
	"00010402" = "US" 
	"00010405" = "CZ" 
	"00010407" = "GR" 
	"00010408" = "GK" 
	"00010409" = "DV" 
	"0001040A" = "SP" 
	"0001040E" = "HU" 
	"00010410" = "IT" 
	"00010415" = "PL" 
	"00010419" = "RU" 
	"0001041B" = "SL" 
	"0001041F" = "TR" 
	"00010426" = "US" 
	"00010C0C" = "CF" 
	"00010C1A" = "US" 
	"00020408" = "GK" 
	"00020409" = "US" 
	"00030409" = "USL" 
	"00040409" = "USR" 
	"00050408" = "GK" 
	}
	$keyb = $keyboardmap.$($ObjKeyboards.Layout)
	if (!$keyb)
	{ $keyb = "Unknown"
	}
	Write-Output "..Event Log Settings"
	$colLogFiles = Get-WmiObject -ComputerName $Target Win32_NTEventLogFile
	Write-Output "..Event Log Errors"
	$WmidtQueryDT = [System.Management.ManagementDateTimeConverter]::ToDmtfDateTime([DateTime]::Now.AddDays(-14))
	$colLoggedEvents = Get-WmiObject -computer $Target -query ("Select * from Win32_NTLogEvent Where Type='Error' and TimeWritten >='" + $WmidtQueryDT + "'")
	Write-Output "..Event Log Warnings"
	$WmidtQueryDT = [System.Management.ManagementDateTimeConverter]::ToDmtfDateTime([DateTime]::Now.AddDays(-14))
	$colLoggedEvents = Get-WmiObject -computer $Target -query ("Select * from Win32_NTLogEvent Where Type='Warning' and TimeWritten >='" + $WmidtQueryDT + "'")

	$Filename = ".\" + $Target + "_" + $date.Hour + $date.Minute + "_" + $Date.Day + "-" + $Date.Month + "-" + $Date.Year + ".htm"

	$Report = @"
	<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
	<html ES_auditInitialized='false'><head><title>Audit</title>
	<META http-equiv=Content-Type content='text/html; charset=windows-1252'>
	<STYLE type=text/css>	
		DIV .expando {DISPLAY: block; FONT-WEIGHT: normal; FONT-SIZE: 8pt; RIGHT: 10px; COLOR: #ffffff; FONT-FAMILY: Tahoma; POSITION: absolute; TEXT-DECORATION: underline}
		TABLE {TABLE-LAYOUT: fixed; FONT-SIZE: 100%; WIDTH: 100%}
		#objshowhide {PADDING-RIGHT: 10px; FONT-WEIGHT: bold; FONT-SIZE: 8pt; Z-INDEX: 2; CURSOR: hand; COLOR: #000000; MARGIN-RIGHT: 0px; FONT-FAMILY: Tahoma; TEXT-ALIGN: right; TEXT-DECORATION: underline; WORD-WRAP: normal}
		.heading0_expanded {BORDER-RIGHT: #bbbbbb 1px solid; PADDING-RIGHT: 5em; BORDER-TOP: #bbbbbb 1px solid; DISPLAY: block; PADDING-LEFT: 8px; FONT-WEIGHT: bold; FONT-SIZE: 8pt; MARGIN-BOTTOM: -1px; MARGIN-LEFT: 0px; BORDER-LEFT: #bbbbbb 1px solid; WIDTH: 100%; CURSOR: hand; COLOR: #FFFFFF; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #bbbbbb 1px solid; FONT-FAMILY: Tahoma; POSITION: relative; HEIGHT: 2.25em; BACKGROUND-COLOR: #cc0000}
		.heading1 {BORDER-RIGHT: #bbbbbb 1px solid; PADDING-RIGHT: 5em; BORDER-TOP: #bbbbbb 1px solid; DISPLAY: block; PADDING-LEFT: 16px; FONT-WEIGHT: bold; FONT-SIZE: 8pt; MARGIN-BOTTOM: -1px; MARGIN-LEFT: 5px; BORDER-LEFT: #bbbbbb 1px solid; WIDTH: 100%; CURSOR: hand; COLOR: #ffffff; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #bbbbbb 1px solid; FONT-FAMILY: Tahoma; POSITION: relative; HEIGHT: 2.25em; BACKGROUND-COLOR: #7BA7C7}
		.heading2 {BORDER-RIGHT: #bbbbbb 1px solid; PADDING-RIGHT: 5em; BORDER-TOP: #bbbbbb 1px solid; DISPLAY: block; PADDING-LEFT: 16px; FONT-WEIGHT: bold; FONT-SIZE: 8pt; MARGIN-BOTTOM: -1px; MARGIN-LEFT: 5px; BORDER-LEFT: #bbbbbb 1px solid; WIDTH: 100%; CURSOR: hand; COLOR: #ffffff; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #bbbbbb 1px solid; FONT-FAMILY: Tahoma; POSITION: relative; HEIGHT: 2.25em; BACKGROUND-COLOR: #A5A5A5}
		.tableDetail {BORDER-RIGHT: #bbbbbb 1px solid; BORDER-TOP: #bbbbbb 1px solid; DISPLAY: block; PADDING-LEFT: 16px; FONT-SIZE: 8pt;MARGIN-BOTTOM: -1px; PADDING-BOTTOM: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #bbbbbb 1px solid; WIDTH: 100%; COLOR: #000000; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #bbbbbb 1px solid; FONT-FAMILY: Tahoma; POSITION: relative; BACKGROUND-COLOR: #f9f9f9}
		.filler {BORDER-RIGHT: medium none; BORDER-TOP: medium none; DISPLAY: block; BACKGROUND: none transparent scroll repeat 0% 0%; MARGIN-BOTTOM: -1px; FONT: 100%/8px Tahoma; MARGIN-LEFT: 43px; BORDER-LEFT: medium none; COLOR: #ffffff; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: medium none; POSITION: relative}
		.Solidfiller {BORDER-RIGHT: medium none; BORDER-TOP: medium none; DISPLAY: block; BACKGROUND: none transparent scroll repeat 0% 0%; MARGIN-BOTTOM: -1px; FONT: 100%/8px Tahoma; MARGIN-LEFT: 0px; BORDER-LEFT: medium none; COLOR: #000000; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: medium none; POSITION: relative; BACKGROUND-COLOR: #000000}
		td {VERTICAL-ALIGN: TOP; FONT-FAMILY: Tahoma}
		th {VERTICAL-ALIGN: TOP; COLOR: #cc0000; TEXT-ALIGN: left}
	</STYLE>
	<SCRIPT language=vbscript>
		strShowHide = 1
		strShow = "show"
		strHide = "hide"
		strShowAll = "show all"
		strHideAll = "hide all"
	
	Function window_onload()
		If UCase(document.documentElement.getAttribute("ES_auditInitialized")) <> "TRUE" Then
			Set objBody = document.body.all
			For Each obji in objBody
				If IsSectionHeader(obji) Then
					If IsSectionExpandedByDefault(obji) Then
						ShowSection obji
					Else
						HideSection obji
					End If
				End If
			Next
			objshowhide.innerText = strShowAll
			document.documentElement.setAttribute "ES_auditInitialized", "true"
		End If
	End Function
	
	Function IsSectionExpandedByDefault(objHeader)
		IsSectionExpandedByDefault = (Right(objHeader.className, Len("_expanded")) = "_expanded")
	End Function
	
	Function document_onclick()
		Set strsrc = window.event.srcElement
		While (strsrc.className = "sectionTitle" or strsrc.className = "expando")
			Set strsrc = strsrc.parentElement
		Wend
		If Not IsSectionHeader(strsrc) Then Exit Function
		ToggleSection strsrc
		window.event.returnValue = False
	End Function
	
	Sub ToggleSection(objHeader)
		SetSectionState objHeader, "toggle"
	End Sub
	
	Sub SetSectionState(objHeader, strState)
		i = objHeader.sourceIndex
		Set all = objHeader.parentElement.document.all
		While (all(i).className <> "container")
			i = i + 1
		Wend
		Set objContainer = all(i)
		If strState = "toggle" Then
			If objContainer.style.display = "none" Then
				SetSectionState objHeader, "show" 
			Else
				SetSectionState objHeader, "hide" 
			End If
		Else
			Set objExpando = objHeader.children.item(1)
			If strState = "show" Then
				objContainer.style.display = "block" 
				objExpando.innerText = strHide
	
			ElseIf strState = "hide" Then
				objContainer.style.display = "none" 
				objExpando.innerText = strShow
			End If
		End If
	End Sub
	
	Function objshowhide_onClick()
		Set objBody = document.body.all
		Select Case strShowHide
			Case 0
				strShowHide = 1
				objshowhide.innerText = strShowAll
				For Each obji In objBody
					If IsSectionHeader(obji) Then
						HideSection obji
					End If
				Next
			Case 1
				strShowHide = 0
				objshowhide.innerText = strHideAll
				For Each obji In objBody
					If IsSectionHeader(obji) Then
						ShowSection obji
					End If
				Next
		End Select
	End Function
	
	Function IsSectionHeader(obj) : IsSectionHeader = (obj.className = "heading0_expanded") Or (obj.className = "heading1_expanded") Or (obj.className = "heading1") Or (obj.className = "heading2"): End Function
	Sub HideSection(objHeader) : SetSectionState objHeader, "hide" : End Sub
	Sub ShowSection(objHeader) : SetSectionState objHeader, "show": End Sub
	</SCRIPT>
	</HEAD>
	<BODY>
	<p><b><font face="Arial" size="5">$Target Audit<hr size="8" color="#CC0000"></font></b>
	<font face="Arial" size="1"><b><i>Version 1.1 by Alan Renouf (Virtu-Al)</i></b></font><br>
	<font face="Arial" size="1">Report generated on $Date </font></p>
	
	<TABLE cellSpacing=0 cellPadding=0>
		<TBODY>
			<TR>
				<TD>
					<DIV id=objshowhide tabIndex=0><FONT face=Arial></FONT></DIV>
				</TD>
			</TR>
		</TBODY>
	</TABLE>
	<DIV class=heading0_expanded>
		<SPAN class=sectionTitle tabIndex=0>$target Details</SPAN>
		<A class=expando href='#'></A>
	</DIV>
	<DIV class=filler></DIV>
	<DIV class=container>
	<DIV class=heading1>
	<SPAN class=sectionTitle tabIndex=0>General</SPAN>
	<A class=expando href='#'></A>
	</DIV>
	<DIV class=container>
	<DIV class=tableDetail>
	<TABLE>
	<tr>
	<th width='25%'><b>Computer Name</b></font></th>
	<td width='75%'>$($ComputerSystem.Name)</font></td>
	</tr>
	<tr>
	<th width='25%'><b>Computer Role</b></font></th>
	<td width='75%'> $ComputerRole </font></td>
	</tr>
	<tr>
	<th width='25%'><b>$CompType</b></font></th>	
	<td width='75%'>$($ComputerSystem.Domain)</font></td>
	</tr>
	<tr>
	<th width='25%'><b>Operating System</b></font></th>
	<td width='75%'>$($OperatingSystems.Caption)</font></td>
	</tr>
	<tr>
	<th width='25%'><b>Service Pack</b></font></th>
	<td width='75%'>$($OperatingSystems.CSDVersion)</font></td>
	</tr>
	<tr>
		<th width='25%'><b>System Root</b></font></th>
		<td width='75%'>$($OperatingSystems.SystemDrive)</font></td>
	</tr>
	<tr>
		<th width='25%'><b>Manufacturer</b></font></th>
		<td width='75%'>$($ComputerSystem.Manufacturer)</font></td>
	 				</tr>
	<tr>
		<th width='25%'><b>Model</b></font></th>
		<td width='75%'>$($ComputerSystem.Model)</font></td>
	 				</tr>
	<tr>
		<th width='25%'><b>Number of Processors</b></font></th>
		<td width='75%'>$($ComputerSystem.NumberOfProcessors)</font></td>
	 				</tr>
	<tr>
		<th width='25%'><b>Memory</b></font></th>
		<td width='75%'>$($ComputerSystem.TotalPhysicalMemory)</font></td>
	 				</tr>
	<tr>
		<th width='25%'><b>Registered User</b></font></th>
		<td width='75%'>$($ComputerSystem.PrimaryOwnerName)</font></td>
	 				</tr>
	 				<tr>
		<th width='25%'><b>Registered Organisation</b></font></th>
		<td width='75%'>$($OperatingSystems.Organization)</font></td>
	</tr>
	  				<tr>
	   				<th width='25%'><b>Last System Boot</b></font></th>
		<td width='75%'>$LBTime</font></td>
	</tr>
				</TABLE>
			</DIV>
		</DIV>
		<DIV class=filler></DIV>
	<DIV class=container>
	<DIV class=heading1>
	<SPAN class=sectionTitle tabIndex=0>HotFixes</SPAN>
	<A class=expando href='#'></A>
	</DIV>
	<DIV class=container>
	<DIV class=tableDetail>
	<TABLE>
	<tr>
	<th width='25%'><b>HotFix Number</b></font></th>
	<th width='75%'><b>Description</b></font></th>
	</tr>
"@

	ForEach ($objQuickFix in $colQuickFixes)
	{
		if ($objQuickFix.HotFixID -ne "File 1")
		{
			$Report+= "				<tr>"
			$Report+= "					<td width='25%'>$($objQuickFix.HotFixID)</font></td>"
			$Report+= "					<td width='75%'>$($objQuickFix.Description)</font></td>"
			$Report+= "				</tr>"
		}
	}
$Report+= @"
	</TABLE>
	</DIV>
	</DIV>
	</DIV>
	<DIV class=filler></DIV>
		<DIV class=container>
			<DIV class=heading1>
				<SPAN class=sectionTitle tabIndex=0>Logical Disk Configuration</SPAN>
				<A class=expando href='#'></A>
			</DIV>
			<DIV class=container>
				<DIV class=tableDetail>
					<TABLE>
						<tr>
	  						<th width='15%'><b>Drive Letter</b></font></th>
	  						<th width='20%'><b>Label</b></font></th>
	  						<th width='20%'><b>File System</b></font></th>
	  						<th width='15%'><b>Disk Size</b></font></th>
	  						<th width='15%'><b>Disk Free Space</b></font></th>
	  						<th width='15%'><b>% Free Space</b></font></th>
	  					</tr>
"@

	Foreach ($objDisk in $colDisks)
	{
		if ($objDisk.DriveType -eq 3)
		{
			$Report+=  "					<tr>"
			$Report+=  "						<td width='15%'>$($objDisk.DeviceID)</font></td>"
			$Report+=  " 						<td width='20%'>$($objDisk.VolumeName)</font></td>"
			$Report+=  " 						<td width='20%'>$($objDisk.FileSystem)</font></td>"
			$disksize = [math]::round(($objDisk.size / 1048576))
			$Report+=  " 						<td width='15%'>$disksize MB</font></td>"
			$freespace = [math]::round(($objDisk.FreeSpace / 1048576))
			$Report+=  " 						<td width='15%'>$Freespace MB</font></td>"
			$percFreespace=[math]::round(((($objDisk.FreeSpace / 1048576)/($objDisk.Size / 1048676)) * 100),0)
			$Report+=  " 						<td width='15%'>$percFreespace%</font></td>"
			$Report+=  "					</tr>"
		}
	}
$Report+= @"
	</TABLE>
	</DIV>
	</DIV>
	</DIV>
	<DIV class=filler></DIV>

	
		<DIV class=container>
			<DIV class=heading1>
				<SPAN class=sectionTitle tabIndex=0>NIC Configuration</SPAN>
				<A class=expando href='#'></A>
			</DIV>
			<DIV class=container>
				<DIV class=tableDetail>
					<TABLE>
"@
	Foreach ($objAdapter in $colAdapters)
	{
		if ($objAdapter.IPEnabled -eq "True")
		{
			$NICCount = $NICCount + 1
			If ($NICCount -gt 1)
			{
				$Report+=  "			</TABLE>"
				$Report+=  "				<DIV class=Solidfiller></DIV>"
				$Report+=  "			<TABLE>"
			}
		$Report+=  "  					<tr>"
		$Report+=  "	 					<th width='25%'><b>Description</b></font></th>"
		$Report+=  "    					<td width='75%'>$($objAdapter.Description)</font></td>"
		$Report+=  "  					</tr>"
		$Report+=  "  					<tr>"
		$Report+=  "						<th width='25%'><b>Physical address</b></font></th>"
		$Report+=  "						<td width='75%'>$($objAdapter.MACaddress)</font></td>"
		$Report+=  " 					</tr>"
		If ($objAdapter.IPAddress -ne $Null)
		{
			$Report+=  "					<tr>"
			$Report+=  "						<th width='25%'><b>IP Address / Subnet Mask</b></font></th>"
			$Report+=  "						<td width='75%'>$($objAdapter.IPAddress)/$($objAdapter.IPSubnet)</font></td>"
			$Report+=  "					</tr>"
			$Report+=  "					</tr>"
			$Report+=  "					<tr>"
			$Report+=  "						<th width='25%'><b>Default Gateway</b></font></th>"
			$Report+=  "						<td width='75%'>$($objAdapter.DefaultIPGateway)</font></td>"
			$Report+=  "					</tr>"
		
		}
		$Report+=  "					<tr>"
		$Report+=  "						<th width='25%'><b>DHCP enabled</b></font></th>"
		If ($objAdapter.DHCPEnabled -eq "True")
		{
			$Report+=  "						<td width='75%'>Yes</font></td>"
		}
		Else
		{
			$Report+=  "						<td width='75%'>No</font></td>"
		}
		$Report+=  "					</tr>"
		$Report+=  "					<tr>"
		$Report+=  "							<th width='25%'><b>DNS Servers</b></font></th>"
		$Report+=  "							<td width='75%'>"
		If ($objAdapter.DNSServerSearchOrder -ne $Null)
		{
			$Report+=  " $($objAdapter.DNSServerSearchOrder) "
		}
		$Report+=  "					</tr>"
		$Report+=  "					<tr>"
		$Report+=  "						<th width='25%'><b>Primary WINS Server</b></font></th>"
		$Report+=  "						<td width='75%'>$($objAdapter.WINSPrimaryServer)</font></td>"
		$Report+=  "					</tr>"
		$Report+=  "					<tr>"
		$Report+=  "						<th width='25%'><b>Secondary WINS Server</b></font></th>"
		$Report+=  "						<td width='75%'>$($objAdapter.WINSSecondaryServer)</font></td>"
		$Report+=  "					</tr>"
		$NICCount = $NICCount + 1
		}
	}
$Report+= @"
					</TABLE>
				</DIV>
			</DIV>
		</DIV>
		<DIV class=filler></DIV>
"@	
	if ((get-wmiobject -namespace "root/cimv2" -list) | ? {$_.name -match "Win32_Product"})
	{
		Write-Output "..Installed Software"
		$colShares = get-wmiobject -ComputerName $Target Win32_Product | select Name,Version,Vendor,InstallDate
		
$Report+= @"
	<DIV class=container>
				<DIV class=heading1>
					<SPAN class=sectionTitle tabIndex=0>Software</SPAN>
					<A class=expando href='#'></A>
				</DIV>
				<DIV class=container>
					<DIV class=tableDetail>
						<TABLE>
							<tr>
		  						<th width='25%'><b>Name</b></font></th>
		  						<th width='25%'><b>Version</b></font></th>
		  						<th width='25%'><b>Vendor</b></font></th>
		  						<th width='25%'><b>Install Date</b></font></th>
							</tr>
"@
		Foreach ($objShare in $colShares)
		{
			$Report+=  "					<tr>"
			$Report+=  "						<td width='50%'>$($objShare.Name)</font></td>"
			$Report+=  "						<td width='20%'>$($objShare.Version)</font></td>"
			$Report+=  "						<td width='15%'>$($objShare.Vendor)</font></td>"
			$Report+=  "						<td width='15%'>$($objShare.InstallDate)</font></td>"
			$Report+=  "					</tr>"
		}
		$Report+=  "				</TABLE>"
		$Report+=  "			</DIV>"
		$Report+=  "		</DIV>"
		$Report+=  "	</DIV>"
		$Report+=  "	<DIV class=filler></DIV>"		
	}
$Report+= @"
		<DIV class=container>
			<DIV class=heading1>
				<SPAN class=sectionTitle tabIndex=0>Local Shares</SPAN>
				<A class=expando href='#'></A>
			</DIV>
			<DIV class=container>
				<DIV class=tableDetail>
					<TABLE>
						<tr>
	  						<th width='25%'><b>Share</b></font></th>
	  						<th width='25%'><b>Path</b></font></th>
	  						<th width='50%'><b>Comment</b></font></th>
						</tr>
"@
Foreach ($objShare in $colShares)
	{
		$Report+=  "					<tr>"
		$Report+=  "						<td width='25%'>$($objShare.Name)</font></td>"
		$Report+=  "						<td width='25%'>$($objShare.Path)</font></td>"
		$Report+=  "						<td width='50%'>$($objShare.Caption)</font></td>"
		$Report+=  "					</tr>"
	}	
$Report+= @"
					</TABLE>
				</DIV>
			</DIV>
		</DIV>
		<DIV class=filler></DIV>
	
		<DIV class=container>
			<DIV class=heading1>
				<SPAN class=sectionTitle tabIndex=0>Printers</SPAN>
				<A class=expando href='#'></A>
			</DIV>
			<DIV class=container>
				<DIV class=tableDetail>
					<TABLE>
						<tr>
							<th width='25%'><b>Printer</b></font></th>
							<th width='25%'><b>Location</b></font></th>
							<th width='25%'><b>Default Printer</b></font></th>
							<th width='25%'><b>Portname</b></font></th>
						</tr>
"@
	Foreach ($objPrinter in $colInstalledPrinters)
	{
		If ($objPrinter.Name -eq "")
		{
			$Report+=  "					<tr>"
			$Report+=  "						<td width='100%'>No Printers Installed</font></td>"
		}
		Else
		{
			$Report+=  "					<tr>"
			$Report+=  "						<td width='25%'>$($objPrinter.Name)</font></td>"
			$Report+=  "						<td width='25%'>$($objPrinter.Location)</font></td>"
			if ($objPrinter.Default -eq "True")
			{
				$Report+=  "						<td width='25%'>Yes</font></td>"
			}
			Else
			{
				$Report+=  "						<td width='25%'>No</font></td>"
			}
			$Report+=  "						<td width='25%'>$($objPrinter.Portname)</font></td>"
		}
		$Report+=  "					</tr>"
	}
$Report+= @"
				</TABLE>
				</DIV>
			</DIV>
		</DIV>
		<DIV class=filler></DIV>
		<DIV class=container>
			<DIV class=heading1>
				<SPAN class=sectionTitle tabIndex=0>Services</SPAN>
				<A class=expando href='#'></A>
			</DIV>
			<DIV class=container>
				<DIV class=tableDetail>
					<TABLE>
	  					<tr>
		 					<th width='20%'><b>Name</b></font></th>
		 					<th width='20%'><b>Account</b></font></th>
		 					<th width='20%'><b>Start Mode</b></font></th>
		 					<th width='20%'><b>State</b></font></th>
		 					<th width='20%'><b>Expected State</b></font></th>
	  					</tr>
"@

	Foreach ($objService in $colListOfServices)
	{
		$Report+=  " 					<tr>"
		$Report+=  "	 					<td width='20%'>$($objService.Caption)</font></td>"
		$Report+=  "	 					<td width='20%'>$($objService.Startname)</font></td>"
		$Report+=  "	 					<td width='20%'>$($objService.StartMode)</font></td>"
		If ($objService.StartMode -eq "Auto")
		{
			if ($objService.State -eq "Stopped")
			{
				$Report+=  "						<td width='20%'><font color='#FF0000'>$($objService.State)</font></td>"
				$Report+=  "						<td width='25%'><font face='Wingdings'color='#FF0000'>û</font></td>"
			}
		}
		If ($objService.StartMode -eq "Auto")
		{
			if ($objService.State -eq "Running")
			{
				$Report+=  "						<td width='20%'><font color='#009900'>$($objService.State)</font></td>"
				$Report+=  "						<td width='20%'><font face='Wingdings'color='#009900'>ü</font></td>"
			}
		}
		If ($objService.StartMode -eq "Disabled")
		{
			If ($objService.State -eq "Running")
			{
				$Report+=  "						<td width='20%'><font color='#FF0000'>$($objService.State)</font></td>"
				$Report+=  "						<td width='25%'><font face='Wingdings'color='#FF0000'>û</font></td>"
			}
		}
		If ($objService.StartMode -eq "Disabled")
		{
			if ($objService.State -eq "Stopped")
			{
				$Report+=  "						<td width='20%'><font color='#009900'>$($objService.State)</font></td>"
				$Report+=  "						<td width='20%'><font face='Wingdings'color='#009900'>ü</font></td>"
			}
		}
		If ($objService.StartMode -eq "Manual")
		{
			$Report+=  "						<td width='20%'><font color='#009900'>$($objService.State)</font></td>"
			$Report+=  "						<td width='20%'><font face='Wingdings'color='#009900'>ü</font></td>"
		}
		If ($objService.State -eq "Paused")
		{
			$Report+=  "						<td width='20%'><font color='#FF9933'>$($objService.State)</font></td>"
			$Report+=  "						<td width='20%'><font face='Wingdings'color='#009900'>ü</font></td>"
		}
		$Report+=  "  					</tr>"
	}	
$Report+= @"
					</TABLE>
				</DIV>
			</DIV>
		</DIV>
		<DIV class=filler></DIV>
		<DIV class=container>
			<DIV class=heading1>
				<SPAN class=sectionTitle tabIndex=0>Regional Settings</SPAN>
				<A class=expando href='#'></A>
			</DIV>
			<DIV class=container>
				<DIV class=tableDetail>
					<TABLE>
	 					<tr>
		 					<th width='25%'><b>Time Zone</b></font></th>
		 					<td width='75%'>$($TimeZone.Description)</font></td>
	 					</tr>
	 					<tr>
		 					<th width='25%'><b>Country Code</b></font></th>
		 					<td width='75%'>$($OperatingSystems.Countrycode)</font></td>
	 					</tr>
	 					<tr>
			 				<th width='25%'><b>Locale</b></font></th>
			 				<td width='75%'>$($OperatingSystems.Locale)</font></td>
	 					</tr>
	 					<tr>
			 				<th width='25%'><b>Operating System Language</b></font></th>
			 				<td width='75%'>$($OperatingSystems.OSLanguage)</font></td>
	 					</tr>
	 					<tr>
		 				<th width='25%'><b>Keyboard Layout</b></font></th>
			 				<td width='75%'>$keyb</font></td>
	 					</tr>
					</TABLE>
				</div>
			</DIV>
		</DIV>
		<DIV class=filler></DIV>
		<DIV class=container>
			<DIV class=heading1>
				<SPAN class=sectionTitle tabIndex=0>Event Logs</SPAN>
				<A class=expando href='#'></A>
			</DIV>
			<DIV class=container>
				<DIV class=tableDetail>
		<DIV class=container>
			<DIV class=heading2>
				<SPAN class=sectionTitle tabIndex=0>Event Log Settings</SPAN>
				<A class=expando href='#'></A>
			</DIV>
			<DIV class=container>
				<DIV class=tableDetail>
					<TABLE>
	  					<tr>
	    					<th width='25%'><b>Log Name</b></font></th>
	    					<th width='25%'><b>Overwrite Outdated Records</b></font></th>
	  					  	<th width='25%'><b>Maximum Size</b></font></th>
	 					   	<th width='25%'><b>Current Size</b></font></th>
	 					</tr>
"@
	ForEach ($objLogFile in $colLogfiles)
	{
		$Report+=  " 					<tr>"
		$Report+=  "	 					<td width='25%'>$($objLogFile.LogFileName)</font></td>"
		If ($objLogfile.OverWriteOutdated -lt 0)
		{
			$Report+=  "	 					<td width='25%'>Never</font></td>"
		}
		if ($objLogFile.OverWriteOutdated -eq 0)
		{
			$Report+=  "	 					<td width='25%'>As needed</font></td>"
		}
		Else
		{
			$Report+=  "	 					<td width='25%'>After $($objLogFile.OverWriteOutdated) days</font></td>"
		}
		$MaxFileSize = ($objLogfile.MaxFileSize) / 1024
		$FileSize = ($objLogfile.FileSize) / 1024
		
		$Report+=  "	 					<td width='25%'>$MaxFileSize KB</font></td>"
		$Report+=  "	 					<td width='25%'>$FileSize KB</font></td>"
		$Report+=  "  					</tr>"
	}
$Report+= @"
					</TABLE>
				</DIV>
			</DIV>
		</DIV>
		<DIV class=filler></DIV>
		<DIV class=container>
			<DIV class=heading2>
				<SPAN class=sectionTitle tabIndex=0>ERROR Entries</SPAN>
				<A class=expando href='#'></A>
			</DIV>
			<DIV class=container>
				<DIV class=tableDetail>
					<TABLE>
	  					<tr>
	    					<th width='10%'><b>Event Code</b></font></th>
	   					<th width='10%'><b>Source Name</b></font></th>
	    					<th width='15%'><b>Time</b></font></th>
	    					<th width='10%'><b>Log</b></font></th>
	    					<th width='55%'><b>Message</b></font></th>
	  					</tr>
"@
	ForEach ($objEvent in $colLoggedEvents)
	{
		$dtmEventDate = $ObjEvent.ConvertToDateTime($objEvent.TimeWritten)
		$Report+=  " 					<tr>"
		$Report+=  "	 					<td width='10%'>$($objEvent.EventCode)</font></td>"
		$Report+=  "	 					<td width='10%'>$($objEvent.SourceName)</font></td>"
		$Report+=  "	 					<td width='15%'>$dtmEventDate</font></td>"
		$Report+=  "	 					<td width='10%'>$($objEvent.LogFile)</font></td>"
		$Report+=  "	 					<td width='55%'>$($objEvent.Message)</font></td>"
		$Report+=  "  					</tr>"
	}
$Report+= @"
					</TABLE>
				</DIV>
			</DIV>
		</DIV>
		<DIV class=filler></DIV>
		<DIV class=container>
			<DIV class=heading2>
				<SPAN class=sectionTitle tabIndex=0>WARNING Entries</SPAN>
				<A class=expando href='#'></A>
			</DIV>
			<DIV class=container>
				<DIV class=tableDetail>
					<TABLE>
	  					<tr>
	    					<th width='10%'><b>Event Code</b></font></th>
	   					<th width='10%'><b>Source Name</b></font></th>
	    					<th width='15%'><b>Time</b></font></th>
	    					<th width='10%'><b>Log</b></font></th>
	    					<th width='55%'><b>Message</b></font></th>
	  					</tr>
"@
	ForEach ($objEvent in $colLoggedEvents)
	{
		$StrWMIDate = $ObjEvent.ConvertToDateTime($objEvent.TimeWritten)
		$Report+=  " 					<tr>"
		$Report+=  "	 					<td width='10%'>$($objEvent.EventCode)</font></td>"
		$Report+=  "	 					<td width='10%'>$($objEvent.SourceName)</font></td>"
		$Report+=  "	 					<td width='15%'>$($dtmEventDate)</font></td>"
		$Report+=  "	 					<td width='10%'>$($objEvent.LogFile)</font></td>"
		$Report+=  "	 					<td width='55%'>$($objEvent.Message)</font></td>"
		$Report+=  "  					</tr>"
	}
$Report+= @"
					</TABLE>
				</DIV>
			</DIV>
		</DIV>
		<DIV class=filler></DIV>
				</DIV>
			</DIV>
		</DIV>
	
		<DIV class=filler></DIV>
	</body>
	</html>
"@
$Report | out-file -encoding ASCII -filepath $Filename
}