Hi everyone i am trying to create a script with powershell to read a table that contains ip adresses and ports.
These ip adresses sometimes are in the cidr notation and sometimes normal. So the script have to read them without the cidr notation and sometimes there a many ip adresses in one column seperatet with “,”.
In a other column there are ports some in normal notation like 443 sometimes don’t know why they are juts like this g-25. So the script have to recognize it is port 25.
The problem know is, i have to combine each IP-adress with these ports and test this adress with test-netconnection -Port XX
Next Problem i have no adminrights on the computer so i cant install any modules.
Here my Code that is not really that what it have to do:
# Importiere das Modul
Import-Module ImportExcel
# Pfad zur XLSX-Datei
$pathToFile = "C:\Users\XXXX\Desktop\XXXX - Application_XXXX.xlsx"
# Sicherstellen, dass der Pfad zur Datei korrekt ist
if (-Not (Test-Path $pathToFile)) {
Write-Host "Die angegebene Datei wurde nicht gefunden: $pathToFile"
exit
}
# XLSX-Datei einlesen und Fehlerbehandlung hinzufügen
try {
$excelData = Import-Excel -Path $pathToFile -WorksheetName 'Internet Connectivity Details'
if ($excelData -eq $null -or $excelData.Count -eq 0) {
Write-Host "Keine Daten in der Excel-Datei gefunden oder die Datei ist leer."
exit
}
Write-Host "Excel-Datei erfolgreich geladen."
} catch {
Write-Host "Fehler beim Laden der Excel-Datei: $_"
exit
}
# Neue Spalte für Ergebnisse hinzufügen
$columnName = 'Result'
$columnExists = $excelData[0].PSObject.Properties.Name -contains $columnName
if (-not $columnExists) {
Write-Host "Füge neue Spalte '$columnName' hinzu..."
$excelData | Export-Excel -Path $pathToFile -WorksheetName 'Internet Connectivity Details' -AutoSize
$package = Open-ExcelPackage -Path $pathToFile
$worksheet = $package.Workbook.Worksheets['Internet Connectivity Details']
$worksheet.Cells[1, $worksheet.Dimension.End.Column + 1].Value = $columnName
Close-ExcelPackage $package
}
# Erstellen eines Arrays zur Speicherung der aktualisierten Daten
$updatedData = @()
foreach ($entry in $excelData) {
# IP-Adressen oder Hostnamen aus den spezifischen Spalten
$sources = $entry.'URL of the Site / Configured Source' -split ',' # Spalte B
$destinations = $entry.'Configured Destination' -split ',' # Spalte C
# Port oder Dienst aus Spalte D
$portOrService = $entry.'Port / Configured Service'
# Kombiniere alle IPs und Hostnamen
$allIPs = $sources + $destinations
$results = @()
# Teste jede IP-Adresse oder jeden Hostnamen
foreach ($ip in $allIPs) {
$ip = $ip.Trim() # Entfernt führende oder nachgestellte Leerzeichen
if ($ip) { # Überprüfen, ob die IP-Adresse oder der Hostname nicht leer ist
try {
$port = $null
if ($portOrService -match '^\d+$') {
$port = [int]$portOrService
}
$result = if ($port) {
# TCP-Verbindungstests mit angegebenem Port
Test-NetConnection -ComputerName $ip -Port $port
} else {
# Ping-Test oder andere Verbindungen
Test-NetConnection -ComputerName $ip
}
$message = "`nTesting IP/Hostname: $ip`n"
$message += "Ping Test Result:`n"
$message += " PingSucceeded: $($result.PingSucceeded)`n"
$message += " Address: $($result.Address)`n"
if ($result.TcpTestSucceeded) {
$message += " TcpTestSucceeded: $($result.TcpTestSucceeded)`n"
}
if ($result.PingReplyDetails) {
$message += " RoundTripTime: $($result.PingReplyDetails.RoundTripTime) ms`n"
}
$results += $message
}
catch {
$message = "Fehler beim Testen der IP/Hostname: $ip`nError: $_`n"
$results += $message
}
}
}
# Erstellen eines neuen Objekts mit den Ergebnissen
$updatedData += [PSCustomObject]@{
'URL of the Site / Configured Source' = $entry.'URL of the Site / Configured Source'
'Configured Destination' = $entry.'Configured Destination'
'Port / Configured Service' = $entry.'Port / Configured Service'
'Comment' = $entry.'Comment'
'Result' = ($results -join "`n")
}
}
# Temporäre Datei für Excel
$tempFilePath = "C:\Users\SASGERH\Desktop\WHTC - Application_Intake_v1.4_template1_Temp.xlsx"
# Speichern der aktualisierten Daten in eine temporäre Datei
$updatedData | Export-Excel -Path $tempFilePath -WorksheetName 'Internet Connectivity Details' -AutoSize
# Temporäre Datei einlesen
$package = Open-ExcelPackage -Path $tempFilePath
$worksheet = $package.Workbook.Worksheets['Internet Connectivity Details']
# Hinzufügen der Ergebnisse zur neuen Spalte
$row = 2
foreach ($entry in $updatedData) {
$worksheet.Cells[$row, $worksheet.Dimension.End.Column].Value = $entry.'Result'
$row++
}
# Speichern und Schließen der Excel-Datei
Close-ExcelPackage $package
# Ersetzen der alten Datei durch die neue
Move-Item -Path $tempFilePath -Destination $pathToFile -Force
Write-Host "Ergebnisse wurden erfolgreich in die Datei geschrieben: $pathToFile"
Maybe someone could help because my powershell skill ends here