dpole86
Goto Top

HTML Fragment wird nicht ausgegeben

Guten abend zusammen.

Ich habe ein seltsames Problem.

In meinem Skript vergleiche ich zwei arrays nach unterschiedlichen Namen.
Die Namen welche nicht im Array a vorkommen werden dann in Variable c (auch ein array)
gespeichert.

Dies will ich dann in ein <td>hier kommt die variable</td> reingeschrieben haben.

Leider Passiert bei diesem Vorgang nichts.

Ich konvertiere das Array mit folgendem Befehl
 
| convertto-html -Fragment


die Ausgabe welche ich dann bekomme (passt) auch
<tr><td>NBAPS99</td></tr>
<tr><td>NBAPS135</td></tr>
<tr><td>NBAPS101</td></tr>
<tr><td>NBAPS176</td></tr>
<tr><td>NBAPS185</td></tr>

nur wird dies niht in die HTML Tabelle gespeichert.

mein code Lautet:

Remove-PSDrive spwodb
$Date = Get-Date -Format "yyMMdd";  
$Startzeit = Get-Date -Format "HHmmss";  
$Mailsubject = "Auswertung RoadWarriors " + $Date;  
$Filename = "aps_export_devices_" + $Date + ".html";  
$Filename_csv = "aps_export_devices_" + $Date + ".csv";  
#$Folder_rsync = "\\apsv254\c$\Program Files (x86)\ICW\";  
$Data_spwo = @();
$Data_rsync=@();
$Data_rsync_compared=@();
$Data_spwo_compared=@();

#Rsync Anfang 

# Lese das Log ein, suche nach NBAPS und erstelle ein neues Objekt in $Data_rsync
 $logfile = "C:\Users\admrd\Desktop\test\bat\rsyncd.log"  
 $content = gc $logfile
 $logins = @();
 foreach($line in $content){
     if ($line -cmatch "connect from NBAPS[\d]+"){  
         $arrLine = $line.Split(" ")  
         $logins += New-Object PSObject -Property @{"Name"=$arrLine[5];"Date"=$arrLine;"Time"=$arrLine[1]}  
     }     
 }

$Data_rsync = $logins | ?{(get-date $_.Date) -gt (get-date).AddDays(-21)} | sort Name,Date,Time -Descending | group Name | %{$_.Group} | select Name,Date,Time

# Teile die Daten aus $Data_Rsync in einzelne Spalten auf.
$Rsync_Name = @();
$Rsync_Zeit = @();
$Rsync_Datum = @();

foreach($row in $Data_rsync)
{
   $Rsync_Name += $row.Name;
   $Rsync_Zeit += $row.Time;
   $Rsync_Datum += $row.Date;

}

#Vergleiche die beiden Variablen und gebe die unterschiede aus. 
$Data_rsync_compared = Compare-Object -ReferenceObject $Data_rsync -DifferenceObject $Output -Property Name -PassThru | ?{$_.Sideindicator -eq "=>"}| select Name  

#Rsync_name-string in eine abgeschnittene Tabelle wandeln 
#$string = $Rsync_Name
#$chars = $string.ToCharArray()
#[int]$i = -1
#$computers = @()

#foreach ($c in $chars){

#  if(($c -eq 'N') -or ($c -eq 'n')){  
#    $i++
#    $computers += $c
#  }else{
#    $computers[$i] += $c
##  }
#}

#Rsync Komplett!!!

#SPWO RESULT
import-module SQLite;
new-psdrive -name spwodb -psp SQLite -root "Data Source=C:\Users\admrd\Desktop\test\bat\spiceworks_prod.db";  
$spwo_result = for ($n=13;$n -le 344;$n++)
{
    $filter = "name='nbaps{0}'" -f $n;  
    ls spwodb:/devices -filter $filter | Select name, updated_on 
};

#Vergleiche die beiden Variablen und gebe die unterschiede aus.
$Data_spwo_Compared=Compare-Object -ReferenceObject $Data_spwo -DifferenceObject $Output -Property Name -PassThru | ?{$_.Sideindicator -eq "=>"}| select Name  



$Data_spwo += $spwo_result;

$spwo_name = @();
$spwo_update_on = @();

foreach($row in $Data_spwo)
{

  $spwo_name += $row.name;
  $spwo_update_on += $row.updated_on;

}


Compare-Object -ReferenceObject $Data_spwo -DifferenceObject $Output -Property Client -PassThru | ?{$_.Sideindicator -eq "=>"}| select Client   





[string]$Data_rsync_compared | ConvertTo-Html -Fragment
$Data_spwo_compared | ConvertTo-Html -Fragment

$spwo_name | ConvertTo-Html -Fragment
$spwo_update_on | ConvertTo-Html -Fragment

$Rsync_Name | ConvertTo-Html -Fragment
$Rsync_Zeit | ConvertTo-Html -Fragment
$Rsync_Datum | ConvertTo-Html -Fragment



$html = @"  
    <!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
    <title> Auswertung </title>
    </head>
    <body>
	</table>
    <table width="500" height="260" border="0" align="center">  
    <tr>
    <td>
    <div align="left">  
    <div align="left"><img src ="C:/Users/admrd/Desktop/test/bat/Logo/apsolut_Firmenlogo_Farbe.jpg"></div>  
    </td>
    </tr>
    </table align="center">  
	<table width="500" height="260" border="1" align="center">  
	<tr>
	<td width="230" colspan="4" style="background-color:#FFCC00"><div align="center"><b> Folgende Rechner haben sich in den letzten X Tagen nicht gemeldet</td></div></b>  
	</tr>
	<tr>
	<td width="115" colspan="2" style="background-color:#FFCC00"><div align="center"><b> nicht gemeldet am Rsync</td></div></b>  
	<td width="115" colspan="2" style="background-color:#FFCC00"><div align="center"><b> nicht gemeldet am Spiceworks</td></div></b>  
	</tr>
	<tr>
$Data_Rsync_compared
    <td width="20">$($Data_rsync_compared)</td>  
    <td width="50"></td>  
    <td width="40">$($rsync_Zeit)</td>  
    <td width="50"></td>  
    <td width="30">$($rsync_Datum)</td>  
	</tr>
	<tr>
    <td width="20">$($Data_rsync_compared)Rsync</td>  
    <td width="50"></td>  
	<td width="50"></td>  
    <td width="40">$($Data_spwo_compared)SPWO</td>  
	</tr>
	</table>
    <table align="center" border="1" border-width: ;border-style: solid;border-collapse: collapse;>  
	<tr>
	<td width="230" colspan="6" style="background-color:#FFCC00"><div align="center"><b> Letztes Meldedatum am Rsync</td></div></b>  
	</tr>
	<tr>
    <td width="20">$($rsync_name)</td>  
    <td width="50"></td>  
    <td width="40">$($rsync_Zeit)</td>  
    <td width="50"></td>  
    <td width="30">$($rsync_Datum)</td>  
	</tr>
	</table>
	
	<table width="500" height="260" border="1" align="center">  
	<tr>
	<td width="230" colspan="2" style="background-color:#FFCC00"><div align="center"><b> Letztes Meldedatum am Spiceworks</td></div></b>  
	</tr>
	<tr>
    <td width="10">$($spwo_name)</td>  
    <td width="10">$($spwo_update_on)</td>  
	</tr>
    </table>
	
    </html>
"@  
$html | Out-File $Filename


#$Data_rsync += $rsync_result;
#$Data_spwo += $spwo_result;
#$Data = $rsync_result + $spwo_result


#$Data |  ConvertTo-HTML -head $a | Out-File C:\Users\admrd\Desktop\test\bat\test.htm  #Export-CSV -Path $Filename -NoTypeInformation -Delimiter ",";  
#$spwo_result | Export-CSV -Path $Filename -NoTypeInformation -Delimiter "," ;  
#$rsync_result | Export-CSV -Path $Filename -NoTypeInformation -Delimiter "," ;  
#$Filename | ConvertTo-HTML -head $a | Out-File C:\Users\admrd\Desktop\test\bat\test.htm

Send-MailMessage -From "IT-Admin@ap-solut.com" -Subject $Mailsubject -To "Roman.Dzichel@ap-solut.com" -Attachment $Filename -SmtpServer "10.33.50.5"  

$Endzeit = Get-Date -Format "HHmmss";  
$Laufzeit = $Endzeit-$Startzeit;
$Ausgabe = "Das Skript lief für " + $Laufzeit + " Sekunden.";  
echo $Ausgabe;
Remove-PSDrive spwodb

Wäre echt nett wenn sich das jemand anschauen würde face-smile

Content-ID: 224064

Url: https://administrator.de/contentid/224064

Ausgedruckt am: 25.11.2024 um 03:11 Uhr

colinardo
Lösung colinardo 09.12.2013, aktualisiert am 10.12.2013 um 15:35:36 Uhr
Goto Top
Tach auch,
Ich habe ein seltsames Problem.
find ich nicht seltsam, denn ich würde dir an deiner Stelle raten den HTML-Code nochmal ganz genau zu überprüfen, dann wirst du einen Haufen Fehler finden !
http://validator.w3.org/#validate_by_input

Und außerdem geht so ein Konstrukt nicht:
<td>
<tr><td>NBAPS99</td></tr>
<tr><td>NBAPS135</td></tr>
<tr><td>NBAPS101</td></tr>
<tr><td>NBAPS176</td></tr>
<tr><td>NBAPS185</td></tr>
</td>
also eine Row innerhalb eines TD-Tags. Wenn das gewünscht ist musst du das ganze in eine weitere Tabelle in dieser Zelle packen:
<td>
 <table>
  <tr><td>NBAPS99</td></tr>
  <tr><td>NBAPS135</td></tr>
  <tr><td>NBAPS101</td></tr>
  <tr><td>NBAPS176</td></tr>
  <tr><td>NBAPS185</td></tr>
 </table>
</td>

Grüße Uwe
Dpole86
Dpole86 09.12.2013 um 16:25:40 Uhr
Goto Top
Hi Uwe


Danke für dienen Kommentar face-smile

Leider hat dies nciht zum Erfolg geführt.

Ich habe zwar alles Fehler angeschaut aber vom Code selber ist nichts falsch.

Wie gesagt ich bekomme keine Ausgabe auf HTML.

Bekomme allerdings wenn ich die Variable aufrufe den oben gennanten inhalt (ist nur ein ausschnitt)

Grüße Roman
colinardo
Lösung colinardo 09.12.2013, aktualisiert am 10.12.2013 um 15:35:34 Uhr
Goto Top
Zitat von @Dpole86:
Ich habe zwar alles Fehler angeschaut aber vom Code selber ist nichts falsch.
ohhh doch, verar... mich doch nicht, dein

back-to-topHTML-Code

ist voller Fehler nicht dein Powershell-Code !
Stichwort, nicht abgeschlossene und verweiste Tags ... und der oben erwähnte Fehler. Deswegen werden deine Inhalte nicht angezeigt.
Lass den HTML-Code durch den Validator laufen dann siehst du's schon.
Dpole86
Dpole86 09.12.2013 um 16:44:23 Uhr
Goto Top
Hi Uwe

Mein HTML code Funktioniert.

Ich bekomme auch alle angaben die ich dort einfüge.

Allerdings nicht die Werte aus der Variable was ja das eigentliche Problem ist face-sad
Dpole86
Dpole86 10.12.2013 um 14:18:02 Uhr
Goto Top
Es passt alles.

Ich kann auch über eine neue HTML Struktur (wo nichts drin ist aus die Variable) keine Ausgabe finden.

wenn ich allerdings ein $C | exportto-html | out-file blub.html

Dann bekomme ich die Daten in die HTML

warum??
colinardo
Lösung colinardo 10.12.2013 aktualisiert um 15:35:32 Uhr
Goto Top
klar !!
hier wandelst du die Variablen in HTML-Fragmente für die Ausgabe in der Konsole, aber du speicherst diesen Inhalt damit nicht in den jeweiligen Variablen
[string]$Data_rsync_compared | ConvertTo-Html -Fragment
$Data_spwo_compared | ConvertTo-Html -Fragment
$spwo_name | ConvertTo-Html -Fragment
$spwo_update_on | ConvertTo-Html -Fragment
$Rsync_Name | ConvertTo-Html -Fragment
$Rsync_Zeit | ConvertTo-Html -Fragment
$Rsync_Datum | ConvertTo-Html -Fragment
du musst die HTML-Ausgabe wieder den Variablen zuweisen, du schreibst also den obigen Abschnitt so:
$Data_rsync_compared_html = [string]$Data_rsync_compared | ConvertTo-Html -Fragment
$Data_spwo_compared_html = $Data_spwo_compared | ConvertTo-Html -Fragment
$spwo_name_html = $spwo_name | ConvertTo-Html -Fragment
$spwo_update_on_html = $spwo_update_on | ConvertTo-Html -Fragment
$Rsync_Name_html = $Rsync_Name | ConvertTo-Html -Fragment
$Rsync_Zeit_html = $Rsync_Zeit | ConvertTo-Html -Fragment
$Rsync_Datum_html = $Rsync_Datum | ConvertTo-Html -Fragment
und passt die Variablennamen in deinem HTML-Code entsprechend an.
das ganze hatten wir doch schonmal, irgendwie hast du das Prinzip noch nicht verstanden, aber wie gesagt das sind Grundlagen ...

Grüße Uwe
Dpole86
Dpole86 10.12.2013 um 14:35:10 Uhr
Goto Top
Hi Uwe

wie immer danke dir für die schnelle Antwort face-smile


es geht ja nicht um alle Einträge sondern nur um die ersten 2 Einträge:

 
$Data_rsync_compared | ConvertTo-Html -Fragment
$Data_spwo_compared | ConvertTo-Html -Fragment

Diese kommen aus

$Data_rsync_compared = Compare-Object -ReferenceObject $Data_rsync -DifferenceObject $Output -Property Name -PassThru | ?{$_.Sideindicator -eq "=>"}| select Name  
Darin sind die Daten verhanden in folgendem Format
Name                                                                                                                   
----                                                                                                                                                                                                                                                           
NBAPS195                                                                                                                                                                                                                                                                           
NBAPS203                                                                                                                                                                                                                                                                           
NBAPS40                                                                                                                                                                                                                                                                            
NBAPS177                                                                                                                                                                                                                                                                           
NBAPS73                                                                                                                                                                                                                                                                            
NBAPS168                                                                                                                                                                                                                                                                           
NBAPS202                                                                                                                                  

Der rest wird perfekt ausgegeben.

Und ich frage mich warum es mir nicht ausgegeben wird.

wenn ich allerdings die Variable Direkt in ein HTML dokument "speicher"
wird mir der Inhalt korrekt ausgegeben.

Grüße Roman
colinardo
Lösung colinardo 10.12.2013 aktualisiert um 15:35:28 Uhr
Goto Top
Zitat von @Dpole86:
 
> $Data_rsync_compared | ConvertTo-Html -Fragment
> $Data_spwo_compared | ConvertTo-Html -Fragment
> 
ich wiederhole mich erneut , so wird die Ausgabe nur an die Konsole geleitet und nicht in den Variablen gespeichert, s.o.

Tut mir leid, aber das führt hier zu nichts...
Klinke mich gepflegt aus....

Grüße Uwe
Dpole86
Dpole86 10.12.2013 um 15:35:20 Uhr
Goto Top
Aber ich speicher doch schon die Daten davor in die Variable -.-

$Data_rsync_compared = Compare-Object -ReferenceObject $Data_rsync -DifferenceObject $Output -Property Name -PassThru | ?{$_.Sideindicator -eq "=>"}| select Name

Oder etwa nicht?

Edit: Du hattest recht.

aber dann versteh ich nicht was ich mit dem oben angezeigten befehl mache -.-
colinardo
colinardo 10.12.2013 aktualisiert um 16:27:53 Uhr
Goto Top
Zitat von @Dpole86:
aber dann versteh ich nicht was ich mit dem oben angezeigten befehl mache -.-
Das Ergebnis deines obigen befehls ergibt ein "Array aus Objekten", und das Convertto-HTML konvertiert diese Objekte in einen HTML-String. Etwas ähnliches machen z.B. auch die CMDLets format-table und format-list, d.h. diese machen aus Objekten formatierte Strings. Deshalb sollte man diese tunlichst am Ende einer Pipeline verwenden, da ansonsten die schönen Objekte mit ihren Methoden und Eigenschaften flöten gehen.

Ein hilfreiches CMDlet was dich besser verstehen lässt woraus ein Objekt oder Variable besteht ist get-member. Wenn du ein Objekt daran via Pipeline übergibst gibt dir die Powershell aus, welcher Typ das Objekt ist, und wenn es ein Objekt ist, alle möglichen Eigenschaften und Methoden dessen.

Beispiel:
$deineVariable | get-member
Hoffe das hilft dir beim verstehen ....

Grüße Uwe
Dpole86
Dpole86 10.12.2013 um 17:39:01 Uhr
Goto Top
Hi Danke für die Erklärung

allerdings brauch ich noch einmal deine hilfe -.-


die ausgabe funktioniert nun einwandfrei.

Allerdings wird jeder einzelne Wert in der variable in eine einzelne "Tabelle" gesteckt.
Sodass ich folgende struktur in meinem HTML habe

<td width="20"><table> <colgroup><col/></colgroup> <tr><th>*</th></tr> <tr><td>NBAPS195</td></tr> <tr><td>NBAPS203</td></tr> <tr><td>NBAPS40</td></tr> <tr><td>NBAPS177</td></tr> <tr><td>NBAPS73</td></tr> <tr><td>NBAPS168</td></tr> <tr><td>NBAPS202</td></tr> <tr><td>NBAPS187</td></tr> <tr><td>NBAPS204</td></tr> <tr><td>NBAPS180</td></tr> <tr><td>NBAPS105</td></tr> <tr><td>NBAPS26</td></tr> <tr><td>NBAPS146</td></tr> <tr><td>NBAPSV31</td></tr> <tr><td>NBAPS152</td></tr> <tr><td>NBAPS155</td></tr> <tr><td>NBAPS197</td></tr> <tr><td>NBAPS111</td></tr> <tr><td>NBAPS113</td></tr> <tr><td>NBAPS31</td></tr> <tr><td>NBAPS181</td></tr> <tr><td>NBAPS74</td></tr> <tr><td>NBAPS116</td></tr> <tr><td>NBAPS190</td></tr> <tr><td>NBAPS117</td></tr> <tr><td>NBAPS119</td></tr> <tr><td>NBAPS191</td></tr> <tr><td>NBAPS159</td></tr> <tr><td>NBAPS162</td></tr> <tr><td>NBAPS189</td></tr> <tr><td>NBAPS192</td></tr> <tr><td>NBAPS193</td></tr> <tr><td>NBAPS167</td></tr> <tr><td>NBAPS200</td></tr> <tr><td>NBAPS124</td></tr> <tr><td>NBAPS83</td></tr> <tr><td>NBAPS57</td></tr> <tr><td>NBAPSV32</td></tr> <tr><td>NBAPS184</td></tr> <tr><td>NBAPS33</td></tr> <tr><td>APSV322</td></tr> <tr><td>NBAPS194</td></tr> <tr><td>NBAPS79</td></tr> <tr><td>NBAPS92</td></tr> <tr><td>NBAPS160</td></tr> <tr><td>NBAPS170</td></tr> <tr><td>NBAPS67</td></tr> <tr><td>NBAPS196</td></tr> <tr><td>NBAPSV77-2</td></tr> <tr><td>NBAPSV77</td></tr> <tr><td>NBAPS95</td></tr> <tr><td>NBAPS153</td></tr> <tr><td>NBAPS132</td></tr> <tr><td>NABPSV77</td></tr> <tr><td>NBAPS101</td></tr> <tr><td>NBAPS176</td></tr> </table></td>  

wie Kireg ich es hin das er nicht tabllen macht?
colinardo
Lösung colinardo 10.12.2013 aktualisiert um 18:35:04 Uhr
Goto Top
Zitat von @Dpole86:
wie Kireg ich es hin das er nicht tabllen macht?
das ist aber der Standard von convertto-html -fragment. Wenn du das nicht willst musst du die Strings manuell zusammenbauen, als was willst du diese denn haben ?? Nur die Namen als reine Strings ?, das geht so :
$deinePlainTextListe = $Data_rsync_compared | select -ExpandProperty Name
Dpole86
Dpole86 10.12.2013 um 18:35:01 Uhr
Goto Top
Ok jetzt habe ich es verstanden.

gott war ich dämlich...aber aus fehlern lernt man :D

Danke dir face-smile