Server 2008 R2 - Add-WindowsFeature NET-HTTP-Activation - 0x800f081f

Problem:
Bei meiner Exchange-Installation wollte ich auf einem Server 2008R2 mittels Powershell alle nötigen Features hinzufügen. Dabei ist mir die Routine immer bei der Installation "NET-HTTP-Activation" auf den Fehler 0x800f081f gelaufen.


Lösung:
Nach einigem Probieren bin ich auf einen Eintrag im Internet gestoßen, wie man das .NetFX3 manuell installieren kann.
Hierzu bitte eine Installations-DVD in das Laufwerk legen (hier E:) und den folgenden Befehl als Administrator starten:

DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:E:\sources\sxs

Wobei Source: eventuell angepasst werden muss, je nachdem wo das Laufwerk gemountet ist.

Danach ließ sich die die NET-HTTP-Activation problemlos per Powershell installieren.

Windows 7 - Windows Update läuft ewig / WMI reparieren

Problem : Das Windows Update läuft ewig und findet keine neuen Updates, hier gibts mehrere Gründe dafür. Bei mir war es nur das WMI das defekt ist.

Lösung : Einmal WMI reparieren ;-)

net stop winmgmt
REN "%windir%\System32\Wbem\Repository" "%windir%\System32\Wbem\Repository_BACKUP"
net start winmgmt
winmgmt /salvagerepository
winmgmt /resetrepository

Robocopy: FEHLER 64 (0x00000040) Der angegebene Netzwerkname ist nicht mehr verfügbar.

Problem:
Ich hatte einen Fehler beim Kopieren von Daten mittels Robocopy auf einem Server 2008R2. Hier kam ich folgenden Fehler bei einzelnen Dateien:

„2016/11/21 00:31:28 FEHLER 64 (0x00000040) Folgende Datei wird kopiert D:\blahblahblah.xlsm
Der angegebene Netzwerkname ist nicht mehr verfügbar.“


Lösung:
Nach etwas Suche und Recherche bin ich darauf gestoßen, dass der Parameter /Z in diesem Zusammenhang Probleme machen kann.
/Z : Copy files in restartable mode (survive network glitch)

Leider scheinen manche Shares damit Probleme zu haben, daher habe ich den Parameter komplett entfernt und somit wird per Default /B gewählt.
/B : Copy files in Backup mode

Ich habe jetzt alle Robocopy-Jobs angepasst und getestet…alles gut!

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.
“Das einzig sichere System müsste ausgeschaltet, in einem versiegelten und von Stahlbeton ummantelten Raum und von bewaffneten Schutztruppen umstellt sein.”
Gene Spafford (Sicherheitsexperte)