Powershell – prüfen, ob Datei vorhanden und enthält string-Muster

schrieb dieser kleine Teil des Codes zu überprüfen, ob Datei vorhanden und enthält string-Muster

try {
$SEL = Select-String -Path \\$serversPing\c$\Scripts\compare_result.txt -Pattern "no differences encountered" -ErrorAction SilentlyCOntinue
}catch{
    $ErrorMessage = $_.Exception.Message
    $FailedItem = $_.Exception.ItemName
}
Finally {
if ($SEL | Test-Path -ErrorAction SilentlyContinue){
    #write-host $serversPing $SEL.Pattern
    #write-host $serversPing $SEL
    if ($SEL.Pattern -eq "no differences encountered")
    {
       $SoftCheckResult = "ok"
    }
    else
    {
        $SoftCheckResult ="Verify"
    }

}
else{
    $SoftCheckResult =  "NotInScope"
}
}

Aber, es macht nicht das was es sollte. Zuerst von allen, die es teilweise erkennen, dass der Pfad vorhanden ist und zweitens tut es teilweise erkennen Muster in der txt-Datei. Können Sie mir bitte helfen?

Ich vermute, dass MUSTER ist teilweise erkennbar auf multiplizieren server.(whitepaces etc) auch so wie überspringen?

Seltsam finde ist, dass Sie nicht sehen, dass Muster fehlt in der Datei zurück
NotinScope stattdessen Überprüfen
Unten Datei ohne dieses Muster

Powershell - prüfen, ob Datei vorhanden und enthält string-Muster

Und unten können Sie sehen, die normalen Muster

Powershell - prüfen, ob Datei vorhanden und enthält string-Muster



4 Replies
  1. 1

    Da Sie plural in $serversPing vermute ich, dass diese variable kommt aus einem früheren Teil des Codes und enthält eine SAMMLUNG von Servern.

    Ich würde ändern Sie die Reihenfolge der Prüfungen und beginnt mit einem test, um zu sehen, ob die Datei auf dem server vorhanden ist oder nicht:

    # As you mentioned a possible whitespace problem the pattern below uses regex `\s+` so multiple whitespace characters are allowed betwen the words.
    $pattern = "no\s+differences\s+encountered"
    foreach ($server in $serversPing) {
        if (Test-Connection $server -Count 1 -Quiet) {
            $filePath = Join-Path -Path "\\$server" -ChildPath 'c$\Scripts\compare_result.txt'
            if (Test-Path $filePath -PathType Leaf) {
                # -Quiet:       Indicates that the cmdlet returns a Boolean value (True or False), instead of a MatchInfo object. 
                #               The value is True if the pattern is found; otherwise, the value is False.
                if (Select-String -Path $filePath -Pattern $pattern -Quiet) {
                    Write-Host "Pattern '$pattern' found in '$filePath'"
                    $SoftCheckResult = "ok"
                }
                else {
                    Write-Host "Pattern '$pattern' not found in '$filePath'"
                    $SoftCheckResult = "Verify"
                }
            }
            else {
                Write-Host "File '$filePath' not found"
                $SoftCheckResult ="NotInScope"
            }
        }
        else {
                Write-Host "Server '$server' is off-line."
                $SoftCheckResult ="OffLine"
        }
    }

    Habe ich ein Test-Connection in die foreach-Schleife zum ersten mal sehen, wenn der server online ist oder nicht. Wenn Sie überprüft haben, dass vor und die $serversPing variable enthält nur die Server sind online und erreichbar sind, können Sie überspringen.

    • Danke es funktionierte wie ein Charme ….
  2. 0

    Bezüglich der -Pfad in der Select-String-cmdlet, sollten Sie den Wert zwischen den „“ :

    $SEL = Select-String -Path "\\$serversPing\c$\Scripts\compare_result.txt" -Pattern "no differences encountered" -ErrorAction SilentlyCOntinue

    BEARBEITEN

    Dies sollte den trick tun :

    try {
        $SEL = Select-String -Path \\$serversPing\c$\Scripts\compare_result.txt -Pattern "no differences encountered" -ErrorAction SilentlyCOntinue
    }catch{
        $ErrorMessage = $_.Exception.Message
        $FailedItem = $_.Exception.ItemName
    }
    Finally {
        if ($SEL){
            $SoftCheckResult = "ok"
        }
        else
        {
            $SoftCheckResult ="Verify"
        }
    }
    • Seltsam finde ist, dass Sie nicht sehen, dass Muster fehlt in der Datei, es wieder NotinScope stattdessen Überprüfen
    • Was tut compare_result.txt enthält ? Derzeit Sie sind auf der Suche nach der Zeichenfolge „keine Unterschiede festgestellt“ in Ihrem text-Datei, ist, dass das, was Sie tun wollen ? Nach Ihrer Select-String-cmdlet $SEL wird enthält nur eine Zeile mit dieser Zeichenkette, so das Test-Path-cmdlet ist unwahrscheinlich, um zu arbeiten.
    • Ich bearbeitet, um hinzufügen von Datei-Inhalten
    • ALSO, was soll ich tun, anstatt zu Test-Path?
    • Ich bearbeitet meine Antwort zu beachten, was Ihr mir berichtet habt. Tut es das, was Sie wollen ?
  3. 0
    try
    {
        $SEL = $null
        $SEL = Select-String -Path \\$serversPing\c$\Scripts\compare_result.txt -Pattern "no differences encountered" -ErrorAction Stop
        if ($SEL)
        {
            $SoftCheckResult = "ok"
        }
        else
        {
            $SoftCheckResult = "Verify"
        }
    }
    catch
    {
        $ErrorMessage = $_.Exception.Message
        $FailedItem = $_.Exception.ItemName
        $SoftCheckResult = "NotInScope"
    }
    return $softCheckResult 
  4. 0

    Bitte versuchen Sie es wie unten :

    $SEL = "Fiile path location"
    if ($SEL | Test-Path -ErrorAction SilentlyContinue){
    
    if ($SEL Get-Content | Select-String -pattern "no differences encountered")
    {
    
    }
    ....
    }
    • seltsam … was ist das $SELGet ?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.