Ich habe eine Gruppe von einfachen PowerShell-Funktionen, die Systemstatistiken abrufen, konvertieren sie in HTML-Fragmente & dann am Ende alle zusammen in eine große HTML-Datei.ConvertTo-HTML <td> Klasse
Ich habe ein Problem mit einigen spezifischen Funktionen, während andere scheinen gut zu funktionieren, obwohl ich genau das gleiche Prinzip verwende.
Dies ruft die Systeminformationen:
function Get-ApplicationLogs {
$query = '<QueryList>
<Query Id="0" Path="Application">
<Select Path="Application">*[System[(Level=1 or Level=2 or Level=3) and TimeCreated[timediff(@SystemTime) <= 86400000]]]</Select>
</Query>
</QueryList>'
$logs = Get-WinEvent -ComputerName $ComputerName -ErrorAction SilentlyContinue -FilterXml $query | Sort-Object {$_.Id}
foreach ($log in $logs) {
$props = [ordered]@{'Id'=$log.Id;
'Error Type'=$log.LevelDisplayName;
'Provider Name'=$log.ProviderName;
'Timestamp'=$log.TimeCreated;
'Message'=$log.Message;
}
$obj = New-Object -TypeName PSObject -Property $props
Write-Output $obj
}
}
Diese die Logik für die Funktion gilt und wendet die bedingte Formatierung für die Klasse des Ausgangs HTML-Code: -
$applogs = Get-ApplicationLogs -computername $computername |
Select -Property *,@{
name='class';e={
if ($_.'Error Type' -match 'Error' -or 'Critical') {
'<td class="danger">'
} elseif ($_.'Error Type' -match 'Warning') {
'<td class="warning">'
} else {
'<td>'
}
}
}
Dies bindet sie alle zusammen und führt die td-Klasse-Tag-Ersatz:
$frag8 = $applogs | Select 'ID','Error Type','Provider Name','Timestamp','Message' |
ConvertTo-Html -As Table -Fragment -PreContent '<hr>', '<h3>Application Logs</h3>' |
foreach { $_ -replace '<td>',$($applogs.class) } |
Out-String
Aber ich aus irgendeinem Grund eine sehr schiefe HTML-Ausgabe zu erhalten, scheint es mehr Tags als für jeden Wert erforderlich zu generieren: -
<hr>
<h3>Application Logs</h3>
<table>
<colgroup><col/><col/><col/><col/><col/></colgroup>
<tr><th>Id</th><th>Error Type</th><th>Provider Name</th><th>Timestamp</th><th>Message</th></tr>
<tr>
<td class="danger"> <td class="danger"> <td class="danger"> <td class="danger"> <td class="danger"> <td class="danger"> <td class="danger"> <td class="danger">10021</td>
<td class="danger"> <td class="danger"> <td class="danger"> <td class="danger"> <td class="danger"> <td class="danger"> <td class="danger"> <td class="danger">Warning</td>
<td class="danger"> <td class="danger"> <td class="danger"> <td class="danger"> <td class="danger"> <td class="danger"> <td class="danger"> <td class="danger">Windows Server Update Services</td>
<td class="danger"> <td class="danger"> <td class="danger"> <td class="danger"> <td class="danger"> <td class="danger"> <td class="danger"> <td class="danger">08/08/2016 04:37:42</td>
<td class="danger"> <td class="danger"> <td class="danger"> <td class="danger"> <td class="danger"> <td class="danger"> <td class="danger"> <td class="danger">The catalog was last synchronized successfully 1 or more days ago.</td>
</tr>
'$ _. 'Fehlertyp' -match 'Fehler' -oder 'Critical'' sollte' $ _ 'sein. Fehlertyp' -match 'Fehler | Critical'', weil' -match' eine Regexp erwartet. – wOxxOm
Dies erzeugt leider immer noch die gleiche HTML-Ausgabe für mich. Es scheint zusätzliche Tags zu generieren, daher ist die Tabelle verzerrt. –
Es verursacht nicht das von Ihnen beobachtete Problem, aber es ist ein anderes Problem in Ihrem Code. Genauer gesagt, es ist nicht der Grund dafür, mehrere "" -Tags zu bekommen, aber der Grund, warum sie alle die Klasse 'danger' haben. –