Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PowerShell] Html table uit verschillende arrays

Pagina: 1
Acties:

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 23:37
Ik ben een script aan het bouwen dat verschillende stukken informatie vergaard over een reeks servers. Dit wil ik vervolgens als html mailtje versturen als rapport.

Om het enigszins modulair en generiek te houden heb ik ervoor gekozen om per stuk informatie een functie te bouwen die de info ophaalt. Om te beginnen heb ik nu een functie die de serverlijst opstelt en een functie die de load per server weergeeft.

Nu wil ik deze 2 arrays combineren in een html tabelletje. Omdat dit een stuk leesbaarder is (word ook managementvoer). Met name als ik straks het script ga uitbreiden. Nu is er de "ConvertTo-HTML" cmdlet, maar die doet dit maar voor 1 commando.

Ik ben dus op zoek naar een manier om de verschillende arrays te combineren in een html tabel. Maar google geeft mij alleen maar methoden om 1 commando in html te weergeven.

Edit: nope, me idiot. Ik ga het toch helemaal anders doen. Morgen ga ik het even uitdenken en hier neerzetten.

[ Voor 6% gewijzigd door Craven op 19-02-2013 18:38 ]


  • Craven
  • Registratie: Februari 2007
  • Laatst online: 23:37
Ok, poging 2.

Bij nader inzien is dit absoluut onhandig om per stukje informatie alles op te vragen. Veel logischer is om een lijst met servers op te stellen. En vervolgens met een simpele foreach de informatie per server op te halen.

Ietsjes anders maar dan blijf ik nog steeds met hetzelfde probleem zitten denk ik. Ik doe een aantal metingen per server en die wil ik in een html tabel weergeven.

Verwijderd

Waarom pak je niet gewoon een stuk monitoring software?

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 23:37
Kost geld? Ik hoef ook geen bergen informatie. Het enige waar het me in eerste instantie om gaat is een report met een lijst van servers waarin staat op welke rds logon mode hij staat (drain, disabled of enabled). Omdat ik dit ding ooit nog wel is wil uitbreiden ben ik hem nu "netjes" aan het bouwen.

Verwijderd

Dan pak je toch munin? Dat is gratis, en je kan je eigen plugins ervoor schrijven.

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 23:37
Dat is niet helemaal waar ik naar zoek. Ik zit als externe bij een grote multinational. Dit soort dingen fiets ik daar sowieso niet naar binnen. Zelfs als ik ze zover krijg zit ik alsnog met een compleet product wat ik moet implementeren en allerlei externe resources voor nodig heb. Dat moet ik allemaal aanvragen en gaat hem echt niet worden.

Ik wil alleen een script dat een klein stukje reporting doet over een specifieke setting van de server. Ik waardeer het dat jullie meedenken naar alternatieve oplossingen maar ik wil het echt specifiek via een powershell script regelen. Het is ook een stukje standaardisatie dat we dit in een powershell script willen overigens.

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 23:37
Heeft iemand hiervoor nog input?

Ik zit met het probleem dat ik meerdere arrays wil samenvoegen tot een tabel. Die tabel kan ik dan vrij simpel omzetten met de ConvertTo-HTML cmdlet.

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Wat is je probleem?

Want een tabel is enkel creatief knutselen met for-each als je jouw aanpak volgt. En for-each gebruik je schijnbaar al.

Dus waar loop je vast?

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 23:37
Ik heb momenteel het volgende.
In deze code haal ik mijn serverlijst op. Vervolgens ga met de foreach per server een stuk informatie ophalen. Deze foreach wil ik straks nog uitbreiden met andere zaken. Er komen dus nog meer arrays bij die in een tabel gezet moeten worden.
code:
1
2
3
4
5
6
7
#Get serverlist and sort it
$ServerList = (get-xaserver | Select "ServerName" | Sort "ServerName")

#Retrieve information per server
foreach ($Server.servername in $ServerList) {
[Array]$ServerLoad += (Get-XAServerLoad $Server.servername | Select "Load")
}


Een write-host op $ServerList en $ServerLoad geeft vervolgens netjes
code:
1
2
@{ServerName=W4901} @{ServerName=W4902} @{ServerName=W4903} @{ServerName=W4904} @{ServerName=W4906} @{ServerName=W4907} @{ServerName=W4908} @{ServerName=W4941} @{ServerName=W4942} @{ServerName=W4943} @{ServerName=W4945} @{ServerName=W4948} @{ServerName=W4949} @{ServerName=W4951}
@{Load=400} @{Load=0} @{Load=400} @{Load=0} @{Load=0} @{Load=0} @{Load=100} @{Load=0} @{Load=0} @{Load=0} @{Load=0} @{Load=0} @{Load=0} @{Load=0}


Vervolgens wil ik van deze arrays (worden er nog meer) een tabel maken. En hier loop ik vast. Ik zat in eerste instantie aan de onderstaande code te denken.
code:
1
2
3
[Array]$Report = $Null
$Report = new-object PSObject -Noteproperty ServerList $ServerList
$Report += new-object PSObject -NoteProperty ServerLoad $ServerLoad

Dit leid tot de volgende foutmelding:
code:
1
New-Object : A parameter cannot be found that matches parameter name 'Noteproperty'.


Hierna wil ik nog met convertto-html aan de gang om het daarna netjes te formatten in powershell. Als laatste wil ik het nog mailen.

Verwijderd

Ik heb zelf een script wat vergelijkingen maakt tussen 2 tabellen, en netjes geformatte HTML output als er wijzigingen zijn tussen die 2 tabellen.

De HTML genereer ik gewoon handmatig in plaats van met convertTo-html. Een eerdere versie van de tool maakte een tabel op waar vervolgens convertTo-html op werd losgelaten, maar dat werkt niet ideaal. De data is lastig te formaten. Zeker als je in mijn geval kleurtjes wilt bij bepaalde waarden.

Maar als je een custom tabel wilt in powershell, dan is dat toch makkelijk op te lossen? Eerste google hit: http://technet.microsoft.com/en-us/library/ee692794.aspx.

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 23:37
Ik zat eigenlijk op een ander spoor. Via dit artikel: http://blogs.msdn.com/b/p...t-property-hashtable.aspx

Heb ik het nou voor elkaar gekregen dat mijn script het volgende doet:
code:
1
2
3
4
5
$Report

ServerList                                                     ServerLoad                                                    
----------                                                     ----------                                                    
{"W4901", "W4902", "W4903", "W4904"...}                        {"W4901", "W4902", "W4903", "W4904"...}


Maar write-host doet weer dit:
code:
1
2
write-host $Report
@{ServerList=System.Object[]; ServerLoad=System.Object[]}


Wat doe ik hier dan weer verkeerd? Of beter gezegd, waarom het verschil tussen de 2 outputs?

@Darkstone: jou suggestie ga ik nu even bekijken.
Edit: de link die jij aandraagt heeft het alleen over het editen van bestaande tabellen. Dit gaat niet over het aanmaken van tabellen vanuit verschillende arrays.

[ Voor 11% gewijzigd door Craven op 27-02-2013 15:28 ]


Verwijderd

Een hash table wordt gebruikt om onder één naam één object op te slaan. Dat is dus niet wat jij wilt*, een tabel is hiervoor beter geschikt. Bovendien krijg je dan (afaik) geen mooie output met convertTo-HTML.

*tenzij je een array-van-hashtables of hashtable-van-arrays gebruikt. Maar dat is in powershell verre van elegant imo..

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 23:37
If you say so, ik ben een behoorlijke leek op het gebied van scripting in het algemeen. Powershell included.

Daar was ik al een beetje achter. Het doet niet helemaal wat ik wil. Maar dan kom ik weer terug op mijn originele vraag. Hoe maak ik een table van de 2 arrays?

write-host van $ServerLoad en $ServerList arrays geeft nu dit hiervan wil ik dus een table.
code:
1
2
@{ServerName=W4901} @{ServerName=W4902} @{ServerName=W4903} @{ServerName=W4904} @{ServerName=W4906} @{ServerName=W4907} @{ServerName=W4908} @{ServerName=W4941} @{ServerName=W4942} @{ServerName=W4943} @{ServerName=W4945} @{ServerName=W4948} @{ServerName=W4949} @{ServerName=W4951}
@{Load=400} @{Load=0} @{Load=400} @{Load=0} @{Load=0} @{Load=0} @{Load=100} @{Load=0} @{Load=0} @{Load=0} @{Load=0} @{Load=0} @{Load=0} @{Load=0}

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Smerige oplossing (ken geen powershell maar voor het idee):
code:
1
2
3
4
5
6
7
8
write "<table>"
For i=0;i<serverload.length();i++
  write "<tr>"
  write "<td>" + $ServerLoad[i] + "</td>"
  write "<td>" + $ServerList[i] + "</td>"
  write "</tr>"
next
write "</table>"

Dat is als je 2 (of meer) arrays gelijk zijn

Als je 2 arrays niet gelijk zijn kan je nog smeriger gaan en binnen je for-loop een lookup doen in een andere array.
Het is niet hoe ik het zou maken, maar als het niet al te veel items zijn zou je niet al te slechte performance moeten hebben.

Verwijderd

Craven schreef op woensdag 27 februari 2013 @ 15:36:
Daar was ik al een beetje achter. Het doet niet helemaal wat ik wil. Maar dan kom ik weer terug op mijn originele vraag. Hoe maak ik een table van de 2 arrays?
Heb je al eens gezocht? Bijvoorbeeld de 2e google hit is http://blogs.msdn.com/b/r...ble-using-powershell.aspx, waarmee je er vrij snel achter moet kunnen komen hoe je een tabelletje maakt.
Pagina: 1