PowerShell to crete HTML report

hchabria
hchabria used Ask the Experts™
on
I am using the attached PowerShell scripts (XeAapp_Check.ps1, Ctx_functions.ps1) to export the XenApp 4.5 Zone details to HTML file as a report. On executing the script for the first time I am getting the desired result but unfortunately everytime I execute the script, the zone details gets appended to that report.

Here is my server details:

Farm Name: MyFarm

Server Name              zone Name
==========               ==========
XEN-1                           192.168.1.0
XEN-2                           TEST ZONE

Please assist me to get the correct result so that I can get the desired output by correctly modifying that script.
Ctx-Functions.txt
XenApp-Check.txt
XenApp-Check--Farm-Name--MyFarm-.mht
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Meir RivkinFull stack Software Engineer

Commented:
the problem is that its appended to the html result instead of generating fresh one?
can u describe expected result?

Author

Commented:
Yes, that is the exact problem. Can you please guide me to rectify this?

Author

Commented:
Please find the attached expected result.
XenApp-Check--Farm-Name--MyFarm-.mht
Success in ‘20 With a Profitable Pricing Strategy

Do you wonder if your IT business is truly profitable or if you should raise your prices? Learn how to calculate your overhead burden using our free interactive tool and use it to determine the right price for your IT services. Start calculating Now!

Meir RivkinFull stack Software Engineer

Commented:
in XenApp-Check.txt script just before you call out-file to save as .htm (scroll all the way down the script), you wanna delete them if already exists:

if(Test-Path  $FileXenApp_Check){
remove-item $FileXenApp_Check
}

if(Test-Path  $FileXenApp_CheckBackup){
remove-item  $FileXenApp_CheckBackup
	
}

$XenAppReport | out-file -encoding ASCII -filepath $FileXenApp_Check
$XenAppReport | out-file -encoding ASCII -filepath $FileXenApp_CheckBackup
	
echo "DONE"

Open in new window

Meir RivkinFull stack Software Engineer

Commented:
i saw that you hard coded:
$Check_OutputEnteteZone = "TRUE"

when u generate the html, you iterate the zones:
If ($Check_OutputEnteteZone -eq "TRUE")
{
Foreach ($Zones in $Zones) {

so the if statement is redundant (cause its always true).

Author

Commented:
I've added the code you provided but still having the same result (please see the attached file). The report gets deleted but when recreated, the restult gets appended in the report.

I am not that much expert on PowerShell. Can you please guide me what should I do in case if I set $Check_OutputEnteteZone = "TRUE".

It would be very helpful of me if you could provide me the rectified code.
XenApp-Check--Farm-Name--MyFarm-.mht

Author

Commented:
Event I've deleted the "If ($Check_OutputEnteteZone -eq "TRUE")" condition and then executed the script, but getting same result.

#Farm Name
$XenAppReport = Get-CustomHTML "Farm Name : $Farm"
$XenAppReport += Get-CustomHeaderClose

#Write-CustomOut "..Adding Zones Details Info to the report"
	Foreach ($Zones in $Zones) {
	$OutputEnteteZone2 += @($Zones | Select @{N="Zone Name";E={if($Zones.ZoneName -eq $Null){"Error"}else{$Zones.ZoneName}}}, @{N="Zone Data Collector";E={if($Zones.DataCollector -eq $Null){"Error"}else{$Zones.DataCollector}}}) }
	$XenAppReport += Get-CustomHeader ("Zone(s) Details : "+($Zones_Count))
	$XenAppReport += Get-HTMLTable $OutputEnteteZone2
	$XenAppReport += Get-CustomHeaderClose
	

$Date = Get-Date -Format "yyyyMMddHH"
$FileXenApp_Check = $Path + $FileName + ".htm"
$FileXenApp_CheckBackup = $PathBackup + $FileName + "_" + $date + ".htm"


if(Test-Path  $FileXenApp_Check){
remove-item $FileXenApp_Check
}

if(Test-Path  $FileXenApp_CheckBackup){
remove-item  $FileXenApp_CheckBackup
	
}

$XenAppReport | out-file -encoding ASCII -filepath $FileXenApp_Check
$XenAppReport | out-file -encoding ASCII -filepath $FileXenApp_CheckBackup
	
echo "DONE"

Open in new window

Author

Commented:
What I have seen that, if I change the following variable name everytime then, I am getting the desired result.

$OutputEnteteZone

Also, I there is any way to delete the value of that variable then I think the result will come but I don't have any clue about how to do this.
Meir RivkinFull stack Software Engineer

Commented:
change this:
If ($Check_OutputEnteteZone -eq "TRUE")
{
	Foreach ($Zones in $Zones) {
	$OutputEnteteZone1 += @($Zones | Select @{N="Zone Name";E={if($Zones.ZoneName -eq $Null){"Error"}else{$Zones.ZoneName}}}, @{N="Zone Data Collector";E={if($Zones.DataCollector -eq $Null){"Error"}else{$Zones.DataCollector}}}) }
	$XenAppReport += Get-CustomHeader ("Zone(s) Details : "+($Zones_Count))
	$XenAppReport += Get-HTMLTable $OutputEnteteZone1
	$XenAppReport += Get-CustomHeaderClose
}

Open in new window


to this:
	$OutputEnteteZone1 += @($Zones | Select @{N="Zone Name";E={if($Zones.ZoneName -eq $Null){"Error"}else{$Zones.ZoneName}}}, @{N="Zone Data Collector";E={if($Zones.DataCollector -eq $Null){"Error"}else{$Zones.DataCollector}}}) 
	$XenAppReport += Get-CustomHeader ("Zone(s) Details : "+($Zones_Count))
	$XenAppReport += Get-HTMLTable $OutputEnteteZone1
	$XenAppReport += Get-CustomHeaderClose

Open in new window


--> remove if stetment and foreach stetment.
the if is redundant and the foreach already takes place when you call:
$OutputEnteteZone1 += @($Zones | ....
Meir RivkinFull stack Software Engineer

Commented:
btw, can u debug your script?

Author

Commented:
Please find below the code as you instructed and the attached result. The result is getting appended everytime and the ouput is producing an error as $Zones.ZoneName value is producing NULL value.

$XenAppReport = Get-CustomHTML "Farm Name : $Farm"
$XenAppReport += Get-CustomHeaderClose

$OutputEnteteZone1 += @($Zones | Select @{N="Zone Name";E={if($Zones.ZoneName -eq $Null){"Error"}else{$Zones.ZoneName}}}, @{N="Zone Data Collector";E={if($Zones.DataCollector -eq $Null){"Error"}else{$Zones.DataCollector}}}) 
$XenAppReport += Get-CustomHeader ("Zone(s) Details : "+($Zones_Count))
$XenAppReport += Get-HTMLTable $OutputEnteteZone1
$XenAppReport += Get-CustomHeaderClose

$Date = Get-Date -Format "yyyyMMddHH"
$FileXenApp_Check = $Path + $FileName + ".htm"
$FileXenApp_CheckBackup = $PathBackup + $FileName + "_" + $date + ".htm"

if(Test-Path  $FileXenApp_Check){
remove-item $FileXenApp_Check
}
if(Test-Path  $FileXenApp_CheckBackup){
remove-item  $FileXenApp_CheckBackup
}

$XenAppReport | out-file -encoding ASCII -filepath $FileXenApp_Check
$XenAppReport | out-file -encoding ASCII -filepath $FileXenApp_CheckBackup
	
echo "DONE"

Open in new window

Report.PNG
Meir RivkinFull stack Software Engineer

Commented:
the problem is not appending the file but the $zones creation.
there's a function called GET-XAZone i assume which returns aggregated $Zones.
i couldn't;t find source of this function in the files you've attached.
please check $Zones.Count when code is back from GET-XAZone.
i guess that from second run you get aggregated result.
but again do not have the source of GET-XAZone.
Meir RivkinFull stack Software Engineer

Commented:
btw, you can remove the test-path code i've suggested before cause its not the issue.

Author

Commented:
I posted the above result after debugging my script only.
IT Infrastructure Architect
Commented:
Did you try setting $OutputEnteteZone1 to $null
$OutputEnteteZone1 = $null
If ($Check_OutputEnteteZone -eq "TRUE")
{
	
	Foreach ($Zones in $Zones) {
	$OutputEnteteZone1 += @($Zones | Select @{N="Zone Name";E={if($Zones.ZoneName -eq $Null){"Error"}else{$Zones.ZoneName}}}, @{N="Zone Data Collector";E={if($Zones.DataCollector -eq $Null){"Error"}else{$Zones.DataCollector}}}) }
	$XenAppReport += Get-CustomHeader ("Zone(s) Details : "+($Zones_Count))
	$XenAppReport += Get-HTMLTable $OutputEnteteZone1
	$XenAppReport += Get-CustomHeaderClose
	
}

Open in new window

Author

Commented:
Excellent Subsun. It's working perfectly now after setting $OutputEnteteZone1 to $null.

Thank you so much.

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial