Dieses Forum braucht einen „Gefällt mir“-Button.
Like I said thousand times before 👍 .
---------
Tatsächlich sehr interessant die Empfehlung Oscar , Danke 👌 .
Viele Grüße, Sven
Dieses Forum braucht einen „Gefällt mir“-Button.
Like I said thousand times before 👍 .
---------
Tatsächlich sehr interessant die Empfehlung Oscar , Danke 👌 .
Viele Grüße, Sven
Ja dann herzlich willkommen 👋 Seppuku .
Viel Spaß und Erfolg in unseren Reihen hier.
Scheu' dich nicht reichlich Fragen hier los zu werden oder bei Threads beizutragen.
Viele Grüße
Sven
War auch mein erster Gedanke Velted .
Bzw. würde ich eine Map nutzen.
Meine Frage wäre DOheim , warum du überhaupt so eine Funktion hast oder brauchst, mit beliebig vielen Parametern?
Vielleicht kannst du das ganz vermeiden dann musst du auch nicht mit Eval etc. arbeiten.
Wenn du mit den angebotenen Lösungen zufrieden bist, ist das auch für mich in Ordnung, doch persönlich würde ich dem "warum" auf den Grund gehen und es gar nicht erst dazu kommen lassen.
My 13 Cents dazu 😀 .
Viele Grüße
Sven
------------------------
Manche Funktionen gestaltet man ja auch mit einem Leerstring als Vorbelegung für eine Variable, aber es folgen trotzdem noch besetzte Parameter. Deshalb verwende ich für echte leere Variablen die Vorbelegung: NULL.
Finde ich super BugFix , mit NULL zu arbeiten. So initialisiere ich Maps i. d. R. in AutoIt auch, um genau den Leerstring Fall berücksichtigen zu können 🤝 .
Danke dir AspirinJunkie , wie immer hervorragend erklärt 👌 .
Hier mal ein anderer Ansatz, im Falle du kannst/möchtest direkt mit der API response arbeiten.
Vielleicht trifft mein skizziertes Beispiel gar nicht zu, doch evtl. hilft es im Verständnis mit dem Umgang mit JSON (strings).
Mal angenommen du holst dir per cURL (oder anderen Client) dein JSON string (response) von irgendeiner Webseite.
Dann könntest du mit jq (jq.exe) deine Zielstruktur direkt erstellen ohne viel machen zu müssen.
curl -sSL 'https://your-target-website.com/api/get' | jq.exe '{images: .}'
Oder anders, damit es anschaulicher wird: Du hast deinen JSON string in Datei before.json (dies ist der Ersatz für dein cURL Aufruf) [...]
[{"ref":"https://blabla","hash":"3882db"},{"ref":"https://blabla","hash":"3882db"},{"ref":"https://blabla","hash":"3882db"}]
[...] nun kannst du, vorausgesetzt du nutzt unter Windows bash oder einen anderen Linux like Terminal (#werbung-für-vscode),
per cat und jq das gleiche Ergebnis erreichen, in Datei after.json.
cat before.json | jq '{images: .}' > after.json
💡 Ich weiß, viele Voraussetzungen und externe Tools, anstatt direkt mit der JSON.au3 und AutoIt zu arbeiten. Doch je nachdem in welchem Kontext du arbeitest oder mit jemanden arbeitest (Team etc.), ist AutoIt wahrscheinlich weniger im Einsatz als jq.
⚠️ Ich gebe auch hier nochmal den Hinweis, auch wenn ich weiß das AspirinJunkie meinen Beitrag hier richtig einordnen wird und kein JSON.au3 bashing wahrnimmt 😅 😙 :
Wenn ich rein in AutoIt unterwegs bin und mit JSON arbeite, dann ist seine UDF aus meiner Sicht die richtige Wahl, unter den vielen JSON UDFs. Sobald ich mit anderen Sprachen, Frameworks etc. arbeite, sind deren JSON Serializer oder eben jq als Alternative, die bessere Wahl - da mehr geläufig. Dies deckt sich im wesentlichen auch mit dem was er bereits angesprochen hat, JSON einlesen, verarbeiten in der Sprache oder Tool der Wahl und JSON weiter verarbeiten oder ausgeben.
Einen angenehmen Abend euch noch.
Viele Grüße
Sven
Das reicht so leider nicht.
Bei diesem Ansatz ergibt die Zeit 12:00 AM ==> 12:00, richtig ist aber 00:00.
Das Gleiche gilt für 12:00 PM ==> 24:00 bei dir, jedoch ist 12:00 korrekt.
Des Weiteren wäre bspw. die invalide Zeit 25:30 auch einfach 25:30 anstatt ein Fehler.
Schau' gern nochmal drüber, Danke.
Ich verweise auf die Funktion _Time12hTo24h in Post #3.
Viele Grüße
Sven
Nachtrag: Habe eben deinen rechtlichen Vermerk gesehen. Ist eine Art benutzerdefinierte Lizenz, okay. Doch damit fällt meine Modifikation "offiziell" weg. Bleibt es dabei Oscar ?
Viele Grüße
Sven
Hi und Danke Oscar für dein EXIF_Rename Tool 👌 .
Bisher habe ich immer per ExifTool solche Dinge erledigt, doch dein Ansatz gefällt mir recht gut und ich schaue mal wie ich ihn für mich entsprechend anpassen werde.
Doch dazu würde ich gern wissen ob du das Tool unter irgendeiner Lizenz zu Verfügung stellst?
--------
Ansonsten ein paar kleine Korinthenkacker Anmerkungen meinerseits 😂:
Nochmals Danke 🤝 .
Viele Grüße
Sven
Hmm, na schön Tweaky , dann ist es so. Ich glaube zwar das du dir es schlimmer vorstellst als es ist, da ja nach dem Login wahrscheinlich "nur noch" das Daten abfischen kommt und fertig, doch ohne adaquaten Zugang (oder Simulation etc.) ist es schwierig, stimmt.
Wie auch immer, komme jederzeit gern auf mich zu, wenn du einen erneuten Anlauf mit OIDC oder WebDriver starten möchtest 🤝 .
Viele Grüße
Sven
Es ist wie immer ein Vergügen mit dir, Dankeschön für die gute Erläuterung 🤝 .
Daher wird es dort auch keine Funktion geben die aus einem 2D-Array eben keine verschachtelte Liste, wie man es aus dem Aufbau der Datenstruktur ableiten würde, sondern eine Liste von Objekten - denn das gibt die Syntax schlicht nicht her und eine andere Interpretation auf die Daten zu finden ist Sache des Users selbst.
Kurz: Ja klar kann man Daten hin und her transformieren wie man möchte - die JSON-UDF ist dafür halt nur der falsche Ort.
Verstanden und nachvollziehbar!
Bei der Liste hingegen habe ich kein Pendant.
Die Interpretation, dass der erste Eintrag eines 1D-Array der einzige Key einer Map sein soll und alle anderen Elemente als 1D-Array als Value dieses Keys behandelt werden sollen ist schlicht halt sehr individuell und bedarf daher auch einer individuellen Behandlung.
Auch hierbei gebe ich dir Recht, dies muss der User der UDF selbst berücksichtigen bzw. seine Daten entsprechend vorher aufbereiten 👌 .
==> https://github.com/Sylvan86/autoi…r/TableData.au3 schaue ich mir (nochmal) genauer an. Hatte ich vor Monaten bin ich der Meinung, doch vor zwei Wochen ist mir deine UDF nicht eingefallen. Naja, mit fast 40 Jahren - cheers Andi - vergisst man die ersten Sachen eben 😂 .
Alles klar, merci. Einen angenehmen Tag noch 🤝 .
Viele Grüße
Sven
Hi AspirinJunkie , hi liebe Mitlesende 👋 .
Ich könnte die Frage auch via GitHub issues stellen, doch zum einen passiert hier ja sonst nicht viel 😅 und zum anderen interessiert es vielleicht noch jemand hier, der nicht auf GitHub aktiv ist (who knows).
Einleitung:
Ab und an mache ich doch mal noch etwas mit AutoIt, neben anderen Sprachen in denen ich beruflich unterwegs bin.
Dann kam deine Meldung zur Performance-Verbesserung deiner JSON.au3 UDF und prompt hatte ich mal wieder ein wenig Lust aktiv zu werden 😀 .
Fragestellung:
Warum existiert eigentlich kein "Array to JSON" in der UDF? Vielleicht tut es das (indirekt) und ich habe 🍅 auf den Augen, doch ich fand es vor zwei Wochen nicht.
Also _JSON_Generate verhält sich sicher wie gewünscht, doch entspricht dies nicht dem output JSON string den ich "brauche" #spielerei.
Code (mit Beispieldaten):
#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7
#AutoIt3Wrapper_AU3Check_Stop_OnWarning=y
#include-once
#include "JSON.au3"
_Main()
Func _Main()
Local $aTable[][3] = _
[ _
['Feature', 'Technologie', 'Status'], _
['REST API - User', 'Node.js', 'Fertig'], _
['Datenbank-Migration', 'SQL', 'Geplant'], _
['Frontend Dashboard', 'React', 'Im Review'], _
['Unit Tests - Auth', 'Python', 'In Arbeit'], _
['CI/CD Pipeline', 'GitHub Actions', 'Fertig'], _
['Performance Tuning', 'Go', 'Offen'] _
]
Local $aList[] = _
[ _
'Weekday', _
'Monday', _
'Tuesday', _
'Wednesday', _
'Thursday', _
'Friday', _
'Saturday', _
'Sunday' _
]
_WriteFile('.\output\json-generate-table.json', _JSON_Generate($aTable))
_WriteFile('.\output\array-to-json-table.json', _JSON_Unminify(_ArrayToJson($aTable)) & @CRLF)
_WriteFile('.\output\json-generate-list.json', _JSON_Generate($aList))
_WriteFile('.\output\array-to-json-list.json', _JSON_Unminify(_ArrayToJson($aList)) & @CRLF)
EndFunc
Func _ArrayToJson(ByRef $aTable)
Local $iRows = UBound($aTable)
Local $iColums = UBound($aTable, 2)
If $iRows < 2 Then
Return '[]'
EndIf
If $iColums < 2 Then
Return _Array1DToJson($aTable)
EndIf
Local $aKeys[$iColums]
For $iCol = 0 To $iColums - 1
$aKeys[$iCol] = $aTable[0][$iCol]
Next
Local $sJson = '['
For $iRow = 1 To $iRows - 1
$sJson &= '{'
For $iCol = 0 To $iColums - 1
$sJson &= StringFormat('"%s":"%s"', $aKeys[$iCol], $aTable[$iRow][$iCol])
If $iCol < $iColums - 1 Then
$sJson &= ','
EndIf
Next
$sJson &= '}'
If $iRow < $iRows - 1 Then
$sJson &= ','
EndIf
Next
$sJson &= ']'
Return $sJson
EndFunc
Func _Array1DToJson(ByRef $aList)
Local $iRows = UBound($aList)
If $iRows < 2 Then
Return '{}'
EndIf
Local $sKey = $aList[0]
Local $sJson = StringFormat('{"%s":[', $sKey)
For $iRow = 1 To $iRows - 1
$sJson &= StringFormat('"%s"', $aList[$iRow])
If $iRow < $iRows - 1 Then
$sJson &= ','
EndIf
Next
$sJson &= ']}'
Return $sJson
EndFunc
Func _WriteFile($sFile, $sText)
Local Const $iUtf8NoBom = 256
Local Const $iOverwriteCreation = 2 + 8
Local Const $iMode = $iUtf8NoBom + $iOverwriteCreation
Local $hFile = FileOpen($sFile, $iMode)
FileWrite($hFile, $sText)
FileClose($hFile)
EndFunc
Alles anzeigen
Wäre dies etwas was in die UDF passen würde? Falls ja, dann stelle ich gern den PR dazu, außer du willst es ganz anders - wie ich dich kenne performanter - machen 😇 .
Output:
[
[
"Feature",
"Technologie",
"Status"
],
[
"REST API - User",
"Node.js",
"Fertig"
],
[
"Datenbank-Migration",
"SQL",
"Geplant"
],
[
"Frontend Dashboard",
"React",
"Im Review"
],
[
"Unit Tests - Auth",
"Python",
"In Arbeit"
],
[
"CI/CD Pipeline",
"GitHub Actions",
"Fertig"
],
[
"Performance Tuning",
"Go",
"Offen"
]
]
Alles anzeigen
[
{
"Feature": "REST API - User",
"Technologie": "Node.js",
"Status": "Fertig"
},
{
"Feature": "Datenbank-Migration",
"Technologie": "SQL",
"Status": "Geplant"
},
{
"Feature": "Frontend Dashboard",
"Technologie": "React",
"Status": "Im Review"
},
{
"Feature": "Unit Tests - Auth",
"Technologie": "Python",
"Status": "In Arbeit"
},
{
"Feature": "CI/CD Pipeline",
"Technologie": "GitHub Actions",
"Status": "Fertig"
},
{
"Feature": "Performance Tuning",
"Technologie": "Go",
"Status": "Offen"
}
]
Alles anzeigen
Viele Grüße
Sven
WebDriver Beispiel/Variante (6 Sek.).
HTTP-Request-Variante (OIDC) geht sicher schneller, aber auch ggf. komplexer.
Hier zunächst der Login (mit dummy Daten, daher kein erfolgreicher Login).
Was musst du tun/anpassen, nachdem du "Download ZIP" gemacht hast.
Oder du clone'st das Repo., wenn du über Git gehen willst.
What's next?
Sobald du bestätigst, dass es klappt bei dir Tweaky , können wir die PV-Anlage Daten aufspüren und extrahieren, je nach Bedarf deines Bekannten. Dazu bitte Kontaktaufnahme via Direktnachricht.
Viele Grüße
Sven
Do you like it? Give the project a ⭐ Star.
Zum einen war das nur eine "Etwa-Angabe" mit den 2 min, da ich nicht weiß wie viel Daten durch den WebDriver gezogen werden müssen, zum anderen weiß ich nicht wie viel navigiert werden muss usw.
Es kann auch in 30 sec oder schneller abgeschlossen sein.
Zu deiner Frage: Es gibt nicht "den einen" WinHTTP Befehl mit dem du dich einloggst. Du musst das Login Verfahren (Authentifizierung via OpenID Connect flow) beachten. Das werden mehrere GET/POST requests mit Cookie- und Header-Verwendung sein. Doch auch dies sind Annahmen. Zwar ziemlich Sichere, doch das wird sich zeigen wie der Anbieter/Server es verwendet.
Ohne Zugangsdaten wird das so oder so nix, außer du willst dich via WebDriver (ich wechsle wieder den Kontext) an den offenen Browser hängen, in dem die Session und damit der erfolgreiche Login bereits besteht. Auch dies erfordert die Credentials einmalig.
Sind das wirklich vertrauliche Daten? Wenn du mir die Daten zukommen lässt, kann ich herum experimentieren. Doch dies erfordert natürlich vertrauen, dass verstehe ich.
Viele Grüße
Sven
Nachtrag: _WinHttpSimpleSSLRequest ist schon okay, nur musst du die richtigen Parameter und Werte übergeben, die findest du aber nicht so einfach. Daher der Hinweis zu Cookies und Header. Einfacher wird wahrscheinlich der WebDriver Weg sein.
Wenn es egal ist, ob die Daten die dein Bekannter herunterladen möchte, innerhalb von < 5 sec heruntergeladen oder < 2 min, dann können wir auch den WebDriver Weg gehen. Doch auch da, müssen wir erstmal am Login vorbei.
Ich kann dir das Template bis zum Login bereitstellen, dann kannst du bei dir testen und dann kommt der zweite Schritt, die eigentlichen Daten holen. Dafür müssten wir wahrscheinlich mal zusammen drauf schauen, wenn es zügig gehen soll. Denn ansonsten schicken wir etliche Screenshots usw. hin und her, was mühsig ist.
Wenn du magst und sonst keiner eine schnellere oder einfacherer Lösung hier haben sollte, schreibe mich gern mal per Direktnachricht an.
Ich bin ab heute Abend wieder am Rechner.
Viele Grüße
Sven
Hi Tweaky ,
liebend gern würde ich dir helfen, doch zunächst brauche ich erstmal einen Account (Test-Account) von dir 😅 , da ich/wir ansonsten nur die OIDC authorization Seite (die Login) Seite sehen und dort nicht weiter kommen. An sich wird es dann über mind. zwei Requests laufen, wenn es der Standard flow von OpenID Connect ist. Also ein Request für die Authentifizierung, damit erhällt man den Token, welchen man dann dem /token Request mitgeben muss, damit man auf der "eingeloggten" Seite landet, die du wahrscheinlich siehst.
Danach können wir uns um die Daten kümmern, die du abgreifen (scrappen) möchtest. Doch vorher erstmal der Login.
Ich habe sowas schon einige Male gemacht, daher kein riesen Akt, doch ich benötige Credentials 😁 .
Falls der OpenID Connect flow ein unüblicher ist, wird es komplizierter (zumindest für mich).
Das Ganze würde ich dann in bash/shell und AutoIt aufteilen, anstatt über die WinHTTP zu gehen, da hier mit Cookies gearbeitet werden muss.
https://login.fronius.com/authenticationendpoint/login.do
?client_id=mf_o9iTAyKemNLQTa6Sp6HYonCIa
&commonAuthCallerPath=%2Foauth2%2Fauthorize
&forceAuth=false
&nonce=638927594827919966.OTY0ZTBiMjEtOWNlOC00NjhlLWE2NzktZjg1MmMyNzFmYWMyNGIyMDYyNjktOTUyNS00NmZhLWFiMjEtYmIzZmVlNmU0NzFh
&passiveAuth=false
&redirect_uri=https%3A%2F%2Fwww.solarweb.com%2FAccount%2FExternalLoginCallback
&response_mode=form_post
&response_type=code+id_token
&scope=openid+profile+solarweb+solweb_browserid_dab8e5a11388a82a73864718098bb87f
&state=OpenIdConnect.AuthenticationProperties%3DYJvfhtbK35iRQnPx6YBi9aJZT-LD-V83rvbIxZcxi6ysyiVWTPTEcbRjXBxvv-MB-If_NVHxRbQkM_-AlJmHmaxG09CQOEaag0KjNdnzGdRnIju9fQt-QOczfFHKAjlNlKyZL8AczTzi15AaIs8HM8NWCv-YbBRPZ9v5y-4OY022T4Sqo9Q3ckE0seQLqTq-8B9lKnLgf-thimJQzo79Rafm99ydsmdDoK2wnPM-GJbsolHD6V4IyrrI2qyHstBSrAESoRzrRAe93XcGMEjTNyx379K7aqFfnMJwvw97lpMxAG_Ew50_GhnyCPcwnW8twheqCpno1BEVTMIcVW1b86pkvEo
&tenantDomain=carbon.super
&x-client-SKU=ID_NET472
&x-client-ver=8.0.2.0
&sessionDataKey=f1ef66ce-68bb-482e-b018-2e9901eefa8f
&relyingParty=mf_o9iTAyKemNLQTa6Sp6HYonCIa
&type=oidc
&sp=Solar.web+-+Portals
&isSaaSApp=false
&authenticators=SAMLSSOAuthenticator%3AFronius+Login%3BFroniusBasicAuthenticator%3ALOCAL
Alles anzeigen
Viele Grüße
Sven
Gerne 🤝 .
Viele Grüße
Sven
Falls du Jensen.. wirklich vom 12 Std. Eingangsformat "HH:MM am|pm" (08:30 pm) zum 24 Stunden Format "HH:MM" (20:30) wechseln willst und nur die PM/AM Angabe hast, dann hilft dir die folgende Funktion:
Func _Time12hTo24h($sTime)
Local Const $iLeadingTrailingFlag = 1 + 2
$sTime = StringStripWS($sTime, $iLeadingTrailingFlag)
$sTime = StringLower($sTime)
Local Const $bIsPM = (StringInStr($sTime, 'pm') > 0)
Local Const $bIsAM = (StringInStr($sTime, 'am') > 0)
Local Const $sValidCharsPattern = '^[0-9]{1,2}:[0-9]{1,2}(?:\s?(?:am|pm))?$'
If Not StringRegExp($sTime, $sValidCharsPattern) Then
Return SetError(1, 0, -1)
EndIf
$sTime = StringRegExpReplace($sTime, '[^0-9:]', '')
Local $aTime = StringSplit($sTime, ':')
Local $iHour = Number($aTime[1])
Local $iMinute = Number($aTime[2])
Local $iSec = 0
If $aTime[0] >= 3 Then
$iSec = Number($aTime[3])
EndIf
Local $bIsValid = True
Select
Case $iHour < 0 Or $iHour > 12
$bIsValid = False
Case $iMinute < 0 Or $iMinute > 59
$bIsValid = False
Case $iSec < 0 Or $iSec > 59
$bIsValid = False
EndSelect
If Not $bIsValid Then
Return SetError(1, 0, -2)
EndIf
If $bIsPM And $iHour < 12 Then
$iHour += 12
EndIf
If $bIsAM And $iHour = 12 Then
$iHour = 0
EndIf
Local $sHour = StringRight('0' & $iHour, 2)
Local $sMinute = StringRight('0' & $iMinute, 2)
Return $sHour & ':' & $sMinute
EndFunc
Alles anzeigen
Okay:
ConsoleWrite(_Time12hTo24h('1:20 AM') & @CRLF) ; 01:20
ConsoleWrite(_Time12hTo24h('1:20 PM') & @CRLF) ; 13:20
ConsoleWrite(_Time12hTo24h('08:30 PM') & @CRLF) ; 20:30
ConsoleWrite(_Time12hTo24h('12:00 AM') & @CRLF) ; 00:00
ConsoleWrite(_Time12hTo24h('12:01 AM') & @CRLF) ; 00:01
ConsoleWrite(_Time12hTo24h('12:00 PM') & @CRLF) ; 12:00
ConsoleWrite(_Time12hTo24h('12:01 PM') & @CRLF) ; 12:01
ConsoleWrite(_Time12hTo24h('7:5 pm') & @CRLF) ; 19:05
ConsoleWrite(_Time12hTo24h('7:5pm') & @CRLF) ; 19:05
ConsoleWrite(_Time12hTo24h('7:5 am') & @CRLF) ; 07:05
ConsoleWrite(_Time12hTo24h('7:5') & @CRLF) ; 07:05
ConsoleWrite(_Time12hTo24h('08:30') & @CRLF) ; 08:30
Alles anzeigen
Fehlerbehandlung:
ConsoleWrite(_Time12hTo24h('25:30') & @CRLF) ; -2
ConsoleWrite(_Time12hTo24h('14:61') & @CRLF) ; -2
ConsoleWrite(_Time12hTo24h('0830') & @CRLF) ; -1
ConsoleWrite(_Time12hTo24h('08 : 30') & @CRLF) ; -1
ConsoleWrite(_Time12hTo24h('08: 30') & @CRLF) ; -1
ConsoleWrite(_Time12hTo24h('8: 30') & @CRLF) ; -1
ConsoleWrite(_Time12hTo24h('-1:-1') & @CRLF) ; -1
ConsoleWrite(_Time12hTo24h('*12:*05') & @CRLF) ; -1
ConsoleWrite(_Time12hTo24h('*12:*05 pm') & @CRLF) ; -1
Viele Grüße
Sven
Hi Jensen.. ,
schau' dir mal die Hilfe zu _DateTimeFormat an. Dein $sZeit Format ist falsch.
| Input date in the format "YYYY/MM/DD[ HH:MM:SS]" |
Korrigierter Code:
#include <Date.au3>
Local $sZeit = "2025/09/01[ 20:30:00]"
; In 24h-Format umwandeln
Local $sNeuZeit = _DateTimeFormat($sZeit, 4)
MsgBox(0, "Ergebnis", $sNeuZeit) ;Ausgabe soll sein: 20:30
Viele Grüße
Sven
Capture_3440x1440.webp, 6.946 KB
Target fps: 30
Recording time: 20 seconds
Recording screen dim: 3440 x 1440
Starting fullscreen capturing in 3 seconds...
kmin: 24
kmax: 38
ellapsed: 20.18961020000279 seconds
frames captured: 142 7.033320534340003 fps
frame index: 142 7.033320534340003 fps
delta : 0 0 %
total frames: 600 target fps 30 delta: 0.2366666666666667 %
File size: 7112614 bytes
Done
Alles anzeigen
Läuft mit Win10, jedoch ein wenig ruckelig bei mir.
Mal schauen ob dir das hilft UEZ 🤞 .
Viele Grüße
Sven
Meiner Ansicht nach liegt das (wahrscheinlich konfigurative) Problem bei dir lokal golum .
Die Anforderungen an SMTP seitens GMX sind zum einem nicht unüblich und zum anderen auch nicht besonders strikt oder so.
Daher bin ich auch der Meinung das dein System entsprechend angepasst werden muss, da SMTP seit Jahrzehnten recht unverändert ist und "nur" TLS, SSL und wie sie alle heißen als Hürden (oder als zusätzlicher Anspruch an die Sicherheit) dazugekommen ist.
Ich verfolge den Thread auf jeden Fall mit Spannung 😀 - mal schauen was es am Ende bei dir gewesen sein wird.
Viele Grüße
Sven
Oha, die 2'er Version!? Ohne zu recherchieren oder ein LLM zu befragen weiß ich nicht, wie das Cmdlet damals war/was es braucht. Meine erste Empfehlung ist auf mind. Win10 umsteigen 😅 , und zweitens zumindest auf Powershell 5.1 (auch unter Windows 7 möglich) zu upgraden.
Viele Grüße
Sven