Powershell - mehrere Pfade abfragen und in Teams posten
Hallo in die Runde,
ich selbst bin Anfänger in Powershell und stehe vor einem Problem, dass ich bereits unelegant gelöst hatte.
Ich habe mehrere Dateien, die regelmäßig auf Vorhandensein geprüft werden sollen. Anschließend werden die Ergebnisse über Variablen in eine MS Teams Card geschrieben.
PROBLEM: Es funktioniert zwar, aber ich finde es doch recht sperrig und unelegant und ich zerbreche mir das Hirn, wie es schöner ginge. Man will ja auch was lernen. Ich hatte schon die Idee eventuell über PSCustomObject mit den Values "Name" und "Pfad" zu arbeiten ... will irgendwie nicht funktionieren.
Bisher war mein Lösungsweg folgendermaßen:
- Ich habe für jede Datei eine Variable definiert, die den Pfad enthält. Sagen wir $Datei1 = "C:\Ordner\Datei1.txt"
- Insgesamt sind es 8 Dateien.
- Da ich am Ende das Ergebnis des Test-Path nicht als "True" oder "False" ausgeben lassen will, habe ich für jede Variable einen Antwortwert definiert. Also:
$Datei1Response = $Datei2Response = .. = $Datei8Response = "✅"
#das ist ein grüner Haken, um die Aufzählung im Forum auszusparen, habe ich mich gerade mal der ".." bedient)
- Anschließend läuft der Test-Path für jede Datei durch, der im Zweifel, falls die Datei nicht existiert, den Wert für die Response-Variable auf ein rotes X setzt.
- Abschließend wird eine Adaptive Karte in einen Teams-Kanal geschickt und die Werte als Tabelle ausgegeben.
Ich wäre sehr dankbar für jede Idee.
ich selbst bin Anfänger in Powershell und stehe vor einem Problem, dass ich bereits unelegant gelöst hatte.
Ich habe mehrere Dateien, die regelmäßig auf Vorhandensein geprüft werden sollen. Anschließend werden die Ergebnisse über Variablen in eine MS Teams Card geschrieben.
PROBLEM: Es funktioniert zwar, aber ich finde es doch recht sperrig und unelegant und ich zerbreche mir das Hirn, wie es schöner ginge. Man will ja auch was lernen. Ich hatte schon die Idee eventuell über PSCustomObject mit den Values "Name" und "Pfad" zu arbeiten ... will irgendwie nicht funktionieren.
Bisher war mein Lösungsweg folgendermaßen:
- Ich habe für jede Datei eine Variable definiert, die den Pfad enthält. Sagen wir $Datei1 = "C:\Ordner\Datei1.txt"
- Insgesamt sind es 8 Dateien.
- Da ich am Ende das Ergebnis des Test-Path nicht als "True" oder "False" ausgeben lassen will, habe ich für jede Variable einen Antwortwert definiert. Also:
$Datei1Response = $Datei2Response = .. = $Datei8Response = "✅"
#das ist ein grüner Haken, um die Aufzählung im Forum auszusparen, habe ich mich gerade mal der ".." bedient)
- Anschließend läuft der Test-Path für jede Datei durch, der im Zweifel, falls die Datei nicht existiert, den Wert für die Response-Variable auf ein rotes X setzt.
if (-not(Test-Path $Datei1))
{
$Datei1Response = "❌"
}
- Abschließend wird eine Adaptive Karte in einen Teams-Kanal geschickt und die Werte als Tabelle ausgegeben.
$JSONBody = [PSCustomObject][Ordered]@{
"@type" = "MessageCard"
"@context" = "http://schema.org/extensions"
"summary" = "Zusammenfassung WE-VT"
"themeColor" = '#E74856'
"title" = "Check"
"sections" = @(
@{
"facts" = @(
@{
"name" = "Datei 1"
"value" = "$Datei1Response"
}
@{
"name" = "Datei 2"
"value" = "$Datei2Response"
}
)
"markdown" = $true
}
)
}
$TeamMessageBody = ConvertTo-Json $JSONBody -Depth 100
$parameters = @{
"URI" = 'https://bliblablubb'
"Method" = 'POST'
"Body" = $TeamMessageBody
"ContentType" = 'application/json'
}
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls12
Invoke-RestMethod @parameters
Ich wäre sehr dankbar für jede Idee.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 4785285731
Url: https://administrator.de/contentid/4785285731
Ausgedruckt am: 19.11.2024 um 22:11 Uhr
3 Kommentare
Neuester Kommentar
Statt den ganzen unnötigen Variablen nimm einfach ne Hashtable mit den Pfaden als Keys und dem Response-Code als Value und arbeite die dann mit ner Schleife ab ...
Uk.
$data = [ordered]@{
"C:\Pfad1\datei1.txt" = "❌"
"C:\Pfad2\datei2.txt" = "❍"
"C:\Pfad3\datei3.txt" = "❎"
}
$data.GetEnumerator() | %{
If (!(Test-Path $_.Key)){
"Pfad '$($_.Key)' existiert nicht, Response = $($_.Value)"
}
}
Zitat von @ElGotto:
Über die Schleife soll jetzt aber getestet werden, ob die Datei, also der Key, existiert, wenn nicht, dann soll die Value den Wert "Fehlt" annehmen?!
Das obige war so gedacht daß du im Test-Path Abschnitt deine Mitteilung machst, aber wenn du nur in die Hashtable updaten willst, machst du das bspw. soÜber die Schleife soll jetzt aber getestet werden, ob die Datei, also der Key, existiert, wenn nicht, dann soll die Value den Wert "Fehlt" annehmen?!
https://tio.run/##fY6xCsIwEIb3PkUMEezQQttNEARBkAp2cEtDCeRqC8GWJKCiffYYEx ...