Wie kann ich im folgendem Powershell Script eine Farbige Ausgabe erzielen?

Habe folgenden Code, welcher auch funktioniert: #_________________________HAUPTPROGRAMM_______________________________________________________________________________________________________________________________________________________________________#

$empfaengerMail = Get-Content "C:\Users\ms\Desktop\empfaenger.txt"
$datum = get-date -uFormat "%d.%m.%Y"
$wochentag = Get-Date -format dddd
$kalenderwoche = [System.Globalization.DateTimeFormatInfo]::CurrentInfo.Calendar.GetWeekOfYear((get-date),2,1)
$servers = Get-Content "C:\Users\ms\Desktop\Servers.txt"

    $ab = gwmi Win32_LogicalDisk -ComputerName $servers -Filter "DriveType='3'" | select Systemname,DeviceID,@{n="Speicherplatz (GB)";e={"{0:F2}" -f ($_.Size / 1GB)}},@{n="Freier Speicherplatz (GB)";e={"{0:F2}" -f ($_.Freespace / 1GB)}}
    $ab | Sort-Object Systemname | Format-List -GroupBy Systemname | Out-File "C:\Speicherplatz CST-Server\Speicherplatz_$datum.txt" -Encoding UTF8



#_________________________VERSENDEN DER LOGFILES_____________________________________________________________________________________________________________________________________________________________#


#_________________________VERSENDEN VIA SMTP_________________________________________________________________________________________________________________________________________________________________#
$emailSmtpServer = "dominica.cst.lokal"
$emailSmtpServerPort = "587"
$emailSmtpUser = "benutzername"
$emailSmtpPass = "passwort"
$attachment = "C:\Speicherplatz CST-Server\Speicherplatz_$datum.txt"

$attach = New-Object Net.Mail.Attachment($attachment)
$emailMessage = New-Object System.Net.Mail.MailMessage
$emailMessage.Attachments.Add($attach) 
$emailMessage.From = "Speicherplatz Manager <support@creativesoftware.de>"
$emailMessage.To.Add( "support@creativesoftware.de" )
$emailMessage.Subject = "CST: Speicherplatz Übersicht am $wochentag KW$kalenderwoche"
$emailMessage.IsBodyHtml = $true
$emailMessage.Body = @"
<p>Speicherplatz von CST in Übersicht</p>
<p></p>
<p>Anbei der Speicherplatz als Textdatei angehängt!</p>
<p></p>
<p>Stand: $datum</p>
"@
 
$SMTPClient = New-Object System.Net.Mail.SmtpClient( $emailSmtpServer , $emailSmtpServerPort )
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential( $emailSmtpUser , $emailSmtpPass );
 
$SMTPClient.Send( $emailMessage )


Dies wird alles in einer schönen HTML Tabelle ausgegeben. Nun möchte ich, dass das Feld mit Freespace rot wird, wenn es unter 15% fällt.... Ich weiß aber nicht wie das geht

HTML, PowerShell
Täglicher automatisierter Vergleich zweier csv Dateien?

Hallo,

da ich leider nicht alle technischen Begriffe richtig kenne und deshalb evtl. hier falsch verwende bereits vorab die Bitte um Entschuldigung.

Ich bekomme täglich eine csv Datei mit Daten aktueller, also zum heutigen Tag angestellten, Mitarbeitern. Hier steht bspsweise Personalnummer (eindeutiger Schlüssel), Nachname, Vorname,Eintrittsdatum und Austrittsdatum (Achtung: Das Austrittsdatum stimmt leider nicht immer). Zur Veranschaulichung die Datumsangaben mal weggelassen.

...

124514; Müller; Jonas;

231423; Fischer, Joachim;

423313; Haupt, Christian;

...

Sobald ein Mitarbeiter nicht mehr aktiv ist (also aus der Firma ausgetreten ist) wird der Datensatz am folgenden Tag auch nicht mehr übergeben (kommt also in der aktuellen csv Datei nichtmehr vor).

Es würde also am Folgetag die csv folgendermaßen aussehen, wenn Müller das Unternehmen verlassen hat und Newbie beispielsweise neu angefangen hat. Die Neueintritte müssen nicht abgefangen werden, wollte ich nur als Info dazusagen, dass diese dann zusätzlich in der neuen Datei vorhanden sind. Es geht ausschließlich um die Austritte, also die Mitarbeiter die in Vortagsdatei vorkamen, jetzt in tagesaktuellen aber nicht mehr vorkommen.

...

231423; Fischer, Joachim;

423313; Haupt, Christian;

599999; Newbie, Franziska;

...

Da das Austrittsdatum, welches auch mitgeliefert wird, leider teilweise nicht korrekt ist, kann ich mich nicht auf dieses Feld verlassen und irgendwie danach gehen. Auch haben beispielsweise unbefristete Mitarbeiter hier keinen Eintrag.

Ich bin nun auf der Suche nach einer Möglichkeit, wie ich die täglichen Austritte abfangen kann, also die Differenz zwischen mitgelieferten Daten der aktuellen Datei gegenüber der zum Vortag vergleichen kann. Dies sollte jeden Tag automatisiert funktioniert (durch einen Windows Dienst?)

Meine Idee war, dass ich diese beiden csv Dateien Datei H (Heute, im Beispiel oben die Datei mit Newbie) und Datei H-1 (gestern, Datei mit Müller) täglich vergleichen lassen und mir die Austritte jeweils in eine extra Datei, egal ob csv oder Excel, ausgeben lasse, sodass ich am Ende jeden Monats alle Austritte nochmal überprüfen kann.

Im obrigen Beispiel sollte dann beispielsweise der Datensatz zu Herrn Müller in eine Datei übergeben werden inkl den mitgelieferten Informationen wie Eintrittsdatum und Co. und wenn möglich dem aktuellen Tag (oder Zeitpunkt/aktueller Zeitstempel, damit nachvollzogen werden kann, wann genau dieser Mitarbeiter ausgetreten ist)

Leider fehlt mir jede technische Idee, wie ich sowas am schlausten umsetze und technisch realisiere. Hierfür wäre ich euch sehr über eure Ideen dankbar! Ich will ungern zunächst in eine komplett falsche Richtung laufen und danach bemerken, dass dies mir diesem System nicht umsetzbar ist.

Da dies wohl meine Mammutsaufgabe in meinem Praktikum sein wird, bin ich demjenigen, der sich hier die Zeit nimmt, mir bei der Lösungsfindung zu helfen, natürlich sehr, sehr dankbar! Vielen dank!

Microsoft Excel, programmieren, Makro, VBA, skript, csv, PowerShell
Powershell Script, dass Zeilenelemente einer Textdatei vertauscht. Ausgabe wird nicht korrekt formatiert?

Folgendes Problem: Ich habe diesen Quelltext hier: $lines = 0

$output = @()

(Get-Content -Path "D:\Data_24.txt" | foreach {

$elements = $_.Trim().Split(',')

if ($elements.Count -ge 6) {

$newElements = $elements[2], $elements[1], $elements[0], $elements[3], $elements[4], $elements[5]

$output += [PSCustomObject]@{ Elements = $newElements -join ',' }

}

$lines++

# Schreibe das Array in die CSV-Datei alle 700 Zeilen

if ($lines % 700 -eq 0) {

$output | Export-Csv -Path "output.csv" -NoTypeInformation -Append -Encoding UTF8

$output = @() # Leere das Array nach dem Schreiben

Write-Host "Schreibe Zeilen: $lines"

}

}) | Out-Null

# Schreibe das restliche Array in die CSV-Datei

$output | Export-Csv -Path "output.csv" -NoTypeInformation -Append -Encoding UTF8

Write-Host "Verarbeitung abgeschlossen. Gesamtanzahl der Zeilen: $lines"

...für eine Powershelldatei, die aus einer vorhandenen Textdatei alle Zeilen auslesen soll bestimmte Zeilenelemente vertauscht und das Ergebnis in einer neuen CSV - Datei abspeichern soll. Dies funktioniert soweit auch, allerdings wird aus irgendeinem Grund die komplette UTF8 Formatierung ignoriert, was bedeutet, dass bei einigen Zeilen, die in der Ausgangsdatei korrekt dargestellt werden in der neuen Datei ausschließlich Zeichensalat entsteht.

Hat einer von euch eine Idee wie man hier das Problem beheben kann? Thx schon im Voraus...

Konsolen, Formatierung, Programmiersprache, Script, Textbearbeitung, PowerShell, Textdatei
Pester Script hilfe?

Hey, kann mir jemand sagen, wiso bei diesem Pester-Script Fehlermeldungen kommen?

Pester-Script:

Import-Module Pester


BeforeAll {
    . $PSCommandPath.Replace('.Tests.ps1','.ps1')
}


$CsvContent = @"
FirstName,LastName,Username
John,Doe,jdoe
Jane,Smith,jsmith
Alex,Johnson,ajohnson
"@


$Csvfile = ".\UserList.csv"
$CsvContent | Out-File -FilePath $Csvfile


Describe "AD User Import Script" {
    BeforeAll {
        Mock -CommandName Get-ADUser -MockWith {
            param ($Filter)
            if ($Filter -like "*jdoe*") {
                return [PSCustomObject]@{ SamAccountName = "jdoe" }
            }
            return $null
        }


        Mock -CommandName New-ADUser -MockWith {
            param ($Params)
            Write-Host "Mock: New-ADUser with params: $Params"
        }


        $Users = Import-Csv $Csvfile
    }


    It "sollte Benutzer aus der CSV-Datei importieren" {
        $Users.Count | Should -Be 3
    }


    It "sollte einen neuen Benutzer im AD erstellen, wenn der Benutzer nicht existiert" {
        $User = $Users | Where-Object { $_.Username -eq "jsmith" }
        . $PSCommandPath -Csvfile $Csvfile
        Assert-MockCalled -CommandName New-ADUser -Times 1 -Exactly -Scope It
    }


    It "sollte keinen neuen Benutzer erstellen, wenn der Benutzer bereits existiert" {
        $User = $Users | Where-Object { $_.Username -eq "jdoe" }
        . $PSCommandPath -Csvfile $Csvfile
        Assert-MockCalled -CommandName New-ADUser -Times 0 -Scope It
    }


    It "sollte die richtigen Parameter für New-ADUser verwenden" {
        $User = $Users | Where-Object { $_.Username -eq "ajohnson" }
        . $PSCommandPath -Csvfile $Csvfile
        Assert-MockCalled -CommandName New-ADUser -ParameterFilter {
            $Params.SamAccountName -eq "ajohnson" -and
            $Params.UserPrincipalName -eq "ajohnson@PowerShell.local" -and
            $Params.Path -eq "OU=Benutzer,DC=PowerShell,DC=local"
        } -Times 1 -Exactly -Scope It
    }
}


afterall {
    Remove-Item -Path $Csvfile
}

Script:

$Csvfile = ".\UserList.csv"
$Users = Import-Csv $Csvfile


$Password = "TFBern_3013"


Import-Module ActiveDirectory


foreach ($User in $Users) {
    try {
        if (Get-ADUser -Filter "SamAccountName -eq '$($User.Username)'" -ErrorAction SilentlyContinue) {
            Write-Host "Ein Benutzer mit dem Benutzernamen $($User.Username) existiert bereits im Active Directory." -ForegroundColor Yellow
        } else {
            $NewUserParams = @{
                Name                  = "$($User.FirstName) $($User.LastName)"
                GivenName             = $User.FirstName
                Surname               = $User.LastName
                DisplayName           = $User.Username
                SamAccountName        = $User.Username
                UserPrincipalName     = "$($User.Username)@PowerShell.local"
                Path                  = "OU=Benutzer,DC=PowerShell,DC=local"
                AccountPassword       = (ConvertTo-SecureString $Password -AsPlainText -Force)
                Enabled               = $true
                ChangePasswordAtLogon = $true
            }


            New-ADUser @NewUserParams
            Write-Host "Der Benutzer $($User.Username) wurde erfolgreich erstellt." -ForegroundColor Green
        }
    } catch {
        Write-Host "Fehler beim Erstellen des Benutzers $($User.Username) - $($_.Exception.Message)" -ForegroundColor Red
    }
}


Programmiersprache, Script, PowerShell

Meistgelesene Fragen zum Thema PowerShell