Ich habe eigentlich zwei Fragen Ich hoffe, jemand kann mir helfen.PowerShell WMI zeigt den gleichen Wert
Der Zweck dieses Skripts ist es, mir Sichtbarkeit zu geben, wenn Maschinen mit hoher Speicher- und CPU-Auslastung ausgeführt werden. Die Liste der Server ist in einer TXT-Datei namens ServerList1.txt definiert. Die Ergebnisse werden in eine HTML-Datei ausgegeben.
Bitte beachten Sie den folgenden Code. Wenn Sie Ihre CPU auf einen Wert über 70% einstellen, sollte das Skript anzeigen, welcher Rechner die 70% -Marke überschritten hat. Derzeit, wenn ich eine Maschine auf 100% CPU einstelle, zeigt es 100 $ für ALLE aufgelisteten Maschinen an. Irgendeine Idee warum? Ich kratze mich seit einiger Zeit daran.
Bezogen auf die obigen, wenn eine Maschine einen Wert höher als 70% erreicht, sollte die Tabelle Zelle mit rot füllen. gerade jetzt wird es alle Zellen mit rot füllen. Ich vermute, sobald ich herausfinden kann, warum es 100% für alle Maschinen zeigt, sollte sich dieses Problem auch selbst korrigieren und die Zelle nur für eine bestimmte Maschine als rot markieren.
Unten ist der Code: (. Ja, es ist ein wenig schlampig Ich versuche gerade jetzt die Dinge arbeiten)
$ServerListFile = "C:\Monitor\ServerList1.txt"
$ServerList = Get-Content $ServerListFile -ErrorAction SilentlyContinue
$GetDate = (Get-Date).ToString("dddd MMMM dd - hh:mm:ss tt")
$Result = @()
ForEach ($ComputerName in $ServerList)
{
### Processor %
$Proc = Get-counter -Counter "\Processor(_Total)\% Processor Time" -SampleInterval 1
$CPU = ($Proc.Readings -split ":")[-1]
$CPU = [math]::Round($CPU,2)
### Memory %
$Memory = Get-WMIObject -Class Win32_OperatingSystem -Computername $ComputerName | Select-Object @{Name = "MemoryUsage"; Expression = {"{0:N2}" -f ((($_.TotalVisibleMemorySize - $_.FreePhysicalMemory)*100)/ $_.TotalVisibleMemorySize)}}
$Memory = $Memory | Select-Object -ExpandProperty MemoryUsage
### Create custom objects for report
$Result += [PSCustomObject] @{
ServerName = "$ComputerName"
CPULoad = "$($CPU)%"
Memory = "$($Memory)%"
}
### HTML formatting
$Report = "
<!DOCTYPE html>
<html>
<head>
<meta http-equiv=""refresh"" content=""1; URL=Test.htm"" />
<link rel=""shortcut icon"" href=""favicon.png"" type=""image/x-icon"" />
<title> Server Health Report</title>
<style>
html, body {
height: 100%;
background-color: #e6e6e6;
}
html {
display: table;
margin: auto;
}
body {
display: table-cell;
vertical-align: top;
}
p {
font-family: Microsoft Tai le;
}
h1 {
color: rgb(153,0,0);
text-align: center;
font-family: Microsoft Tai le;
font-size: 50px;
}
h2 {
color: rgb(153,0,0);
text-align: center;
font-family: Microsoft Tai le;
font-size: 30px;
}
td {
font-family: Microsoft Tai le;
font-size:24px;
padding:8px 12px;
border-style:solid;
border-width:1px;
/*overflow:hidden;*/
word-break:normal;
border-color:#999;
color:#444;
border-top-width:1px;
border-bottom-width:1px;
}
</style>
</head>
<body>
<h1>Server Health Report</h1>
<h2>$GetDate</h2>
<table border=1 cellpadding=0 cellspacing=0>
<tr bgcolor=#00ace6 align=center>
<td><b>Server Name</b></td>
<td><b>CPU Utilization</b></td>
<td><b>Memory Utilization</b></td>
</tr>"
Foreach($Entry in $Result)
{
IF ($CPU -gt "70" -or $Memory -gt "70")
{
#$Report += "<tr bgcolor=#ff0000>"
$Report += "<trfont-color=#ff0000></font>"
$ReportDate = Get-Date -format "dddd MMMM dd - hh:mm:ss tt"
$ReportName = $Entry.Servername
$ReportCPU = $Entry.CPULoad
<#Write-Output "========== LOG ENTRY ==========" | Out-File C:\Monitor\Testmonitor.txt -Append
Write-Output "Timestamp: $ReportDate " | Out-File C:\Monitor\Testmonitor.txt -Append
Write-Output "Server Name: $ReportName" | Out-File C:\Monitor\Testmonitor.txt -Append
Write-Output "CPU Utilization: $ReportCPU" | Out-File C:\Monitor\Testmonitor.txt -Append
Write-Output "" | Out-File C:\Monitor\Testmonitor.txt -Append
Write-Output "" | Out-File C:\Monitor\Testmonitor.txt -Append#>
}
ELSE
{
$Report += "<tr>"
}
$Report += "<td align=center>$($Entry.Servername)</td>
<td align=center>$($Entry.CPULoad)</td>
<td align=center>$($Entry.Memory)</td>
</tr>"
}
$Report += "</table></body></html>"
}
$Report | Out-File C:\Monitor\Test.htm
Vielen Dank @ Ryan-bemrose, habe ich gerade bemerkt, dass auch beim Überprüfen des Codes, aber es immer noch die gleiche Sache beim Umschalten. Ich habe es in 'IF ($ Entry.CPULoad -gt" 70% "-oder $ Entry.Memory -gt" 70% ") geändert, um meinen Code zu finden. Irgendwelche Ideen, warum es immer noch alle Maschinen bei 100% CPU zeigt? Ich werde einen weiteren Riss machen. – obs0lete
D'oh! Ich habe das Problem gefunden. Ich habe folgende Variable gesetzt: '$ Proc = Get-counter -Counter" \ Prozessor (_Total) \% Prozessorzeit "-SampleInterval 1', der nicht darum gebeten hat, die Ergebnisse von einer Maschine zu bekommen. Hinzufügen von '$ Proc = Get-Zähler -Computer $ ComputerName-Counter" \ Prozessor (_Total) \% Prozessorzeit "-SampleInterval 1' funktioniert jetzt! – obs0lete