elgotto
Goto Top

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.

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. face-smile

Content-ID: 4785285731

Url: https://administrator.de/forum/powershell-mehrere-pfade-abfragen-und-in-teams-posten-4785285731.html

Ausgedruckt am: 20.12.2024 um 19:12 Uhr

4400667902
Lösung 4400667902 28.11.2022 aktualisiert um 10:24:57 Uhr
Goto Top
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 ...
$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)"  
    }
}
Uk.
ElGotto
ElGotto 29.11.2022 um 09:39:44 Uhr
Goto Top
Wie kann ich denn die Values ändern anschließend? Da hänge ich fest.
Grundlegend sollen die Values ja erstmal alle den selben Wert haben, sagen wir "OK".

Ü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?!

Ich hatte jetzt etwas rumprobiert, aber so recht klappen will es nicht.

$data.GetEnumerator() | %{
    If (!(Test-Path $_.Key)){
        $_.Value = "Fehlt"  
    }
}

Wo liegt mein Denkfehler?
4400667902
4400667902 29.11.2022 aktualisiert um 09:54:49 Uhr
Goto Top
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
https://tio.run/##fY6xCsIwEIb3PkUMEezQQttNEARBkAp2cEtDCeRqC8GWJKCiffYYEx ...