VB.NET 2015 - Anzahl der Seiten in einer PDF ermitteln

Public Function GetPages(ByVal File As String)
      Dim PDFRD As PdfReader = New PdfReader(File)
      PDFPageCount = PDFRD.NumberOfPages
      Return PDFPageCount
End Function


Benötigt :
Imports iTextSharp.text.pdf
Imports iTextSharp.text
Imports System.Runtime.CompilerServices

Quellen :
iTextSharp - Library
http://developers.itextpdf.com/itextsharp-net
https://github.com/itext/itextsharp/releases

VB.NET 2015 - iTextSharp Seiten aus PDF Datei entnehmen (extract)

PDF Seiten aus einer PDF Datei mithilfe der Library iTextSharp in eine neue Datei exportieren.

Public Function ExtractPdfPages(ByVal SourceFile As String, ByVal TargetFile As String, ByVal IntStr As Integer, ByVal IntEnd As Integer)
        Try
            Dim impPage As PdfImportedPage = Nothing
            Dim Reader As New PdfReader(SourceFile)
            Dim srcDoc As New Document(Reader.GetPageSizeWithRotation(IntStr))
            Dim PdfCopyProvider As New PdfCopy(srcDoc, New System.IO.FileStream(TargetPath & "\" & TargetFile, System.IO.FileMode.Create))
            PdfCopyProvider.SetFullCompression()
            srcDoc.Open()
            For X = IntStr To IntEnd
                impPage = PdfCopyProvider.GetImportedPage(Reader, X)
                ' ----- Ermitteln der Seitenauflösung und setzen für die neue Seite
                PdfCopyProvider.SetPageSize(New Rectangle(0.0F, 0.0F, impPage.Width, impPage.Height))
                ' ----- PDF Seite in das neue Dokument einfügen
                PdfCopyProvider.AddPage(impPage)
            Next
            ' ----- neues PDF Dokument und den Reader schließen
            srcDoc.Close()
            Reader.Close()
        Catch ex As Exception
            Throw ex
        End Try
    End Function


Benötigt :

Imports iTextSharp.text.pdf
Imports iTextSharp.text
Imports System.Runtime.CompilerServices


Quellen :
iTextSharp - Library
http://developers.itextpdf.com/itextsharp-net
https://github.com/itext/itextsharp/releases

BATCH: Richtige ERRORLEVEL-Auswertung

ich habe heute ein Problem mit einem Tool (NcFtpPut.exe) gehabt, bei dem in einer Batch der ERRORLEVEL ausgewertet wird.
Ich habe lange sucht um herauszufinden, warum die ERRORLEVEL-Auswertung fehlerhaft ist.
Nach einiger Suche, muss ich zur meiner Schande gestehen, habe ich herausgefunden, dass ich den ERRORLEVEL seit jeher falsch verwendet habe!! ?
Hier die Erklärung – wichtig ist hier vor allem, dass der Befehl „IF NOT ERRORLEVEL 0…“ totaler Schwachsinn ist.

VIELEN DANK FÜR DIE TOLLE ERKLÄRUNG AN HORST SCHÄFFLER!!

Quelle: http://www.antonis.de/dos/batchtut/bat-kurs/#10

=========== IF ERRORLEVEL n ======================== Lektion #10 ===


Jedes Programm gibt einen Return-Code ("Beendigungscode") an das aufrufende Programm zurück, normalerweise also an COMMAND.COM. Dieser Return-Code ist ein Byte und kann daher die Werte 0...255 haben.

Um diesen Return-Code zu interpretieren, muß man natürlich wissen, welche Werte für welchen Fall von dem betreffenden Programm vorgesehen sind. In den meisten Fällen wird der Code benutzt, um mitzuteilen, ob ein Fehler aufgetreten ist: Null bedeutet "Programm ordnungsgemäß beendet", jeder andere Wert signalisiert einen Fehler. Wenn es "leichte" und "schwere" Fehler gibt, kann das Programm verschiedene Codes verwenden: je höher um so schwerwiegender der Fehler.

Auf dieser Basis wurde die IF ERRORLEVEL... Abfrage im Batch konzipiert:
IF ERRORLEVEL n
bedeutet: IF Return-Code >= n (größer oder gleich n)

So kann mit einer einzigen Abfrage (IF ERRORLEVEL 1) festgestellt werden, ob überhaupt ein Fehler aufgetreten ist, ohne daß alle anderen (möglicherweise gelieferten) Codes abgefragt werden müssen.

Bei allen ERRORLEVEL-Abfragen muß man sich also der "größer/gleich" Logik bewußt sein. Wenn auf verschiedene Return-Codes reagiert werden soll, ist eine Abfrage in absteigender Folge erforderlich.

Beispiel: Ein Programm kann die Return-Codes 0,1,3 und 9 zurückgeben. Dann lautet die Abfrage:
IF errorlevel 9 goto Label-9
IF errorlevel 3 goto Label-3
IF errorlevel 1 goto Label-1
:: hier bleibt nur noch errorlevel 0

Übrigens:
Die Abfrage "IF [not] ERRORLEVEL 0 ... " ist absolut witzlos, denn größer oder gleich Null ist der Return-Code IMMER.
Um nur den Return-Code 0 abzufragen verwendet man logischerweise:
IF NOT errorlevel 1 goto ...

Soll nur ein ganz bestimmter Code abgefangen werden, z.B. 100, dann geht das so:
IF errorlevel 100  IF NOT errorlevel 101 goto ....


Noch ein Hinweis:

Der Return-Code kann nur in dieser IF ERRORLEVEL Konstruktion angesprochen werden. Eine *direkte* Verwendung des Wertes (z.B. als Variable) ist nicht so ohne weiteres möglich.

Andere Verwendung des Return-Codes :

Ein Programm kann natürlich den Return-Code auch für andere Zwecke als nur für Fehler verwenden. Z.B. kann ein Mailer mit bestimmten Codes mitteilen, was gerade anliegt. Auf jeden Fall muß vereinbart sein, welche Codes für welchen Zweck verwendet werden. Dafür gibt es keinerlei allgemeine Regeln.

DOS-Befehle :

DOS-Befehle, also in COMMAND.COM integrierte Befehle ohne eigene Programmdatei, geben überhaupt keinen Return-Code zurück, auch nicht Null. Der zuvor produzierte Return-Code bleibt erhalten!

Das hat den Vorteil, daß Befehle wie ECHO den letzten Return-Code nicht verändern, aber leider auch den Nachteil, daß man auf diese Weise nicht feststellen kann, ob z.B. ein COPY oder DEL erfolgreich war.

Sonstige DOS-Dienstprogramme :

Der FIND-Befehl gibt den erwarteten Errorlevel zurück: 0=gefunden,1=nicht gefunden - allerdings erst seit MS-DOS Version 6.xx. Wer ähnliches z.B. von FC (Dateivergleich) erwartet, sieht sich leider getäuscht.

Grundsätzlich sollte man sich also genau informieren, welche Returncodes geliefert werden, wenn Errorlevel-Abfragen benutzt werden. Entsprechende Informationen sind teils in alten DOS-Handbüchern,teils auch in der HELP-Funktion (ab MS-DOS 6.xx), meist aber gar nicht zu finden. Notfalls also selbst testen.

Temperatur auf der Admin Seite von Pihole anzeigen

Wie ihr hier auf dem Screenshot sehen könnt wird bei mir die Temperatur direkt in der Admin Webseite mit angezeigt.
Es liegt hier eine Farbskala zugrunde.

Alles bis 60 °C = grün
Zwischen 61 °C und 79 °C = gelb
Alles über 80 °C = rot



Ich wurde schon mehrmals deswegen angeschrieben wie ich das realisiert habe, ist ganz einfach ;-)

1.) Anmelden über ssh auf dem Pihole System
2.) folgenden Befehl ausführen
nano /var/www/html/admin/header.html

3.) Dort sucht ihr nach diesem Block
 "0") {
            echo ' Active
'; } else { echo ' Offline
'; }

4.) Darunter fügt ihr die Temperatur ein indem ihr diesem Block direkt darunter kopiert (bei mir Zeile 114)
// Temperatur auslesen und darstellen
$datei = "/sys/class/thermal/thermal_zone0/temp";
// Datei zeilenweise auslesen
$zeile = file($datei);
$temp = $zeile[0];
$temp0 = substr($temp,0,2);
$temp1 = number_format($temp / 1000,2, '.', '');
// bis 60 Grad ok
if ($temp0 <= 60) {
echo '  ' . $temp1 . ' C';
}
// ab 61 Grad warning
if ($temp0 >= 61 AND $temp <= 79) {
echo '  ' . $temp1 . ' C';
}
// ab 80 Grad Critical
if ($temp0 >= 80) {
echo '  ' . $temp1 . ' C';
}

SSH Login mit authorized_keys (ohne Passwort )

Problem : Man möchte mit einem Bash Script (Server A) z.B. Sicherungen von einem entfernten Server (Server B) automatisiert abholen. Da hier die Eingabe eines Passwortes hinderlich ist realisiert man das über einen SSH Key.

Lösung :

1.) erstellen eines SSH Keys auf Server A mit dem Befehl
ssh-keygen -t rsa


2.) erstellen des Ordners .ssh im Homeverzeichnis auf Server B, sollte dieser bereits existieren auch gut :-)
mkdir -p ~/.ssh


3.) importieren des erstellten Keys von Server A in der Datei .ssh/authorized_keys auf Server B
cat ~/.ssh/id_rsa.pub | ssh user@[Hostname von Server B] 'cat >> .ssh/authorized_keys'
oder
cat ~/.ssh/id_rsa.pub | ssh user@[IP-Adresse von Server B] 'cat >> .ssh/authorized_keys'


Anmerkung: Man kann auch Schritt 2 und 3 in einem zusammenfassen. Das gute daran man muss sich nicht erst auf Server B anmelden ;-)
cat ~/.ssh/id_rsa.pub | ssh root@[Hostname von Server B] 'mkdir -p ~/.ssh ; cat >> .ssh/authorized_keys'



4.) testen des Zugangs ohne Passwort z.B. mit diesem Befehl von Server A aus
ssh user@hostname
oder
ssh user@ip-adresse

Installierte Rollen & Features eines Servers anzeigen

Wenn man die installierten Rollen & Features eines Servers anzeigen möchte ist der schnellste Weg die Powershell.
Hierführ wird .NET Framework 4.5 und Powershell 4.0 benötigt.

Der Befehl dafür lautet :
Get-WindowsFeature | Where installed -eq true




Bitte schaut nach ob es ein aktuelleres Update für .NET Framework gibt zum Zeitpunkt der Erstellung war das aktuellste Release 4.5.2


Downloads :
.NET Framework 4.5
Powershell 4.0
“Das einzig sichere System müsste ausgeschaltet, in einem versiegelten und von Stahlbeton ummantelten Raum und von bewaffneten Schutztruppen umstellt sein.”
Gene Spafford (Sicherheitsexperte)