Zum 23.08.2023 ist die NWC Services GmbH zur CANCOM GmbH geworden. Besuchen Sie uns gerne auf www.cancom.de
Toggle Bar

BLOG

BLOGGING CONSULTANTS

NWC Services Blog

Blogs von Consultants der NWC Services GmbH

Installationszeitpunkt von DSM Paketen

Vermutlich jeder NetInstall- / Enteo v6- / DSM 7-Administrator hat sich schonmal die Registry auf den gemanageten Clients unterhalb von Software\NetSupport\NetInstall\Installed Apps angeschaut, weil ja dort die ganzen Infos über die auf dieser Maschine bzw. für einen Benutzer ausgeführten Pakete hinterlegt sind.

Unter anderem gibt's dort auch einen Value LastInstallTime, in dem der Zeitpunkt der letzten Installation des jeweiligen Paketes hinterlegt ist. Allerdings ist dieser Wert vom Typ "Time_t" und wird in einem Byte-Array gespeichert, das die Anzahl der Sekunden seit dem 01.01.1970 angibt und ist damit für den durchschnittlich begabten Systemadministrator (oder Consultant – wie mich) eher nicht lesbar... ;-)

Um dieses Byte-Array nun in eine normale Datum-Uhrzeit-Kombination umzuwandeln, gibt es verschiedene Wege:

  1. die NWC Services stellt Ihnen im Downloadbereich das kostenlose Kommandozeilen-Tool "TimeConv" zur Verfügung, mit dem Sie diese Umrechnung durchführen können. Rufen Sie dazu TimeConv.exe mit dem Wert aus LastInstallTime auf. Dabei ist darauf zu achten, dass Sie – da es sich um einen hexadezimalen Wert handelt – ein 0x voranstellen. Außerdem müssen Sie die vier Bytes "von hinten nach vorne" (das höchstwertige Byte steht ganz am Ende) und ohne Leerzeichen dazwischen übergeben.

    Beispiel: in der Registry finden Sie den Wert "45 86 ad 4d". Rufen Sie dann TimeConv in einem Shell-Fenster folgendermaßen auf:

    timeconv 0x4dad8645


    In dem Output sehen Sie unter anderem die Zeile Unix date and time: – der darin angzeigte Wert, entspricht dem Datum und der Uhrzeit (mit der zu diesem Zeitpunkt gültigen Sommer- bzw. Winterzeit-Einstellung und in Abhängigkeit der Systemzeit und Zeitzone). Im obigen Beisiel wurde das Paket also am Dienstag, 19. April 2011 um 14:55:33 Uhr installiert.
  2. Wenn Sie bereits mit PowerShell arbeiten, können Sie natürlich auch die Möglichkeiten des .NET-Frameworks nutzen, um die Konvertierung der Zeitwerte durchzuführen. Die untenstehende Funktion entspricht in etwa dem Funktionsumfang von TimeConv.exe. Die können diese Funktion leicht in Ihr eigenes Script übernehmen und dort aufrufen:

    function TimeTToDateTime($hex = $null, $int = $null)
    {
    $time_t = $null;
    if ($hex -ne $null) { $time_t = [Convert]::ToUInt32($hex, 16); }
    elseif ($int -ne $null) { $time_t = [Convert]::ToUInt32($int, 10); }
    else { Write-Error "Need input ..."; return ; }
    return [DateTime]::Parse("1970-01-01T00:00:00").AddSeconds($time_t);
    }

    Der Aufruf der Funktion innerhalb Ihres Scripts geschieht dann auf eine der in den folgenden Beispielen gezeigten Möglichkeiten:
    TimeTToDateTime 0x4dad8645
    TimeTToDateTime 4dad8645
    TimeTToDateTime -int 1303217733

    Sollten Sie auch Bedarf an der Umkehrfunktion haben, also einen Datumswert in einen Time_t Wert umwandeln zu müssen, verwenden Sie einfach die folgende Funktion:

    function DateTimeToTimeT($dateTime)
    {
    return [Convert]::ToUInt32([Math]::Abs(($dateTime - [DateTime]::Parse("1970-01-01T00:00:00")).TotalSeconds));
    }

    und rufen Sie sie beispielsweise so auf:
    DateTimeToTimeT ([DateTime]::Now)
    (DateTimeToTimeT ([DateTime]::Now)).ToString("X8")
×
Stay Informed

When you subscribe to the blog, we will send you an e-mail when there are new updates on the site so you wouldn't miss them.

PowerShell-Scripts in DSM 7 (Teil I)
Packaging.Docs - Checkliste für die Paketierung
 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Bereits registriert? Hier einloggen
Donnerstag, 18. April 2024

Sicherheitscode (Captcha)