PS Filter
Hallo liebe PS Experten,
ich habe ein kleines Problem. Ich habe das foglende Script um derzeit an der Domäne angemeldete Rechner zu sehen. Da ich hier aber auch ping Ergebnisse bekomme bei rechnern, wo ich über \\pc\c$ nicht raufkomme, und diese auch definitiv auch nicht online sein können, geh ich mal von veralteten Dns Einträgen aus. Ich hatte mir nun gedacht, diese, die nicht via Freigabe erreichbar sind rauszufiltern, leider gelingt mir das nicht so, vielleicht hat ja einer eine Idee.
lg
und schönen Sonntag noch
ich habe ein kleines Problem. Ich habe das foglende Script um derzeit an der Domäne angemeldete Rechner zu sehen. Da ich hier aber auch ping Ergebnisse bekomme bei rechnern, wo ich über \\pc\c$ nicht raufkomme, und diese auch definitiv auch nicht online sein können, geh ich mal von veralteten Dns Einträgen aus. Ich hatte mir nun gedacht, diese, die nicht via Freigabe erreichbar sind rauszufiltern, leider gelingt mir das nicht so, vielleicht hat ja einer eine Idee.
# CSV-Dateipfad
$csvPath = "\\domain\Summary.csv"
# Manuelles Einlesen der CSV mit korrektem Encoding (ISO-8859-1)
$bytes = [System.IO.File]::ReadAllBytes($csvPath)
$csvContent = [System.Text.Encoding]::GetEncoding("ISO-8859-1").GetString($bytes)
$csvData = $csvContent | ConvertFrom-Csv -Delimiter ";"
# Abrufen der Computer, deren Namen mit "A" und "N" beginnen
$ComputersA = Get-ADComputer -Filter "Name -like 'A*'"
$ComputersN = Get-ADComputer -Filter "Name -like 'N*'"
$Computers = $ComputersA + $ComputersN
# Funktion zum Pingen der Computer
function ping2 {
param(
[array]$Computers,
[int]$TimeOut = 800
)
$Tasks = [System.Collections.Generic.List[Object]]::new()
foreach ($address in $Computers) {
$Tasks.Add(
[pscustomobject]@{
Target = $address.Name
pingTask = [System.Net.NetworkInformation.Ping]::new().SendPingAsync($address.Name, $TimeOut)
}
)
}
$Results = foreach ($Task in $Tasks) {
try {
$Task.pingTask.Wait() # Warte auf das Ende der Ping-Task
$Status = $Task.pingTask.Result.Status
} catch {
$Status = "Error"
}
[pscustomobject]@{
Target = $Task.Target
Status = $Status
}
}
return $Results
}
# Funktion zur Überprüfung der Erreichbarkeit über SMB
function Check-SMB {
param (
[string]$ComputerName
)
try {
$null = Test-Path "\\$ComputerName\c$"
return $true
} catch {
return $false
}
}
# Ausführen der Ping-Funktion
$PingResults = ping2 -Computers $Computers
# Erfolgreiche Pings und Beschreibung aus der CSV-Datei zuordnen
$TableRows = ""
$PingResults | Where-Object { $_.Status -eq "Success" } | Sort-Object Target | ForEach-Object {
if (Check-SMB -ComputerName $_.Target) {
# Suche in der CSV nach dem entsprechenden Computer (PCname)
$cleanedTarget = $_.Target.Trim('"').ToUpper()
$csvEntry = $csvData | Where-Object {
($_.'hostname' -ne $null) -and ($_.hostname.Trim('"').ToUpper() -eq $cleanedTarget)
}
# Beschreibung aus CSV auslesen
$description = if ($csvEntry -and $csvEntry.Beschreibung) {
$csvEntry.Beschreibung -join ", "
} else {
"Keine Beschreibung gefunden"
}
# Zeile für die HTML-Tabelle
$TableRows += "<tr><td>$cleanedTarget</td><td>$description</td></tr>"
}
}
# HTML-Code für die Tabelle mit Formatierung und JavaScript für Sortierbarkeit
$html = @"
<!DOCTYPE html>
<html lang='de'>
<head>
<meta charset='UTF-8'>
<title>PC-Ping Ergebnisse</title>
<style>
body { font-family: Arial, sans-serif; }
table { width: 100%; border-collapse: collapse; }
th, td { padding: 8px; text-align: left; cursor: pointer; }
tr:nth-child(even) { background-color: #e6ffe6; } /* Hellgrüner Zebra-Effekt */
tr:nth-child(odd) { background-color: #ccffcc; }
th { background-color: #009900; color: white; }
</style>
<script>
function sortTable(n) {
var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0;
table = document.querySelector("table");
switching = true;
dir = "asc";
while (switching) {
switching = false;
rows = table.rows;
for (i = 1; i < (rows.length - 1); i++) {
shouldSwitch = false;
x = rows[i].getElementsByTagName("TD")[n];
y = rows[i + 1].getElementsByTagName("TD")[n];
if (dir == "asc") {
if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
shouldSwitch = true;
break;
}
} else if (dir == "desc") {
if (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) {
shouldSwitch = true;
break;
}
}
}
if (shouldSwitch) {
rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
switching = true;
switchcount++;
} else {
if (switchcount == 0 && dir == "asc") {
dir = "desc";
switching = true;
}
}
}
}
</script>
</head>
<body>
<h2>PC-Ping Ergebnisse</h2>
<table border="1">
<tr>
<th onclick="sortTable(0)">Computername</th>
<th onclick="sortTable(1)">Beschreibung</th>
</tr>
$TableRows
</table>
</body>
</html>
"@
# Temporäre HTML-Datei speichern und im Standardbrowser öffnen
$tempHtmlPath = "$env:TEMP\PC_Ping_Ergebnisse.html"
$html | Out-File -Encoding UTF8 -FilePath $tempHtmlPath
Start-Process $tempHtmlPath
lg
und schönen Sonntag noch
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 670967
Url: https://administrator.de/forum/ps-filter-670967.html
Ausgedruckt am: 27.01.2025 um 13:01 Uhr
8 Kommentare
Neuester Kommentar
Moin,
da ist etwas anderes im Argen. Wenn ein Ping beantwortet wird, dann hängt da auch ein aktives Gerät, egal, was für eines. Sollte es ein PC sein, dann ist dieser sehr wohl online. Sonst antwortet halt ein anderes Gerät unter dieser IP.
Es wäre daher falsch, hier etwas herauszufiltern mit der Maßgabe, das Ergebnis sei sozusagen nicht korrekt.
Gruß
DivideByZero
Da ich hier aber auch ping Ergebnisse bekomme bei rechnern, wo ich über \\pc\c$ nicht raufkomme, und diese auch definitiv auch nicht online sein können, geh ich mal von veralteten Dns Einträgen aus.
da ist etwas anderes im Argen. Wenn ein Ping beantwortet wird, dann hängt da auch ein aktives Gerät, egal, was für eines. Sollte es ein PC sein, dann ist dieser sehr wohl online. Sonst antwortet halt ein anderes Gerät unter dieser IP.
Es wäre daher falsch, hier etwas herauszufiltern mit der Maßgabe, das Ergebnis sei sozusagen nicht korrekt.
Gruß
DivideByZero