Automatischer Dateiexport via Powershell

Startseite – Aktivität Foren Allgemeines Automatischer Dateiexport via Powershell

This topic contains 0 replies, has 1 voice, and was last updated by  Nicolas Bernard 2 months, 1 week ago.

Viewing 1 post (of 1 total)
  • Author
    Posts
  • #2296

    Nicolas Bernard
    Participant

    Hallo liebe Onlinegemeinde,

    Auch heute stelle ich wieder eine Aufgabe aus meinem Betriebsalltag vor: Diesmal geht es um einen automatischen Report Export.
    Jeden Monat gilt es, einen speziell nach Kundenanforderungen editierten Report über die Serverlandschaft zu publizieren. Die mir vorliegende (automatisch erzeugte) CSV-Datei muss zuerst noch etwas angepasst werden. Dafür habe ich mir wieder Powershell zu Hilfe genommen und die verschiedenen Schritte nacheinander durchgeführt und auch eine Logging Routine eingebaut. Folgendes Script ist dabei entstanden:

    Skript to edit and move report data.
    #Created by Nicolas Bernard – CWD-Solution – September 2019

    #Variables
    $ReportingPath = “C:\Reporting”
    $FileType = @(“.csv”)
    $Logbook = “C:\Reporting\Logbook.log”
    $SCOMReportsPath = “\<—>\Service Reporting\<MMyyyy>Reports”

    #Funciton Logwriter
    function Write-Log([string]$logtext, [int]$level)
    {
    $Logdate = get-date -format “yyyy_MM_dd HH:mm:ss”
    if($level -eq 0)
    {
    $logtext = “[INFO] ” + $logtext
    $text = “[“+$logdate+”] – ” + $logtext
    Write-Host $text
    }
    if($level -eq 1)
    {
    $logtext = “[WARNING] ” + $logtext
    $text = “[“+$logdate+”] – ” + $logtext
    Write-Host $text -ForegroundColor Yellow
    }
    if($level -eq 2)
    {
    $logtext = “[ERROR] ” + $logtext
    $text = “[“+$logdate+”] – ” + $logtext
    Write-Host $text -ForegroundColor Red
    }
    $text >> $Logbook
    }

    if((Get-ChildItem -LiteralPath $ReportingPath -Directory -Force | Select-Object| Measure-Object).Count -ne 0)
    {
    $folders = Get-childItem $ReportingPath -Directory

    Foreach($folder in $folders)
    {
    $InPath = $ReportingPath+”\”+$folder.Name+”\IN”
    $InPathArchive = $InPath+”\Archive”
    $OutPath = $ReportingPath+”\”+$folder.Name+”\OUT”
    $OutPathArchive = $OutPath+”\Archive”

    #Check if there are reports are in the IN folder
    if((Get-ChildItem -LiteralPath $InPath -File -Force | Select-Object | Measure-Object).Count -ne 0)
    {

    #Datei(en) gefunden

    #Suche nur nach CSV Datein im IN Path
    $files = Get-childItem $InPath -File -Filter *$FileType
    if($files.count -ne 0)
    {
    foreach($file in $files)
    {
    $InPathFile = $InPath +”\”+$file.Name
    $OutPathFile = $OutPath+”\”+$file.Name

    Try{
    #Abschneiden der ersten 3 Zeilen im .CSV Dokument
    $sr = New-Object -TypeName System.IO.StreamReader -ArgumentList $InPathFile
    $sw = New-Object -TypeName System.IO.StreamWriter -ArgumentList $OutPathFile
    $i = 0

    Do {
    $line = $sr.ReadLine()
    $i++
    If ($i -ge 4)
    {
    $sw.WriteLine($line)
    }
    }
    Until ( $sr.EndOfStream )

    $sr.close()
    $sw.close()

    Write-Log “$InPathFile successfuly edited” 0
    }
    Catch
    {
    Write-Log “Error occured when editing $file” 3
    }

    Try{
    #Verschieben der Datei nach erfolgreichem bearbeiten
    Move-Item $InPathFile $InPathArchive
    Copy-Item $OutPathFile $SCOMReportsPath

    }
    Catch{
    Write-Log “Error moving $file into $OutPath” 3
    }
    }
    }
    else{
    Write-Log “No *.CSV files in $InPath” 0
    }

    }
    else{
    Write-Log “No files in $InPath” 0
    }
    }
    }

    Man kann einfach alles automatisieren! Macht euch einmal den Aufwand ein System, Script oder eine sonstige Routine zu erstellen, testet auf verschiedene Fehlerquellen und spart euch in Zukunft alle kommenden Wiederholungen der Aufgabe.

    Viele Grüße & bis zum nächsten Blogpost
    Nicolas Bernard

Viewing 1 post (of 1 total)

You must be logged in to reply to this topic.